1

Androidでメディアプレーヤーアプリケーションを開発しようとしています。ドルフィンプレイヤーのコードを参考にしています。しかし、ビデオの再生中にその場でオーディオと字幕トラックを変更する方法がわかりません。ffmpegのコマンドラインを使用することは可能ですが、ffmpeg C++コードでそれを行う方法は?

4

1 に答える 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 に答える