<div dir="ltr"><div><div>Hello Tim<br><br>I am referring to the following file<br><br><a href="https://en.wikipedia.org/wiki/File:Sample_of_%22Another_Day_in_Paradise%22.ogg">https://en.wikipedia.org/wiki/File:Sample_of_%22Another_Day_in_Paradise%22.ogg</a><br><br></div><div>I opened the file in a HEX editor. I do not see the string OpusHead in the packet. It starts with Oggs. Also checking the occurrence of Oggs, I see that the first packet has BOS, the next all (except last) have 00 (which is not defined in the RFC as continuation) and last one has EOS.<br><br></div><div>The first packet in this ogg file makes sense. <br><br>The second packet (I am taking a part of it)<br><br>4f 67 67 53 = Oggs (THIS IS OK)</div><div>00 = Version (THIS IS OK)</div><div>00 = Header Type (WHY IS THIS 0)??<br></div><div>00 00 00 00 00 00 00 00 = Granule Position (THERE IS NO SPECIFIC INFORMATION)</div><div>7e 46 00 00 = Bit Stream Serial Number (THIS IS OK)</div><div>01 00 00 00 = Page Sequence Number (THIS IS OK)<br></div><div>89 ab 50 5e = Checksum (THIS IS OK)<br>10 = Page Segments is 16, so there would be 16 segments after this<br>2d ff ff ff ff ff ff ff ff ff ff ff ff ff ff c1 = Each Segment Size (IS THIS CORRECT)??<br>03 76 6f = First 3 data from Segment 0 indicated by the size 2d (IS THIS CORRECT INTERPRETATION)??<br></div><div><br></div>Regards<br></div>Amit<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 9, 2016 at 1:01 PM, Timothy B. Terriberry <span dir="ltr"><<a href="mailto:tterribe@xiph.org" target="_blank">tterribe@xiph.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Amit Ashara wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
First Packet shall have Header Type as BOS<br>
All subsequent Packet (except last one_ shall have Header Type as<br>
Continuation<br>
Last Packet shall have Header Type as EOS<br>
<br>
Is this correct?<br>
</blockquote>
<br></span>
No, the header_type field is a property of a page, not a packet. In it, the continuation flag is used when a single packet spans multiple pages. This is required when a packet is larger than the maximum size of a page (about 64 kB), but in most uses of Opus will almost never be needed.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The Page Segment shall have the value as 1 since only one segment will<br>
be available and the Segment Table will have the value 100 indicating<br>
that the next 100 bytes are belonging to the same stream and is one<br>
encoded frame<br>
<br>
Is this correct?<br>
</blockquote>
<br></span>
No. You are required to have at least three pages: one for the identification header (OpusHead), which must contain only that packet, one (or more) for the metadata header (OpusTags), which must terminate the page it ends on, and then one more for your 20 ms audio data packet.<br>
<br>
In the description, you also said that the final output was 100 halfwords (200 bytes). The value in the page segment table is the number of bytes, not the number of halfwords.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If the above is true then if the Page Segment has the value 20, then the<br>
segment table shall look something like (assuming 100 half words is what<br>
is encoded evry time)<br>
<br>
100, Data.... 20 times before the next Page Segment is started!!!<br>
</blockquote>
<br></span>
No. The segment table contains the lacing values for all packets on the page, followed by the data for all packets. So it would look more like:<br>
<br>
20 (number_page_segments) 100, 100, 100 ... (20 times, the segment_table), data, data, data, ... (again, 20 times).<br>
<br>
It may be easier for you to work from some examples. I'd recommend looking at the code in opus-tools: <<a href="https://git.xiph.org/?p=opus-tools.git" rel="noreferrer" target="_blank">https://git.xiph.org/?p=opus-tools.git</a>>. This gets all of these details correct.<br>
_______________________________________________<br>
opus mailing list<br>
<a href="mailto:opus@xiph.org" target="_blank">opus@xiph.org</a><br>
<a href="http://lists.xiph.org/mailman/listinfo/opus" rel="noreferrer" target="_blank">http://lists.xiph.org/mailman/listinfo/opus</a><br>
</blockquote></div><br></div>