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 数据包。
使用 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 数据包。