我正在尝试在 android 中开发媒体播放器应用程序。我使用海豚播放器的代码作为参考。但我不知道如何在播放视频时动态更改音频和字幕轨道。使用 ffmpeg 的命令行是可能的,但是如何使用 ffmpeg c++ 代码来做到这一点?
问问题
2628 次
1 回答
2
视频文件是一个包含一堆流的容器。首先,您必须打开视频文件并提取流信息(对于较小的代码避免错误检查):
AVFormatContext *pFormatCtx;
av_open_input_file( &pFormatCtx, argv[1], NULL, 0, NULL );
av_find_stream_info( pFormatCtx );
现在您可以迭代流并查找所有音频流:
for ( i=0; i != pFormatCtx->nb_streams; i++ )
{
if (pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_AUDIO) audioStreams.push_back( i );
}
选择您要播放的流并获取指向编解码器的指针并打开它:
AVCodecContext* aCodecCtx = pFormatCtx->streams[SelectedAudioStream]->codec;
AVCodec* aCodec = avcodec_find_decoder(aCodecCtx->codec_id);
avcodec_open(aCodecCtx, aCodec);
之后像往常一样解码流。
于 2012-07-19T08:03:27.720 回答