为什么在我重新接收收到的 RTP 数据包时呼叫方听不到回声

时间:2021-02-04 23:44:50

标签: javascript sip voip rtp

我正在尝试使用 NodeJS 为所有呼叫我的人播放音频。

他正在使用 SIP 并发起呼叫。我能够接听电话并录制他的音频。

现在我正在尝试使用 RTP 协议向他播放音频。

所以我尝试的是保存我收到的每个 RTP 数据包,然后按原样发回。 但我不明白为什么他什么也没听到。

INVITE 命令

INVITE sip:1@104.154.78.142 SIP/2.0
Via: SIP/2.0/UDP 31.168.3.211:5060;branch=z9hG4bK071d7c26
Max-Forwards: 70
From: "0555042354" <sip:0523737233@31.168.3.211>;tag=as710f47f3
To: <sip:1@104.154.78.142>
Contact: <sip:0523737233@31.168.3.211:5060>
Call-ID: 36bde5b72f7a67956f7559a8581ea010@31.168.3.211:5060
CSeq: 102 INVITE
User-Agent: Asterisk PBX 11.18.0
Date: Fri, 05 Feb 2021 00:22:51 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 236

v=0
o=root 2117083987 2117083987 IN IP4 31.168.3.211
s=Asterisk PBX 11.18.0
c=IN IP4 31.168.3.211
t=0 0
m=audio 16006 RTP/AVP 8 101
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv

我从 INVITE 命令中获取了它的端口 (15574):m=audio 15574 RTP/AVP 8 101 并且还从 INVITE 命令中获取了 IP:c=IN IP4 31.168.3.195 现在我正在发回每个 UDP他寄给我的包。但他什么也没听到。

(这是在 OK 之后,并且被他 ACK)。

ourSocket.on('message', (rtpPacketBuffer) => {
  dgramServer.send(rtpPacketBuffer, 16006, 31.168.3.211)
})

换句话说:根据RTP协议,发回数据包可以工作,还是需要重构?

(我们能够听到对方的声音,并记录通话。)

1 个答案:

答案 0 :(得分:1)

<块引用>

换句话说:根据RTP协议,是发回数据包 可以工作,还是我需要重建它们?

您需要构建一个专用的 RTP 头并添加接收到的有效负载。 SSRC 和时间戳必须以有意义的方式生成,否则接收方可能会丢弃这些数据包。

相关问题