Как мультиплексировать потоки Vorbis и Theora с помощью libogg - PullRequest
4 голосов
/ 30 августа 2010

В настоящее время я пишу простой видеокодер Theora, который использует libogg, libvorbis и libtheora.В настоящее время я могу отправить кадры в кодировщик Theora и образцы PCM в кодировщик Vorbis, передать полученные пакеты в потоки Ogg (один для Theora и один для Vorbis) и получить страницы.

Когда программа запускаетсяон сбрасывает заголовки сначала из кодировщика Theora, затем из кодировщика Vorbis в выходной файл (очевидно, оба потока имеют уникальные серийные номера).Затем я записываю чередующиеся страницы в файл из обоих потоков.

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

Ошибка Ogg демультиплексора: мы встретили неизвестный поток

Я предполагаю, что я неправильно выполняю мультиплексирование.Я прочитал документацию по мультиплексированию потоков на Xiph.org, и я не вижу, где я различаюсь.Я не могу найти какой-либо пример кода для этого, если не брать в расчет исходный кодировщик с открытым исходным кодом (что мне трудно понять).Кто-нибудь сможет объяснить, как правильно мультиплексировать потоки, используя libogg?Я пытаюсь сделать это в C на Ubuntu 10.04, используя библиотеки из репозитория Ubuntu.

Заранее большое спасибо!

Tom

1 Ответ

4 голосов
/ 31 августа 2010

Хорошо, для любого, кто читал это, я в некоторой степени решил это.

Вы не должны сбрасывать все пакеты заголовков из каждого потока - только первый (установочный) пакет, который дляVorbis и Theora по умолчанию получают свою страницу.Поместите другие пакеты заголовков в их соответствующие потоки, но не сбрасывайте, пока страницы настроек из всех потоков не будут записаны в файл.

После того, как вы это сделаете, постарайтесь поддерживать потоки как можно более синхронизированными.насколько это возможно (mplayer выдал мне несколько ошибок, когда они вышли слишком далеко).Для видео со скоростью 24 кадра в секунду и звука 44,1 кГц 1 кадр должен охватывать 1837,5 аудиосэмпла (для звука PCM это 7350 байт).

Если у кого-то есть какие-либо советы / информация, было бы хорошо услышать - яВы никогда не делали ничего с аудио / видео раньше!

Спасибо!Том

...