Я успешно загрузкой сжатых звуковых файлов с помощью FFmpeg и запрашивая их channel_layouts используя код я написал:AVCodecContext :: channel_layout 0 для WAV файлов
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);
Я удалил все проверки ошибок для краткости. Однако для файлов WAV Microsoft (моно или стерео) 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 (с точно те же аудиоданные, сгенерированные из того же приложения), дает channel_layout
0x4 (AV_CH_FRONT_CENTER
).
Я должен заявить, я использую FFmpeg 2.1. – cmannett85