Hi Simon,
Thanks for your response.
I've tested your approach and it works well with low jitter of an
incoming stream and adaptive jitter enabled.
However, if I disable the jitter buffer I miss quite a lot of packets
(jitter is up to 10ms) and I have to use rtp_getq_permissive(). Then I
receive all the packets.
I'm handling situations where I just forward packets from one RTP stream
to another and I don't want to delay the packet by using jitter buffer.
And I don't want to miss packets event if they are e.g. 40ms late.
So, I have several questions:
1) What is the correct way to receive all the packets without modifying
ORTP source code if I don't use jitter buffer? It would be nice to
obtain a packet immediately after it is delivered.
2) I'm not sure how to correctly configure jitter buffer. What is the
correct way to switch the jitter buffer off? Calling
rtp_session_set_jitter_compensation(s, 0) or calling nothing?
3) When switching the jitter buffer on do I have to call
rtp_session_set_jitter_compensation() before
rtp_session_enable_adaptive_jitter_compensation()? And what happens if I
call rtp_session_set_jitter_compensation() after
rtp_session_enable_adaptive_jitter_compensation()? Does it make sense to
combine these two methods?
4) I've noticed that all my outgoing stream have SSID=0x29. I don't call
rtp_session_set_ssrc() so I would expect it to have a random value. Do
you have any idea what is wrong?
Thanks,
Petr
Simon Morlat wrote:
Hi Petr,
Your application should increment the timestamp using its theoritical
value (ex: 10 ms if your application is supposed to wake up and do
processing every 10 ms), no matter if it is a bit late compared to real
time or not.
The important is only that on the long term, the timestamp and the time
elapsed are equivalent (no drift).
Simon
Le vendredi 20 novembre 2009 à 14:43 +0100, Petr Kuba a écrit :
Hello,
I'm experiencing the following problem:
Since the timer we use for calling rtp_session_recvm_with_ts() is not
100% precise (mainly in windows) it happens quite often that the time
between two calls of rtp_session_recvm_with_ts() is (a little bit)
longer that 20ms. Then it is quite often that there are already two
packets older than current timestamp in the ortp queue.
However, rtp_session_recvm_with_ts() calls rtp_getq() which returns only
the last packet and discards all older packets. I believe that this is
not good idea when we are only few ms late.
In my case it would be better to call rtp_getq_permissive() instead of
rtp_getq() not to miss any packets.
What do you think? Do I miss any important idea of this algorithm? What
is the reason for discarding a packet that we wouldn't discard e.g. just
1ms earlier?
Thanks,
Petr