avformat_write_header возвращает код ошибки при попытке записать кадр, закодированный PCMU, в файл avi/mov

Я пытаюсь записать данные, закодированные PCMU G.711, в мультимедийный контейнер avi, используя приведенную ниже программу, которая дает Error occurred when opening output file: Operation not permitted, а при использовании контейнера mov она дает Error occurred when opening output file: Invalid argument. Я установил AV_CODEC_ID_PCM_U16LE в качестве аудиокодека выходного формата и AV_SAMPLE_FMT_S16 в качестве образца формата.

В чем проблема? Заранее спасибо!


person Kaidul    schedule 06.08.2015    source источник


Ответы (1)


Вы пишете AV_CODEC_ID_PCM_U16LE, который не является G711, а является необработанными 16-битными данными PCM без знака. AVI/mov не поддерживают это (они поддерживают 16-битные данные PCM со знаком или 8-битные данные PCM без знака, но не 16-битные данные PCM без знака). Вот почему вы получаете эту ошибку. Но в любом случае, вы не хотите использовать это, так как это не G711.

G711 бывает двух типов: мю-закон или а-закон, поэтому вам нужно решить, какой из двух вам нужен, а затем использовать правильный AVCodecID (AV_CODEC_ID_PCM_ALAW или CODEC_ID_PCM_MULAW).

person Ronald S. Bultje    schedule 06.08.2015
comment
Большое спасибо за ваш ответ! Ну, я понимаю, когда я использовал данные PCM G711, для которых CODEC_ID_PCM_MULAW имеет совпадение. Но сейчас я использую необработанные данные PCM (данные PCMshort *G711 после декодирования) и для этого какой должен быть правильный AVCodecID? А какой должен быть образец формата? AV_SAMPLE_FMT_S16 ? И должен ли я изменить длину данных, например dataSize >>= 1, как здесь: ffmpeg.org/doxygen /trunk/muxing-example_8c-source.html 119 строк? - person Kaidul; 07.08.2015
comment
Если вы хотите записать необработанный звук в файл, используйте AV_CODEC_ID_PCM_S16LE. Я бы следовал примеру кода, если это поможет ему работать, я не знаю, как именно выглядит ваш код. - person Ronald S. Bultje; 07.08.2015
comment
Сэр, не могли бы вы взглянуть на расчет stackoverflow.com/questions/31917032/ ? - person Kaidul; 10.08.2015