2010-08-30 3 views
3

J'écris actuellement un simple encodeur vidéo Theora, qui utilise libogg, libvorbis et libtheora. Actuellement, je peux soumettre des images au codeur Theora, et des échantillons PCM au codeur Vorbis, passer les paquets résultants aux flux Ogg (un pour Theora et un pour Vorbis) et extraire les pages. Lorsque le programme démarre, il rince d'abord les en-têtes du codeur Theora, puis du codeur Vorbis vers le fichier de sortie (les deux flux ont évidemment des numéros de série uniques). Ensuite, j'écris des pages entrelacées dans le fichier à partir des deux flux.Comment multiplexer les flux Vorbis et Theora en utilisant libogg

Lors de l'écriture juste la vidéo, ou tout simplement l'audio, je suis capable de lire la sortie dans mplayer très bien, mais lorsque je tente d'écrire à la fois, je reçois le texte suivant:

Ogg error demuxer: nous rencontré un flux inconnu

Je devine que je fais le multiplexage mal. J'ai lu la documentation pour les flux de multiplexage sur Xiph.org, et je ne vois pas où je diffère. Je ne peux pas trouver d'exemple de code pour le faire, à moins de passer par la source d'un encodeur open-source (que j'ai du mal à comprendre). Serait-il possible d'expliquer comment multiplexer correctement les flux en utilisant libogg? J'essaye de faire cela en C sur Ubuntu 10.04, en utilisant les librairies du dépôt Ubuntu.

Merci beaucoup d'avance!

Tom

Répondre

3

Ok, pour tous ceux qui en train de lire ceci, je dois une certaine mesure résolu.

Vous ne devez pas vider tous les paquets d'en-tête de chaque flux - juste le premier paquet (d'installation), qui pour Vorbis et Theora a sa propre page par défaut. Placez les autres paquets d'en-tête dans leurs flux respectifs, mais ne videz pas jusqu'à ce que les pages d'installation de tous les flux aient été écrites dans le fichier. Une fois que vous avez fait cela, essayez de garder les flux aussi synchronisés que possible (mplayer a donné quelques erreurs pour moi quand ils sont trop loin). Pour une vidéo à 24 images par seconde et un son de 44,1 kHz, une trame devrait couvrir 1837,5 échantillons audio (avec un son PCM, soit 7 350 octets).

Si quelqu'un d'autre a des conseils/informations, il serait bon d'entendre - je n'ai jamais rien fait avec audio/vidéo avant!

Merci! Tom

Questions connexes