[Speex-dev] Problems with the Speex Jitter Buffer

David Feurle feurle at bluehands.de
Fri Apr 20 00:10:46 PDT 2007


Uff ok - thanks for pointing that out!

David
> David Feurle wrote:
>   
>> Thanks for your reply Jean-Marc!
>>
>> this was what I had before.
>> But I decided to restructure it since the thread that plays the sound is
>> a callback from the sound hardware, more or less an interrupt handler.
>> For me it seems more reasonable to waste some memory for to save the
>> decompressed Packet. While I write this I begin to think that it is
>> possible I decompress Packets that are never used because they are too
>> late. What is the reason why one should put the compressed Packet in the
>> JitterBuffer?
>>     
>
> Because otherwise, you end up decoding the packets in random order --
> not very useful with a stateful codec!
>
> 	Jean-Marc
>
>   
>>       David
>>     
>>> (Sorry about the delay -- currently attending ICASSP)
>>> Hi,
>>>
>>> Haven't looked at all the details, but what's clearly wrong is that you
>>> need to put the *compressed* packets in the jitter buffer and decode
>>> them only when you _get() them.
>>>
>>>     Jean-Marc
>>>
>>> David Feurle wrote:
>>>  
>>>       
>>>> Hi,
>>>>
>>>> I am using the JitterBuffer. Since there is not so much documentation I
>>>> think I dont use it in a correct way. All the packets are recieved (I
>>>> control the sequence numbers) but the JitterBuffer often tells me he has
>>>> no packet. I am using it in the following way:
>>>>
>>>> I am not sure if I use the ticks correctly but I think it can be set to
>>>> 20(msec).
>>>> It is set as a Member in my class and i pointed out where i use it so it
>>>> is clear if i use it somewhere i better shouldnt.
>>>>
>>>> - I initialize the JitterBuffer with ticks = 20 (saved in the variable
>>>> m_Ticks)
>>>> - My network thread repeadedly (every 20msec) calls AddPacket() which
>>>> adds the packet to the buffer
>>>>          320 bytes of audio data are set as the data
>>>>          the timestamp is set to the sequence number of the packet times
>>>> 20 (m_Ticks)
>>>>          the span of the packet is set to 20 (the packet covers one tick
>>>> entirely)
>>>> - A thread which plays my Audio calls every 20msec the function
>>>> GetSound()
>>>>
>>>> As I said before the buffer just returns more or less the halve of the
>>>> packets. But all the packets are added to the JitterBuffer.
>>>> I posted some of the code i use in my email and i would be really
>>>> thankfull if anybody could tell me where i am using the JitterBuffer
>>>> wrong.
>>>>
>>>> Many thanks in advance
>>>>
>>>> David Feurle
>>>>
>>>>
>>>>
>>>> Init()
>>>> {
>>>>    m_JitterBuffer = jitter_buffer_init(m_Ticks);
>>>>    jitter_buffer_reset(m_JitterBuffer);
>>>> }
>>>>
>>>> Exit()
>>>> {
>>>>        jitter_buffer_destroy(m_JitterBuffer);
>>>> }
>>>>
>>>> void BeatJitterBuffer::AddPacket(Packet* packet)
>>>> {
>>>>    m_Mutex.Aquire();
>>>>          char buff[320];
>>>>        JitterBufferPacket p;
>>>>        m_Decoder->DecompressPacket(packet, buff, 320);
>>>>        p.data = buff;
>>>>        p.len = 320;
>>>>        p.timestamp = packet->SequenceNumber() * m_Ticks;
>>>>        p.span = m_Ticks;
>>>>        jitter_buffer_put(m_JitterBuffer, &p);
>>>>    }
>>>>
>>>>    m_Mutex.Release();
>>>>    delete packet;
>>>> }
>>>>
>>>> void BeatJitterBuffer::GetSound(char* buffer, size_t maxLength)
>>>> {
>>>>    int ret;
>>>>
>>>>    if (320 == maxLength)
>>>>    {
>>>>        JitterBufferPacket packet;
>>>>        packet.data = buffer;
>>>>
>>>>        m_Mutex.Aquire();
>>>>
>>>>        ret = jitter_buffer_get(m_JitterBuffer, &packet, 0);
>>>>
>>>>        if(ret != JITTER_BUFFER_OK)
>>>>        {
>>>>            ZeroMemory(packet.data, maxLength);
>>>>         }
>>>>
>>>>        jitter_buffer_tick(m_JitterBuffer);
>>>>        jitter_buffer_update_delay(m_JitterBuffer, &packet, NULL);
>>>>        m_Mutex.Release();
>>>>    }
>>>>    else
>>>>    {
>>>>        ZeroMemory(buffer, maxLength);
>>>>    }
>>>> }
>>>>
>>>> _______________________________________________
>>>> Speex-dev mailing list
>>>> Speex-dev at xiph.org
>>>> http://lists.xiph.org/mailman/listinfo/speex-dev
>>>>
>>>>     
>>>>         
>>     



More information about the Speex-dev mailing list