Twilio webRTC 通话恰好在 10 分钟后中断

Twilio webRTC call cuts off after exactly 10 minutes

使用 Twilio.js 使用 webRTC 录制通话。工作正常,除了在 10 分钟标记(准确!) 电话挂断。 TwiML 上的最大记录时间设置为 7200 秒。

浏览器控制台显示:
[Twilio.PeerConnection] signalingState is "stable" twilio.js:1843 [Twilio.PeerConnection] iceConnection State is "checking" twilio.js:1843 [Twilio.PeerConnection] iceConnection State is "connected" twilio.js:1843 [Twilio.PeerConnection] iceConnection State is "completed"

[10 分钟后...]

twilio.js:1843 [Connection] Received HANGUP from gateway twilio.js:1843 [Connection] Disconnecting...

Chrome://webrtc-internals 转储没用: { "time": "11/28/2016, 4:35:48 PM", "type": "iceConnectionStateChange", "value": "ICEConnectionStateCompleted" }, { "time": "11/28/2016, 4:45:51 PM", "type": "stop", "value": "" },

中断 twilio.js 库我看到有东西发送带有负载的 websocket 消息:{"payload":{"callsid":"CA18974349269fb9f24977185c5deaa62c"},"type":"hangup","version":""},这显然导致客户端挂断电话。

知道为什么会发生这种情况吗?它发生在桌面和移动浏览器上。

我知道我说的很明显,但您的答案在这里:

[After 10 minutes...]

twilio.js:1843 [Connection] Received HANGUP from gateway

这可能是因为 Twilio 中的某些内容超时。你需要发送一个心跳来保持它的活力吗?

原来 Twilio 会在 600 秒后切断 webRTC 调用。不确定为什么,但我猜它与 Turn Servers 的 --stale-nonce 参数有关,巧合的是有 600 秒的超时。也许?

编辑修复。

最终 Twilio 回复了我们的请求并提供了一个解决方法来启用 WEBRTC 10 分钟以上的记录。恕我直言,它很老套,但它确实有效。

当呼叫者加入时,将一个出站 API 呼叫加入会议,并播放无声 mp3,可以是很长的 mp3,也可​​以是循环播放的短曲。这个出站段是开始会议所必需的,无声 mp3 将双向发送 RTP。 另一个相当相似的是让客户端像这样拨入:

<Response>
   <Dial record="true" action="record_action">
    <Conference waitUrl="url_to_nearly_silent_audio_file">record</Conference>
  </Dial>
</Response>

您需要为 waitURL 中的循环制作一个小容量的 WAV 文件,以防完全静音的 WAV 文件不会生成 RTP 数据包。

https://www.twilio.com/docs/api/twiml/conference