如何解决PJSIP中接收音频RTP流(音质差)时的抖动缓冲区问题?



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

设置:

我想使用特定的L16/16000/1 编解码器,并且在编译 pjsip 项目期间还在"config_site.h">中启用了它,并检查了它是否可用

接收器:

  • 比格尔骨
  • 交叉编译 Pjsip 并安装所有必需的库和示例应用程序

寄件人:

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

我了解了streamutil.c(pjsip sample-apps),它做类似的事情来发送和接收两者。现在为了方便起见,我使用相同的交叉编译二进制流。

寄件人:

..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

到目前为止尝试过:

  • 设置不同的payload_type
  • 将 Streamutil 中的特定编解码器设置为参数
  • FFmpeg 中的所有其他参数,例如比特率、时钟速率、通道

检查工作流

如果我使用 *.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=

我已经用谷歌搜索了很多,但现在却陷入了这个问题。 所以最后我的问题是, 如何在没有此抖动缓冲区日志记录和丢弃声音的情况下通过 Pjsip 获得相同的输出?

任何帮助将不胜感激。!

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

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

最新更新