[pjsip] Strange RTP receive issue in PJ-MEDIA
bennylp at pjsip.org
Mon Apr 7 09:42:05 EDT 2008
On Sun, Apr 6, 2008 at 9:21 PM, Jeremy King <jerry.ipe.thomas at gmail.com> wrote:
> Hi Benny,
(since you Cc-ed your second mail to the list, I'm taking the freedom
to Cc the list on my reply too. I apologize if that's not what you
> I am facing a problem in RTP receive side of PJ-MEDIA. I apologise for the
> length of this mail.
> My test set-up is as shown below from a media perspective.
> <---[LAN]--->| |<---[INTERNET]--->| |<---[SERVICE_PROVIDER]--->
> | NAT | | |
> | + | | RTP |
> [PJSUA]----| F/W |------------------| |----[MEDIA SERVER]
> | + | |PROXY|
> | G/W | | |
> | | | |
> When a UA makes a call to a particular service number, the media server
> up playing out a series of announcements to the UA. G.711 u-law codec is
> between the media server and PJ. The media server sends out RTP packets
> at a
> more or less regular 20 ms interval. However, in the RTP packets the media
> server sends to the UA, the timestamp and SSRC fields are both '0'.
> Nevertheless, the sequence of arrival of RTP packets as well as the
> numbers in those RTP packets seem correct.
If the timestamp in RTP packets are always zero, then basically it's broken.
> However, the announcements, when played out at PJSUA, sounds very
> The playout sounds as if there is massive packet loss.
Yep, it's quite expected.
> I am using the latest SVN check-out of PJ without any modifications and
> set the PJ_CONFIG_MAXIMUM_SPEED group of compile-time options.
> Since a Wireshark capture showed that all the RTP packets are arriving
> correctly at the PC where PJSUA is running, I tried investigating further
> focusing on how the incoming frame is inserted into the jitter buffer.
> On seeing that in "on_rx_rtp" in "pjmedia\src\pjmedia\stream.c", just
> "pjmedia_jbuf_put_frame", the frame sequence number is calculated based on
> the RTP timestamp, I tried to manually generate a timestamp from the RTP
> sequence number inside "on_rx_rtp".
> That is when I found out that the incoming RTP packets are coming
> out of order i.e. there is a sequence difference of around 250 packets,
> I assume the jitter buffer will never be able to handle.
I think probably you missed converting the numbers to host byte order,
hence the 256 difference. All the values in RTP header (including in
pjmedia_rtp_hdr) are in network byte order.
> I removed the timestamp generation code and retained the following RTP
> header log line.
> "RTP Pkt #%05hu: PT->[%05hu] TS->[%010lu] SSRC->[%010lu]",
> hdr->seq, hdr->pt, hdr->ts, hdr->ssrc));
> I am attaching the following with this mail:
> 1. Wireshark Packet Capture -> pktCap_20080406235400_TS4.cap
> 2. PJSUA Generated Log File -> pjsua_log_20080406235400_TS4.txt
> 3. Recording of PJSUA Playback -> audioCap_20080406235400_TS4.wav
> 4. PCM extracted from the RTP -> audioRef_20080406235400_TS4.wav
> The build environment is WinXP SP2 with Feb 2003 edition of platform SDK,
> 2004 edition of DXSDK and VC6 IDE.
> I hope I haven't missed out something that was right in front of me and
> I am not doing something wrong!
> Thanks for taking the time to read this. I would appreciate any help on
> - Jerry
More information about the pjsip