如何在PJSIP中接收音频RTP流(音质差)时解决Jiiter Buffer问题?

时间:2019-07-24 07:52:30

标签: audio ffmpeg stream rtp pjsip

我是pjsip的新手,想使用pjsip构建RTP流接收器。

设置:

我想使用特定的 L16 / 16000/1编解码器,并且在编译pjsip项目并检查其可用状态时还在“ config_site.h” 中启用了它。 / p>

接收器:

  • BeagleBone
  • 交叉编译的Pjsip和已安装的所有要求。库和示例应用程序

发件人:

  • 同一网络中的另一台Windows PC,使用FFmpeg通过多播传输音频流

我了解了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

到目前为止已尝试:

  • 设置其他有效负载类型
  • 在streamutil中将特定的编解码器设置为参数
  • FFmpeg ex中的所有其他参数。比特率,时钟率,频道

检查工作流

如果我使用* .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获得相同的输出而没有记录此抖动缓冲区和声音下降?

任何帮助将不胜感激!!

1 个答案:

答案 0 :(得分:0)

请检查在ffmpeg端设置的音频比特率和时钟频率。 确保根据时钟频率更新每个数据包的时间戳。(请查看wireshark日志)

您尝试执行VOD(来自mp3文件)而不实时传输数据,可能会导致问题。请检查rtp数据包的时间戳。