|
|
@ -173,6 +173,58 @@ |
|
|
|
* |
|
|
|
* |
|
|
|
* @defgroup lavf_encoding Muxing |
|
|
|
* @defgroup lavf_encoding Muxing |
|
|
|
* @{ |
|
|
|
* @{ |
|
|
|
|
|
|
|
* Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write |
|
|
|
|
|
|
|
* it into files or other output bytestreams in the specified container format. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* The main API functions for muxing are avformat_write_header() for writing the |
|
|
|
|
|
|
|
* file header, av_write_frame() / av_interleaved_write_frame() for writing the |
|
|
|
|
|
|
|
* packets and av_write_trailer() for finalizing the file. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* At the beginning of the muxing process, the caller must first call |
|
|
|
|
|
|
|
* avformat_alloc_context() to create a muxing context. The caller then sets up |
|
|
|
|
|
|
|
* the muxer by filling the various fields in this context: |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* - The @ref AVFormatContext.oformat "oformat" field must be set to select the |
|
|
|
|
|
|
|
* muxer that will be used. |
|
|
|
|
|
|
|
* - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb |
|
|
|
|
|
|
|
* "pb" field must be set to an opened IO context, either returned from |
|
|
|
|
|
|
|
* avio_open2() or a custom one. |
|
|
|
|
|
|
|
* - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must |
|
|
|
|
|
|
|
* be created with the avformat_new_stream() function. The caller should fill |
|
|
|
|
|
|
|
* the @ref AVStream.codec "stream codec context" information, such as the |
|
|
|
|
|
|
|
* codec @ref AVCodecContext.codec_type "type", @ref AVCodecContext.codec_id |
|
|
|
|
|
|
|
* "id" and other parameters (e.g. width / height, the pixel or sample format, |
|
|
|
|
|
|
|
* etc.) as known. The @ref AVCodecContext.time_base "codec timebase" should |
|
|
|
|
|
|
|
* be set to the timebase that the caller desires to use for this stream (note |
|
|
|
|
|
|
|
* that the timebase actually used by the muxer can be different, as will be |
|
|
|
|
|
|
|
* described later). |
|
|
|
|
|
|
|
* - The caller may fill in additional information, such as @ref |
|
|
|
|
|
|
|
* AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" |
|
|
|
|
|
|
|
* metadata, @ref AVFormatContext.chapters "chapters", @ref |
|
|
|
|
|
|
|
* AVFormatContext.programs "programs", etc. as described in the |
|
|
|
|
|
|
|
* AVFormatContext documentation. Whether such information will actually be |
|
|
|
|
|
|
|
* stored in the output depends on what the container format and the muxer |
|
|
|
|
|
|
|
* support. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* When the muxing context is fully set up, the caller must call |
|
|
|
|
|
|
|
* avformat_write_header() to initialize the muxer internals and write the file |
|
|
|
|
|
|
|
* header. Whether anything actually is written to the IO context at this step |
|
|
|
|
|
|
|
* depends on the muxer, but this function must always be called. Any muxer |
|
|
|
|
|
|
|
* private options must be passed in the options parameter to this function. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* The data is then sent to the muxer by repeatedly calling av_write_frame() or |
|
|
|
|
|
|
|
* av_interleaved_write_frame() (consult those functions' documentation for |
|
|
|
|
|
|
|
* discussion on the difference between them; only one of them may be used with |
|
|
|
|
|
|
|
* a single muxing context, they should not be mixed). Do note that the timing |
|
|
|
|
|
|
|
* information on the packets sent to the muxer must be in the corresponding |
|
|
|
|
|
|
|
* AVStream's timebase. That timebase is set by the muxer (in the |
|
|
|
|
|
|
|
* avformat_write_header() step) and may be different from the timebase the |
|
|
|
|
|
|
|
* caller set on the codec context. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* Once all the data has been written, the caller must call av_write_trailer() |
|
|
|
|
|
|
|
* to flush any buffered packets and finalize the output file, then close the IO |
|
|
|
|
|
|
|
* context (if any) and finally free the muxing context with |
|
|
|
|
|
|
|
* avformat_free_context(). |
|
|
|
* @} |
|
|
|
* @} |
|
|
|
* |
|
|
|
* |
|
|
|
* @defgroup lavf_io I/O Read/Write |
|
|
|
* @defgroup lavf_io I/O Read/Write |
|
|
|