Package-level declarations
Types
One configured and opened audio encoder. Some codecs require a fixed input chunk size (AAC: 1024 samples). For those, route frames through FilterGraph.buildAudio and call FilterGraph.setOutputFrameSize with frameSize (Transcoder does this automatically).
One configured and opened audio encoder. Some codecs require a fixed input chunk size (AAC: 1024 samples). For those, route frames through FilterGraph.buildAudio and call FilterGraph.setOutputFrameSize with frameSize (Transcoder does this automatically).
One configured and opened audio encoder. Some codecs require a fixed input chunk size (AAC: 1024 samples). For those, route frames through FilterGraph.buildAudio and call FilterGraph.setOutputFrameSize with frameSize (Transcoder does this automatically).
One configured and opened audio encoder. Some codecs require a fixed input chunk size (AAC: 1024 samples). For those, route frames through FilterGraph.buildAudio and call FilterGraph.setOutputFrameSize with frameSize (Transcoder does this automatically).
Per-input description for FilterGraph.buildAudioMulti.
One container chapter (KD-5), bounds in microseconds on the same ABSOLUTE timeline every other timestamp KiteFFmpeg reports uses (subtract MediaSource.startTimeMicros to move onto the relative timeline seeks accept).
Where a chroma sample sits relative to its luma samples. Values match FFmpeg's AVChromaLocation.
The colour metadata a renderer must honour to draw a frame correctly.
The YCbCr to RGB matrix. Values match FFmpeg's AVColorSpace.
The colour primaries. Values match FFmpeg's AVColorPrimaries.
The transfer function, meaning the gamma curve. Values match FFmpeg's AVColorTransferCharacteristic.
An output stream fed by stream-copy. Opaque handle; packets flow through Remuxer/Transcoder.
An output stream fed by stream-copy. Opaque handle; packets flow through Remuxer/Transcoder.
An output stream fed by stream-copy. Opaque handle; packets flow through Remuxer/Transcoder.
An output stream fed by stream-copy. Opaque handle; packets flow through Remuxer/Transcoder.
What decoding does when FFmpeg reports damaged data.
Static facade for global FFmpeg state: version info, build flags and capability probing.
Static facade for global FFmpeg state: version info, build flags and capability probing.
Static facade for global FFmpeg state: version info, build flags and capability probing.
Static facade for global FFmpeg state: version info, build flags and capability probing.
The real web backend, over the generated binding.
Every KiteFFmpeg failure surfaces as FFmpegException wrapping a typed FFmpegError.
The FFmpeg identity report: what this build was compiled against, what it is linked to, and whether the two are compatible.
A compiled libavfilter graph. Build with FilterGraph.buildVideo / FilterGraph.buildAudio (single input) or buildVideoMulti / buildAudioMulti (N inputs: overlay, amix, …). Feed frames through process (single input) or feedInput (any input). Close it when done.
A compiled libavfilter graph. Build with FilterGraph.buildVideo / FilterGraph.buildAudio (single input) or buildVideoMulti / buildAudioMulti (N inputs: overlay, amix, …). Feed frames through process (single input) or feedInput (any input). Close it when done.
A compiled libavfilter graph. Build with FilterGraph.buildVideo / FilterGraph.buildAudio (single input) or buildVideoMulti / buildAudioMulti (N inputs: overlay, amix, …). Feed frames through process (single input) or feedInput (any input). Close it when done.
A compiled libavfilter graph. Build with FilterGraph.buildVideo / FilterGraph.buildAudio (single input) or buildVideoMulti / buildAudioMulti (N inputs: overlay, amix, …). Feed frames through process (single input) or feedInput (any input). Close it when done.
One decoded frame (video or audio), backed by an opaque native owner. Close it to release the buffers.
One decoded frame (video or audio), backed by an opaque native owner. Close it to release the buffers.
AVFrame-backed Frame implementation. The native pointer (nativeFrame) is internal: users go through info / copyPlanesToByteArray; the filter graph & encoder modules in this package read the pointer directly for zero-copy hand-offs.
One decoded frame (video or audio), backed by an opaque native owner. Close it to release the buffers.
A decoded frame, as a handle into the codec module.
Immutable per-frame metadata snapshot: no native handle, safe to hold forever.
A hardware acceleration a decoder can be opened with (KiteFFmpeg window 3).
Marks API that hands out opaque native-backed owners, manual lifetimes, or a stage of the pipeline that the caller must drive itself.
Loads the codec, which on the web is a separate wasm module fetched over the network.
Media bytes from caller code instead of a path: the custom I/O door. A player streams through its own HTTP client with its own TLS and auth, reads from an encrypted store, a torrent, a cache, or a byte array it already holds, and FFmpeg demuxes those bytes exactly as it would a file's.
The container-level facts in one value (KD-5): what a player's media screen shows before any stream is selected. Assembled from the source's own members, so it can never disagree with them.
An open output file (muxer). Add every encoder first, video and audio, because the muxer's header freezes the stream list. Then push frames through the encoders. Close the sink to write the trailer and flush buffers.
An open output file (muxer). Add every encoder first, video and audio, because the muxer's header freezes the stream list. Then push frames through the encoders. Close the sink to write the trailer and flush buffers.
An open output file (muxer). Add every encoder first, video and audio, because the muxer's header freezes the stream list. Then push frames through the encoders. Close the sink to write the trailer and flush buffers.
An open output file (muxer). Add every encoder first, video and audio, because the muxer's header freezes the stream list. Then push frames through the encoders. Close the sink to write the trailer and flush buffers.
An opened input: a local file or a URL. It owns the container cursor and per-stream resources, and closing it releases them all. Confine it to one coroutine context, because the underlying media objects are not safe to call concurrently.
An opened input: a local file or a URL. It owns the container cursor and per-stream resources, and closing it releases them all. Confine it to one coroutine context, because the underlying media objects are not safe to call concurrently.
An opened input: a local file or a URL. It owns the container cursor and per-stream resources, and closing it releases them all. Confine it to one coroutine context, because the underlying media objects are not safe to call concurrently.
An opened input: a local file or a URL. It owns the container cursor and per-stream resources, and closing it releases them all. Confine it to one coroutine context, because the underlying media objects are not safe to call concurrently.
An open container, over the codec module.
A demuxed packet the caller owns.
A demuxed packet the caller owns.
A demuxed packet the caller owns.
A demuxed packet the caller owns.
A demuxed packet the caller owns.
Reads owned packets from one MediaSource cursor under the caller's control. This is the demuxing half of a player, kept separate from decoding so audio and video decoding can proceed independently and a seek can replace the caller's queued generation explicitly.
Reads owned packets from one MediaSource cursor under the caller's control. This is the demuxing half of a player, kept separate from decoding so audio and video decoding can proceed independently and a seek can replace the caller's queued generation explicitly.
Reads packets from a container, one at a time, under the caller's control.
Reads owned packets from one MediaSource cursor under the caller's control. This is the demuxing half of a player, kept separate from decoding so audio and video decoding can proceed independently and a seek can replace the caller's queued generation explicitly.
Reads owned packets from one MediaSource cursor under the caller's control. This is the demuxing half of a player, kept separate from decoding so audio and video decoding can proceed independently and a seek can replace the caller's queued generation explicitly.
The pixel format of a video frame, named exactly as FFmpeg names it (yuv420p, nv12, …). The platform bridge translates the name to an AV_PIX_FMT_* value.
FFmpeg's AVRational: an exact fraction. Use it for time-bases, frame rates and aspect ratios. Float conversion is lossy; do all arithmetic on the rational form when possible.
Lossless container rewrite: ffmpeg -c copy. Packets move from input to output without touching a decoder or encoder, so a full-length movie remuxes in seconds and bit-exact quality is preserved. Use it to change containers (mp4 → mkv), strip streams, cut on keyframes, or re-wrap after a download.
Lossless container rewrite: ffmpeg -c copy. Packets move from input to output without touching a decoder or encoder, so a full-length movie remuxes in seconds and bit-exact quality is preserved. Use it to change containers (mp4 → mkv), strip streams, cut on keyframes, or re-wrap after a download.
Lossless container rewrite: ffmpeg -c copy. Packets move from input to output without touching a decoder or encoder, so a full-length movie remuxes in seconds and bit-exact quality is preserved. Use it to change containers (mp4 → mkv), strip streams, cut on keyframes, or re-wrap after a download.
Lossless container rewrite: ffmpeg -c copy. Packets move from input to output without touching a decoder or encoder, so a full-length movie remuxes in seconds and bit-exact quality is preserved. Use it to change containers (mp4 → mkv), strip streams, cut on keyframes, or re-wrap after a download.
Audio sample format. Planar variants store each channel in its own plane; packed variants interleave channels. s16 / s16p is the most common decoder output.
Which way a seek may land relative to the target.
Which way a seek may land relative to the target.
Which way a seek may land relative to the target.
Which way a seek may land relative to the target.
Which way a seek may land relative to the target.
One decoder driven explicitly by the caller.
One decoder driven explicitly by the caller.
One decoder, driven by the caller.
One decoder driven explicitly by the caller.
One decoder driven explicitly by the caller.
Read-only snapshot of an input stream's metadata.
Progress snapshot delivered during Transcoder.transcode.
High-level pipeline: open input → decode → optionally filter → encode → mux. The equivalent of ffmpeg -ss 12 -to 45 -i in.mp4 -vf "scale=…" -c:v libx264 -c:a aac out.mp4 as one Kotlin call with proper cancellation and typed errors.
High-level pipeline: open input → decode → optionally filter → encode → mux. The equivalent of ffmpeg -ss 12 -to 45 -i in.mp4 -vf "scale=…" -c:v libx264 -c:a aac out.mp4 as one Kotlin call with proper cancellation and typed errors.
High-level pipeline: open input → decode → optionally filter → encode → mux. The equivalent of ffmpeg -ss 12 -to 45 -i in.mp4 -vf "scale=…" -c:v libx264 -c:a aac out.mp4 as one Kotlin call with proper cancellation and typed errors.
High-level pipeline: open input → decode → optionally filter → encode → mux. The equivalent of ffmpeg -ss 12 -to 45 -i in.mp4 -vf "scale=…" -c:v libx264 -c:a aac out.mp4 as one Kotlin call with proper cancellation and typed errors.
Per-library version triplets, both columns.
One configured and opened video encoder. Pull from a Flow<Frame> via drive. That call pushes each frame into the encoder, pulls packets, hands them to the sink's muxer, and flushes when the flow completes.
One configured and opened video encoder. Pull from a Flow<Frame> via drive. That call pushes each frame into the encoder, pulls packets, hands them to the sink's muxer, and flushes when the flow completes.
One configured and opened video encoder. Pull from a Flow<Frame> via drive. That call pushes each frame into the encoder, pulls packets, hands them to the sink's muxer, and flushes when the flow completes.
One configured and opened video encoder. Pull from a Flow<Frame> via drive. That call pushes each frame into the encoder, pulls packets, hands them to the sink's muxer, and flushes when the flow completes.
Per-input description for FilterGraph.buildVideoMulti.
VP9 chroma plane resolution. Chroma siting remains in ColorInfo.chromaLocation.
Codec-level VP9 declarations copied from FFmpeg's probed stream parameters.
Converts video frames to RGBA without the pixels ever entering Kotlin memory.
Properties
FrameInfo.duration converted to microseconds. Null when the decoder supplied no duration. A duration is an interval, so no container start offset applies to it.
The hardware surface behind this frame, or null when its pixels are in main memory.
The assembled container-level view. Reads only members the source already exposes.
FrameInfo.pts converted to microseconds on the stream's own timeline. Null when the frame carries no timestamp.
Functions
Buffers a frame flow without stranding the frames it is still holding.