我是pjsip的新手,想使用pjsip构建RTP流接收器。
设置:
我想使用特定的 L16 / 16000/1编解码器,并且在编译pjsip项目并检查其可用状态时还在“ config_site.h” 中启用了它。 / p>
接收器:
发件人:
我了解了streamutil.c(pjsip sample-apps),它执行相似的操作来发送和接收这两者。现在为了简便起见,我使用相同的交叉编译二进制 streamutil 。
SENDER:
..\ffmpeg -re -stream_loop -1 -i test.mp3 -ar 16000 -acodec pcm_s16be -b:a 128k -ac 1 -payload_type 123 -f rtp udp://239.255.255.211:5500?pkt_size=652
......
Output #0, rtp, to 'udp://239.255.255.211:5500?pkt_size=652':
Metadata:
title : -----
artist : --------
album : -------
date : 2019
track : 1
encoder : Lavf58.20.100
Stream #0:0: Audio: pcm_s16be, 16000 Hz, mono, s16, 256 kb/s
Metadata:
encoder : Lavc58.35.100 pcm_s16be
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=GREATEST HITS (2) [1 HOUR 20 MINUTES LONG]
c=IN IP4 239.255.255.211/5
t=0 0
a=tool:libavformat 58.26.101
m=audio 5500 RTP/AVP 123
b=AS:256
a=rtpmap:97 L16/16000/1
a=rtpmap:123 L16/16000/1
a=control:streamid=
size= 833kB time=00:00:25.91 bitrate= 263.4kbits/s speed= 1x
接收日志:
./streamutil --mcast-addr=239.255.255.211 --recv-only --codec=L16/16000/1
...
...
17:05:05.178 strm0x55dee1537f48 Jitter buffer starts returning normal frames (after 1 empty/lost)
17:05:05.246 strm0x55dee1537f48 Jitter buffer empty (prefetch=0), plc invoked
17:05:05.266 strm0x55dee1537f48 Jitter buffer starts returning normal frames (after 1 empty/lost)
17:05:05.325 strm0x55dee1537f48 Jitter buffer empty (prefetch=0), plc invoked
17:05:05.344 strm0x55dee1537f48 Jitter buffer starts returning normal frames (after 1 empty/lost)
17:05:05.422 strm0x55dee1537f48 Jitter buffer empty (prefetch=0), plc invoked
到目前为止已尝试:
检查工作流
如果我使用* .sdp文件在VLC中接收RTP流,则没有任何问题。
SDP文件:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=GREATEST HITS (2) [1 HOUR 20 MINUTES LONG]
c=IN IP4 239.255.255.211/5
t=0 0
a=tool:libavformat 58.26.101
m=audio 5500 RTP/AVP 123
b=AS:256
a=rtpmap:97 PCMU/8000/1
a=rtpmap:123 PCMU/8000/1
a=control:streamid=
我在Google上搜索了很多,但现在都陷在这个问题上。 所以最后我的问题是, 如何通过Pjsip获得相同的输出而没有记录此抖动缓冲区和声音下降?
任何帮助将不胜感激!!
答案 0 :(得分:0)
请检查在ffmpeg端设置的音频比特率和时钟频率。 确保根据时钟频率更新每个数据包的时间戳。(请查看wireshark日志)
您尝试执行VOD(来自mp3文件)而不实时传输数据,可能会导致问题。请检查rtp数据包的时间戳。