Media stream containers usually have a several streams, such as a video stream and an audio stream. For example, you can get the audio stream using the following:
// A Format Context - see Reading Data for more info AVFormatContext *formatContext; // Inspect packets of stream to determine properties if (avformat_find_stream_info(formatContext, NULL) < 0){ // Error finding info } // Find the stream and its codec AVCodec* audioCodec; int audioStreamIndex = av_find_best_stream( formatContext, // The media stream AVMEDIA_TYPE_AUDIO, // The type of stream we are looking for - audio for example -1, // Desired stream number, -1 for any -1, // Number of related stream, -1 for none &audioCodec, // Gets the codec associated with the stream, can be NULL 0 // Flags - not used currently ); if(audioStreamIndex = AVERROR_STREAM_NOT_FOUND || !audioCodec){ // Error finding audio (ie. no audio stream?) }
To get other types of streams, you just need to replace the type of stream. The following are valid types:
AVMEDIA_TYPE_VIDEO,
AVMEDIA_TYPE_AUDIO,
AVMEDIA_TYPE_SUBTITLE,
AVMEDIA_TYPE_DATA, // Usually continuous
AVMEDIA_TYPE_ATTACHMENT, // Usually sparse