Michael Niedermayer
2006-Jul-20 06:56 UTC
[Vorbis-dev] minor Vorbis specification amendment proposal
Hi Vorbis has 3 "global" header packets, while generic containers generally have only a single global header per stream my proposal to solve this, would be to add a few lines to the vorbis specification to clarify how to convert between the 3 headers and the single header needed for non ogg containers currently (without any standarized way) various groups simply use their own self-invented method to store vorbis in non ogg and consequently either merge the 3 headers as they see fit or just dump them into the file like normal packets leading to problems with random access (seeking) ... all that leads to many problems and incompatibilites Proposed amendment------------ To split a global header from a non ogg container: 1) search for the 1st occurance of 01,'v','o','r','b','i','s' the found match and the following 23 bytes are the 1st header packet 2) search for the 1st occurance of 03,'v','o','r','b','i','s' after here 3) read an unsigned integer of 32 bits and skip that many bytes 4) [user_comment_list_length] = read an unsigned integer of 32 bits 5) iterate [user_comment_list_length] times { 6) read an unsigned integer of 32 bits and skip that many bytes } 7) skip 1 byte 8) the match in 2) and what follows until here is the 2nd header packet 9) search for the 1st occurance of 05,'v','o','r','b','i','s' after here the matching part and what follows is the 3rd header packet To convert the 3 header packets to a single one for storege in a non ogg container, simple concatenate the 3 header packets without anything before, after or between them ------------------------------- the proposed spliting method will work with pretty much any way the packets can be merged, it will specifically work with 1. simple concatenation 2. the format in matroska (2<p1 size><p2 size><p1><p2><p3>, sizes stored like packet sizes in ogg) 3. 16/32bit size for packet 0, packet 0, 16/32bit size for packet 1, ... 4. 16bit size for packet 0, 16bit size for packet 1, ..., packet 0, ... 5. 16/32bit size for packet 0, 16/32bit size for packet 1, packet 0, ... one format it could fail with is if the 3 32bit sizes are put infront of the 3 packets, though that would require the packets to be large (giga bytes) for it to fail -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB In the past you could go to a library and read, borrow or copy any book Today you'd get arrested for mere telling someone where the library is
Ralph Giles
2006-Jul-20 09:27 UTC
[Vorbis-dev] minor Vorbis specification amendment proposal
On Thu, Jul 20, 2006 at 03:56:48PM +0200, Michael Niedermayer wrote:> Vorbis has 3 "global" header packets, while generic containers generally > have only a single global header per streamI think this is a useful idea, but giving specific parse rules to try on *any* container format seems unwise. I'd rather see an appendix documenting a standard embedding proceedure for various other containers, and perhaps some guidelines for creating new mappings including the parsability information you included. Would you be willing to write up and contribute something like that? -r