使用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":""}
,这显然会导致客户端挂断电话。
为什么会出现这种情况的任何想法?它来自桌面和移动浏览器。
答案 0 :(得分:1)
原来Twilio在600秒后切断了webRTC通话。不完全确定为什么,但我猜它有事情要做 - stale-nonce param for Turn Servers,巧合的是600秒超时。可能?
使用修补程序进行编辑。
最终,Twilio回应了我们的机票,并提供了一种解决方法,使WEBRTC 10+分钟录音。恕我直言,它非常hacky,但它确实有效。
当呼叫者加入时,将一个出站API呼叫泵入会议,其中播放一个无声mp3,无论是非常长的还是循环短的。这个出站段是启动会议所必需的,而无声mp3将双向发送RTP。 另一个相似的方法是让客户端像这样拨号:
<Response>
<Dial record="true" action="record_action">
<Conference waitUrl="url_to_nearly_silent_audio_file">record</Conference>
</Dial>
</Response>
如果完全静默的WAV文件不生成RTP数据包,则需要在waitURL中为循环制作一个低容量WAV文件。
答案 1 :(得分:0)
我知道我说的很明显,但你的答案就在这里:
Date_Sent
这可能是因为Twilio中的某些东西超时了。你需要发送一个心跳来保持活着吗?