FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Functions
Muxing
I/O and Muxing/Demuxing Library

Muxers take encoded data in the form of AVPackets and write it into files or other output bytestreams in the specified container format. More...

Data Structures

struct  AVOutputFormat
 

Functions

int avformat_write_header (AVFormatContext *s, AVDictionary **options)
 Allocate the stream private data and write the stream header to an output media file.
 
int av_write_frame (AVFormatContext *s, AVPacket *pkt)
 Write a packet to an output media file.
 
int av_interleaved_write_frame (AVFormatContext *s, AVPacket *pkt)
 Write a packet to an output media file ensuring correct interleaving.
 
int av_write_uncoded_frame (AVFormatContext *s, int stream_index, AVFrame *frame)
 Write a uncoded frame to an output media file.
 
int av_interleaved_write_uncoded_frame (AVFormatContext *s, int stream_index, AVFrame *frame)
 Write a uncoded frame to an output media file.
 
int av_write_uncoded_frame_query (AVFormatContext *s, int stream_index)
 Test whether a muxer supports uncoded frame.
 
int av_write_trailer (AVFormatContext *s)
 Write the stream trailer to an output media file and free the file private data.
 
AVOutputFormatav_guess_format (const char *short_name, const char *filename, const char *mime_type)
 Return the output format in the list of registered output formats which best matches the provided parameters, or return NULL if there is no match.
 
enum AVCodecID av_guess_codec (AVOutputFormat *fmt, const char *short_name, const char *filename, const char *mime_type, enum AVMediaType type)
 Guess the codec ID based upon muxer and filename.
 
int av_get_output_timestamp (struct AVFormatContext *s, int stream, int64_t *dts, int64_t *wall)
 Get timing information for the data currently output.
 

Detailed Description

Muxers take encoded data in the form of 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:

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().

Function Documentation

int avformat_write_header ( AVFormatContext s,
AVDictionary **  options 
)

Allocate the stream private data and write the stream header to an output media file.

Parameters
sMedia file handle, must be allocated with avformat_alloc_context(). Its oformat field must be set to the desired output format; Its pb field must be set to an already opened AVIOContext.
optionsAn AVDictionary filled with AVFormatContext and muxer-private options. On return this parameter will be destroyed and replaced with a dict containing options that were not found. May be NULL.
Returns
0 on success, negative AVERROR on failure.
See Also
av_opt_find, av_dict_set, avio_open, av_oformat_next.
Examples:
muxing.c, remuxing.c, and transcode_aac.c.

Definition at line 392 of file mux.c.

Referenced by build_feed_streams(), ff_rtp_chain_mux_open(), hds_write_header(), hls_write_header(), http_prepare_data(), ism_write_header(), main(), mpegts_write_header(), open_slave(), rtp_new_av_stream(), seg_write_header(), segment_start(), write_output_file_header(), and write_packet().

int av_write_frame ( AVFormatContext s,
AVPacket pkt 
)

Write a packet to an output media file.

This function passes the packet directly to the muxer, without any buffering or reordering. The caller is responsible for correctly interleaving the packets if the format requires it. Callers that want libavformat to handle the interleaving should call av_interleaved_write_frame() instead of this function.

Parameters
smedia file handle
pktThe packet containing the data to be written. Note that unlike av_interleaved_write_frame(), this function does not take ownership of the packet passed to it (though some muxers may make an internal reference to the input packet).
This parameter can be NULL (at any time, not just at the end), in order to immediately flush data buffered within the muxer, for muxers that buffer up data internally before writing it to the output.
Packet's stream_index field must be set to the index of the corresponding stream in s->streams. It is very strongly recommended that timing information (pts, dts, duration) is set to correct values.
Returns
< 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush
See Also
av_interleaved_write_frame()
Examples:
transcode_aac.c.

Definition at line 600 of file mux.c.

Referenced by av_write_uncoded_frame_internal(), encode_audio_frame(), ff_write_chained(), hls_write_packet(), http_prepare_data(), ism_flush(), mpegts_write_packet_internal(), and segment_end().

int av_interleaved_write_frame ( AVFormatContext s,
AVPacket pkt 
)

Write a packet to an output media file ensuring correct interleaving.

This function will buffer the packets internally as needed to make sure the packets in the output file are properly interleaved in the order of increasing dts. Callers doing their own interleaving should call av_write_frame() instead of this function.

Parameters
smedia file handle
pktThe packet containing the data to be written.
If the packet is reference-counted, this function will take ownership of this reference and unreference it later when it sees fit. The caller must not access the data through this reference after this function returns. If the packet is not reference-counted, libavformat will make a copy.
This parameter can be NULL (at any time, not just at the end), to flush the interleaving queues.
Packet's stream_index field must be set to the index of the corresponding stream in s->streams. It is very strongly recommended that timing information (pts, dts, duration) is set to correct values.
Returns
0 on success, a negative AVERROR on error. Libavformat will always take care of freeing the packet, even if this function fails.
See Also
av_write_frame(), AVFormatContext.max_interleave_delta
Examples:
muxing.c, and remuxing.c.

Definition at line 833 of file mux.c.

Referenced by av_write_uncoded_frame_internal(), main(), tee_write_packet(), write_frame(), write_packet(), and write_video_frame().

int av_write_uncoded_frame ( AVFormatContext s,
int  stream_index,
AVFrame frame 
)

Write a uncoded frame to an output media file.

The frame must be correctly interleaved according to the container specification; if not, then av_interleaved_write_frame() must be used.

See av_interleaved_write_frame() for details.

Definition at line 991 of file mux.c.

int av_interleaved_write_uncoded_frame ( AVFormatContext s,
int  stream_index,
AVFrame frame 
)

Write a uncoded frame to an output media file.

If the muxer supports it, this function allows to write an AVFrame structure directly, without encoding it into a packet. It is mostly useful for devices and similar special muxers that use raw video or PCM data and will not serialize it into a byte stream.

To test whether it is possible to use it with a given muxer and stream, use av_write_uncoded_frame_query().

The caller gives up ownership of the frame and must not access it afterwards.

Returns
>=0 for success, a negative code on error

Definition at line 997 of file mux.c.

Referenced by main().

int av_write_uncoded_frame_query ( AVFormatContext s,
int  stream_index 
)

Test whether a muxer supports uncoded frame.

Returns
>=0 if an uncoded frame can be written to that muxer and stream, <0 if not

Definition at line 1003 of file mux.c.

Referenced by main().

int av_write_trailer ( AVFormatContext s)

Write the stream trailer to an output media file and free the file private data.

May only be called after a successful call to avformat_write_header.

Parameters
smedia file handle
Returns
0 if OK, AVERROR_xxx on error
Examples:
muxing.c, remuxing.c, and transcode_aac.c.

Definition at line 891 of file mux.c.

Referenced by close_connection(), ff_mov_close_hinting(), ff_rtsp_undo_setup(), hds_free(), hls_write_trailer(), http_prepare_data(), ism_free(), main(), sap_write_close(), seg_write_trailer(), segment_end(), tee_write_trailer(), transcode(), write_output_file_trailer(), and write_packet().

AVOutputFormat* av_guess_format ( const char *  short_name,
const char *  filename,
const char *  mime_type 
)

Return the output format in the list of registered output formats which best matches the provided parameters, or return NULL if there is no match.

Parameters
short_nameif non-NULL checks if short_name matches with the names of the registered formats
filenameif non-NULL checks if filename terminates with the extensions of the registered formats
mime_typeif non-NULL checks if mime_type matches with the MIME type of the registered formats
Examples:
transcode_aac.c.

Definition at line 120 of file format.c.

Referenced by av_guess_codec(), av_guess_format(), avformat_alloc_output_context2(), ff_rtp_chain_mux_open(), ffserver_guess_format(), hds_write_header(), hls_write_header(), ism_write_header(), mpegts_write_header(), open_output_file(), parse_ffconfig(), prepare_sdp_description(), rtp_new_av_stream(), seg_write_header(), and show_help_muxer().

enum AVCodecID av_guess_codec ( AVOutputFormat fmt,
const char *  short_name,
const char *  filename,
const char *  mime_type,
enum AVMediaType  type 
)

Guess the codec ID based upon muxer and filename.

Definition at line 155 of file format.c.

Referenced by choose_encoder().

int av_get_output_timestamp ( struct AVFormatContext s,
int  stream,
int64_t *  dts,
int64_t *  wall 
)

Get timing information for the data currently output.

The exact meaning of "currently output" depends on the format. It is mostly relevant for devices that have an internal buffer and/or work in real time.

Parameters
smedia file handle
streamstream in the media file
[out]dtsDTS of the last packet output for the stream, in stream time_base units
[out]wallabsolute time when that packet whas output, in microsecond
Returns
0 if OK, AVERROR(ENOSYS) if the format does not support it Note: some formats or devices may not allow to measure dts and wall atomically.

Definition at line 933 of file mux.c.