In a word, I don't what's the standard of speex payload format.<br>
The file doc/rtp.txt is for what?&nbsp; Is it not for rtp payload?<br>
I find that rtp.txt is more detail that draft02.txt<br>
<br>
Which rtp docment should be followed?<br>
Anyone else has written the RTP wrapper already?<br>
<br>
Lianghu<br><br><div><span class="gmail_quote">On 11/22/06, <b class="gmail_sendername">Jean-Marc Valin</b> &lt;<a href="mailto:jean-marc.valin@usherbrooke.ca">jean-marc.valin@usherbrooke.ca</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
&gt; 1) First, I think there is a bug in&nbsp;&nbsp;libspeex/lsp.c&nbsp;&nbsp;line 512.<br>&gt;<br>&gt; /* hard limit ak's to +/- 32767 */<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a &lt; -32767) a =32767;&nbsp;&nbsp; // This line should be changed to if<br>&gt; (a &lt; -32767) a = -32767;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a &gt; 32767) a = 32767;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ak[j-1] = (short)a;<br><br>Oops. Thanks for pointing that out. It's fixed in svn.<br><br>&gt; 2) About the RTP wrapper for VoIP<br>&gt;<br>&gt; I'd like to use the payload format defined in the SVN document 
rtp.txt<br>&gt; as below.<br>&gt;<br>&gt; What I'm worry about is the interoperability with other implementations.<br>&gt;<br>&gt; What's your opinion on that?<br><br>Can you summarize what the issue is?<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jean-Marc
<br><br>&gt; Best Regards,<br>&gt;<br>&gt; Lianghu<br>&gt;<br>&gt;<br>&gt; //************************from the SVN /doc/rtp.txt begin<br>&gt; *************************************//<br>&gt; The Speex RTP payload is defined as a header, followed by any number of
<br>&gt; requests to the remote encoder and all encoded speech frames.<br>&gt;<br>&gt; +--------+----------+----------------+<br>&gt; | Header | Requests | Speech data... |<br>&gt; +--------+----------+----------------+<br>
&gt;<br>&gt; The header contains only the number of frames sent<br>&gt; encoded in 6 bits<br>&gt;<br>&gt;&nbsp;&nbsp;0 1 2 3 4 5<br>&gt; +-+-+-+-+-+-+<br>&gt; | NB frames |<br>&gt; +-+-+-+-+-+-+<br>&gt;<br>&gt; There can be any number of requests of the form
<br>&gt;<br>&gt;&nbsp;&nbsp;0 1 2 3 4 5 6 7 0 1<br>&gt; +-+-+-+-+-+-+-+-+-+-+<br>&gt; |R| ReqID | ReqVal&nbsp;&nbsp;|<br>&gt; +-+-+-+-+-+-+-+-+-+-+<br>&gt;<br>&gt; where R is 1 when a request is following and 0 when there is no more<br>&gt; request. Each request (if R=1) is composed of a 4-bit request ID (ReqID) and
<br>&gt; a 5-bit value (ReqVal)<br>&gt;<br>&gt; Possible values for ReqID are:<br>&gt;&nbsp;&nbsp;0: REQ_PERSIST&nbsp;&nbsp; ReqVal=1 for persistent requests/mode selection,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 otherwise<br>&gt;&nbsp;&nbsp;1: PERSIST_ACK&nbsp;&nbsp; Acknowledge a REQ_PERSIST from the other end,
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ReqVal equals the value received<br>&gt;&nbsp;&nbsp;2: MODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Choose the encoder mode directly<br>&gt;&nbsp;&nbsp;3: QUALITY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Choose the encoder quality<br>&gt;&nbsp;&nbsp;4: VBR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set VBR on (ReqVal=1) or off (ReqVal=2)<br>&gt;&nbsp;&nbsp;5: VBR_QUALITY&nbsp;&nbsp; Set the encoder quality for VBR mode
<br>&gt;&nbsp;&nbsp;6: LOW_MODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the encoder mode for low-band (wideband only)<br>&gt;&nbsp;&nbsp;7: HIGH_MODE&nbsp;&nbsp;&nbsp;&nbsp; Set the encoder mode for high-band (wideband only)<br>&gt;<br>&gt; All requests should be considered at the receiver as a suggestion and
<br>&gt; compliance is not mandatory. The PERSIST_ACK should be sent upon receiving a<br>&gt; REQ_PERSIST request to indicate that the request has been received.<br>&gt;<br>&gt; The speech data part contains speech frames one after the other. The size of
<br>&gt; the encoded frames can be found since the mode is directly encoded into each<br>&gt; frame.<br>&gt;<br>&gt; For example, a frame where we request VBR to be on with quality 8 and we<br>&gt; transmit two frames encoded at 
8.35 kbps (167 bits/frame) will be:<br>&gt;<br>&gt;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3<br>&gt;&nbsp;&nbsp;0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt; |&nbsp;&nbsp; NB=2&nbsp;&nbsp;&nbsp;&nbsp;|1|ReqID=2| ReqVal=0|1|ReqID=3|ReqVal=8 |0| frame 1 |
<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|end|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
frame
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt; |&nbsp;&nbsp;&nbsp;&nbsp;end frame 2&nbsp;&nbsp;&nbsp;&nbsp;|P|P|P|P|P|P|<br>&gt; +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<br>&gt;<br>&gt; //************************from the SVN /doc/rtp.txt end
<br>&gt; *************************************//<br></blockquote></div><br>