Avcodec: генерировать заголовок OPUS для потока

Я использую OPUS с avcodec для кодирования звуков и их потоковой передачи по собственному протоколу.

Пока он работает с кодеком MP2, но когда я переключаюсь на OPUS, у меня возникает следующая проблема:

[opus @ 1b06d040] Error parsing the packet header.     

Я предполагаю, что в отличие от MP2 мне нужно сгенерировать заголовок для моего потока данных, закодированного в OPUS, но я не знаю, как это сделать.

Может кто-нибудь объяснить мне, как это сделать? Спасибо.


person MadMass    schedule 31.05.2015    source источник


Ответы (1)


Эта ошибка возникает из-за сбоя ff_opus_parse_packet(), который обрабатывает необработанный заголовок пакета opus, то, что спецификация называет байтом «TOC» (для таблицы содержания) и необязательными длинами подкадра. Это означает, что libavcodec не смог найти ожидаемую продолжительность пакета.

Так что, вероятно, ваш собственный протокол повреждает данные, возвращает неправильную длину данных или вы иным образом неправильно разделяете пакет opus из своего уровня кадрирования.

Вам не нужно изобретать свой собственный протокол, если вы этого не хотите. Существует два установленных дизайна: Opus over RTP для интерактивного использования (например, чат в режиме реального времени, где важна задержка) задокументирован в RFC 7587. Для потоковой передачи HTTP, хранения файлов для записи, воспроизведения и других подобных приложений используется контейнер Ogg, задокументированный здесь. Есть реализации обоих из них в libavformat. См. rtpenc.c, oggenc.c и oggparseopus.c, если вам интересны подробности.

person Ralph Giles    schedule 30.09.2015