在我的Android WebRTC客户端发送DTFM音调,我使用这样的代码
val audioSource = peerConnectionFactory.createAudioSource(MediaConstraints())
val localAudioTrack = peerConnectionFactory.createAudioTrack("audio", audioSource)
peerConnection.addTrack(localAudioTrack)
peerConnection?.senders?.firstOrNull()?.let {
it.dtmf()?.insertDtmf(code, 400, 50)
}
但是似乎tone没有到达peer,并且在logcat
dtmf_sender中有错误消息。
在不能发送DTMF的DtmfSender上调用InsertDtmf。无论我使用什么设备。
为什么会这样?
发生这种情况的原因有很多,其中一个原因是WebRTC连接中的另一方不支持RTP电话事件
同样,检查这个例子:https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Using_DTMF(虽然我自己没试过)
请注意:
">请注意,尽管可以使用WebRTC发送DTMF,但目前没有办法检测或接收传入的DTMF。WebRTC目前忽略了这些有效载荷;这是因为WebRTC的DTMF支持主要用于传统电话服务">
我发现,问题是对等体不通过RTP连接。我的意思是WebRTC还没有找到合适的路由,基于ICE候选人聚集,通过音频流量。
由于只有路由被构建,流量继续,并且发送方准备发送DTMF音。
为确保对等端已准备好接收媒体,您可以查看PeerConnection.Observer.onIceConnectionChange()
中的连接状态,并在状态为"CONNECTED"时获取发送方。