Hello Jean-Marc<br><br>We really appreciate your input.<br><br>If I understand it right, we should be calling the encoder on the same SpeexBits structure passing it a frame at a time to encode for as many times as the number of frames that we want to pack in the RTP payload.<br>
<br>The output then obtained from from the encoder will have the necessary padding at the end without any separators between individual encoded frames.<br><br>That would be really cool. Other wise I was scratching my head as to we&#39;ll have to chop the padding from each encoded frame before it can be put in the RTP payload. Lot of bit operations otherwise reqd from the appln have been saved.<br>
<br>Really appreciate your input.<br><br>Thanks and Regards,<br>-Manish S. Jalan<br><br><br><div class="gmail_quote">On Thu, Dec 10, 2009 at 5:22 PM, Jean-Marc Valin <span dir="ltr">&lt;<a href="mailto:jean-marc.valin@usherbrooke.ca">jean-marc.valin@usherbrooke.ca</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">You cannot concatenate bytes because Speex frames don&#39;t necessarily end<br>
on octet boundaries. You need to call the encoder multiple times on the<br>
same SpeexBits bitpacket.<br>
<br>
        Jean-Marc<br>
<div><div></div><div class="h5"><br>
Manish Jalan wrote:<br>
&gt; Hello,<br>
&gt;<br>
&gt; _*Background:*_<br>
&gt; The RFC 5574 suggests the RTP payload format for the speex codec. The<br>
&gt; payload formation is straight forward; the encoded frames are to be<br>
&gt; concatenated one after another. Once we have appended desired number of<br>
&gt; frames, we have to pad the stream with 01111 sort of sequence to ensure<br>
&gt; that payload ends on a octet boundary.<br>
&gt;<br>
&gt; _*Observation:*_<br>
&gt; I am using the speex encoder at 2150 Kbps (by setting the quality to 0).<br>
&gt; For a frame of 20 ms ~ 160 samples (considering 8000 samples per second<br>
&gt; as the sampling rate), the encoder is giving me encoded output of 6 bytes.<br>
&gt; As a test case, I encoded some 10 frames one after another each time<br>
&gt; getting 6 bytes of encoded output. I concatenated each of the 6 byte<br>
&gt; encoded outputs.<br>
&gt;<br>
&gt; As suggested in couple of posts I tried to decode this stream of encoded<br>
&gt; voice by calling the decoder repeatedly until the bits remaining api<br>
&gt; returned me a value less than 1.<br>
&gt;<br>
&gt; What I observed was this sequence: First time the decoder returned<br>
&gt; successful decode; Second time it returned end of stream; thrid time it<br>
&gt; returned successful decode; fourth time it returned end of stream; ...<br>
&gt;<br>
&gt; That is: decode success, EoS, decode success, EoS, decode success, EoS, ....<br>
&gt;<br>
&gt; _*Hypothesis:*_<br>
&gt; Based on the above observation, what might be happening is:<br>
&gt; For a frame of 20 ms (=&gt; 50 frames in a second), the encoder (running at<br>
&gt; 2150 bps) computes 43 bits of encoded stream. Since it has to return in<br>
&gt; terms of full bytes, it pads 01111 sequence to give a 48 bit output.<br>
&gt; Now while decoding 43 bits are first decoded; Then 01111 sequence is<br>
&gt; interpreted as end of stream; Then next 43 bits  are decoded and 01111<br>
&gt; is interpreted as end of stream and so on.<br>
&gt;<br>
&gt; _*Query:*_<br>
&gt; For Speex, when we are packing multiple encoded frames in the RTP<br>
&gt; packet, should we,<br>
&gt; a. pack the encoded frame in full bytes as received from the encoder<br>
&gt; (i.e. 48 bits)<br>
&gt;    or<br>
&gt; b. we should be chopping the end of stream marker 0 followed by 1&#39;s<br>
&gt; (i.e. strictly 43 bits) and have the 0 followed by 1&#39;s sequence used<br>
&gt; only for padding the payload to ensure octet boundary.<br>
&gt;<br>
&gt; _*Reason for the query:*_<br>
&gt; I want to implement the RTP packetization that is interoperable. If the<br>
&gt; receiver is not in my control, it should still be able to decode the<br>
&gt; stream that I am sending.<br>
&gt;<br>
&gt;<br>
&gt; Regards,<br>
&gt; Manish S. Jalan<br>
&gt;<br>
&gt;<br>
</div></div>&gt; ------------------------------------------------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Speex-dev mailing list<br>
&gt; <a href="mailto:Speex-dev@xiph.org">Speex-dev@xiph.org</a><br>
&gt; <a href="http://lists.xiph.org/mailman/listinfo/speex-dev" target="_blank">http://lists.xiph.org/mailman/listinfo/speex-dev</a><br>
</blockquote></div><br><br>