Как мультиплексировать потоки Vorbis и Theora с помощью libogg

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

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

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

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

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

Спасибо заранее!

Том

1 ответ

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

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

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

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

Спасибо! Том

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