我是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 数据包的时间戳。