I'm currently working on a speex + theora webchat.<br>I have both working alone, but to make them work together and to know where the package goes, I'm trying to use ogg packages.<br>With theora there has been no problem, but with speex I can't make it work. The problem is that for a second it works great, but then it begings to gain lag, and in a little time it has 5-10 lag seconds (into the same machine, working on loopback). Currently I'm packaging 4 frames per package (FRAMES_PACKET=4).
<br>Any help will be greatly appreciated.<br><br><br>Into the encoder I have this code:<br><br>speex_bits_reset(&amp;enc_bits);<br>for(int i=0;i&lt;FRAMES_PACKET;i++)<br>{<br>&nbsp;&nbsp;&nbsp; int nb_samples;<br>&nbsp;&nbsp;&nbsp; //Here I get the microphone data.
<br>&nbsp;&nbsp;&nbsp; while((nb_samples=Check_Mic(Mic_data))==0);<br>&nbsp;&nbsp;&nbsp; speex_encode_int(enc_state, Mic_data, &amp;enc_bits);<br><br>&nbsp;&nbsp;&nbsp; total_samples += nb_samples;<br>&nbsp;&nbsp;&nbsp; speex_bits_insert_terminator(&amp;enc_bits);<br><br>&nbsp;&nbsp;&nbsp; //The time stamp
<br>&nbsp;&nbsp;&nbsp; if(i==0)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ((int*)packet)[0]=total_samples;<br>}<br>int nbBytes = speex_bits_write(&amp;enc_bits, packet+4, 2000);<br>tam=nbBytes+4;<br><br>//Now the ogg package<br>op.packet = (unsigned char *)packet;<br>
op.bytes = nbBytes+4;<br>op.b_o_s = 0;<br>op.packetno = packet_id;<br>packet_id++;<br><br>ogg_stream_packetin(&amp;os, &amp;op);<br>ogg_stream_flush(&amp;os, &amp;audio_page);<br><br>return audio_page;<br>}<br><br>As for the decoder I have this.
<br><br>//Incoming data from udp is on buffer<br>char *buffer=ogg_sync_buffer(&amp;oy,4096);<br>memcpy(buffer,buff,len);<br>ogg_sync_wrote(&amp;oy,len);<br>while(ogg_sync_pageout(&amp;oy,&amp;audio_page)&gt;0)<br>{<br>&nbsp;&nbsp;&nbsp; if (stream_init == 0) 
<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ogg_stream_init(&amp;os, ogg_page_serialno(&amp;audio_page));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; stream_init = 1;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; queue_page(&amp;audio_page);<br><br>&nbsp;&nbsp;&nbsp; while(ogg_stream_packetout(&amp;os,&amp;op)&gt;0)<br>&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int b;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ogg_stream_pagein(&amp;os, &amp;audio_page);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int len=(audio_page.body_len-4)/FRAMES_PACKET;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; char *datos=(char*)op.packet;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; char m[100];<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sprintf(m,&quot;paq %d&quot;,
op.packetno);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System::Console::WriteLine(gcnew String(m));<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int t=((int *)datos)[0];<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;FRAMES_PACKET;i++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_jitter_put(&amp;jitter,(datos+4)+len*i,len,t+FRAME_SIZE*i);
<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br clear="all"><br>-- <br><a href="http://www.apple.com">http://www.apple.com</a><br>A veces me da por ahi. Otras como que no.