2010-08-30 1 views
3

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

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

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

ошибки Demuxer Ogg: мы встретил неизвестный поток

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

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

Том

ответ

3

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

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

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

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

Спасибо! Том

Смежные вопросы