【发布时间】:2013-11-15 12:43:38
【问题描述】:
我已经使用 FFmpeg 成功加载压缩音频文件并使用我编写的一些代码查询它们的 channel_layouts:
AVFormatContext* fmtCxt = nullptr;
avformat_open_input( &fmtCxt, "###/440_sine.wav", nullptr, nullptr );
avformat_find_stream_info( fmtCxt, nullptr );
av_find_best_stream( fmtCxt, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0 );
AVCodecContext* codecCxt = fmtCxt->streams[ret]->codec;
AVCodec* codec = avcodec_find_decoder( codecCxt->codec_id );
avcodec_open2( codecCxt, codec, nullptr );
std::cout << "Channel Layout: " << codecCxt->channel_layout << std::endl;
av_dump_format( fmtCxt, 0, "###/440_sine.wav", 0 );
为简洁起见,我删除了所有错误检查。但是对于 Microsoft WAV 文件(单声道或立体声),AVCodecContext::channel_layout 成员始终为 0 - 尽管 ffprobe 和 av_dump_format(..) 都返回有效信息:
Input #0, wav, from '###/440_sine.wav':
Duration: 00:00:00.01, bitrate: 740 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 1 channels, s16, 705 kb/s
codecCxt->channels 也返回正确的值。使用 flac 文件(完全从同一个应用程序生成相同的音频数据),得到一个 0x4 (AV_CH_FRONT_CENTER) 的 channel_layout。
【问题讨论】:
-
我应该声明我使用的是 FFmpeg 2.1。