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

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

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

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

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

Может кто-нибудь объяснить мне, как это сделать? Благодарю.

1 ответ

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

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

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

Другие вопросы по тегам