我通过RTP发送音频流,同时应该发送一些DTMF事件来控制另一端的交换机。
首先,根据RTP标准,是否允许发送连续不间断的音频和事件及时重叠?我正在阅读RFC3550,RFC3551和RFC4733,并没有看到任何特别提及允许的内容,而没有明确禁止这一点。
标记位的使用可能会令人困惑。即,它用于非帧音频有效载荷(我使用u-law pcm)表示不连续后的第一帧,而在RFC4733事件中,相同的标记位标记事件的开始。我无处可以找到流多路复用。
接下来,一个实际的考虑。即使标准允许这样做,在实践中是否存在风险/不常见?我通过其功能图(features.conf
)控制Asterisk功能。所有电话和PJSIP库在DTMF事件期间静音音频流。
最后,如果标准允许并且Asterisk当然不会因为这种有效载荷混合而变得疯狂,那么流式传输的正确方法是什么?我在想的是(假设,仅为了示例,PCM音频有效载荷长度为100个样本= 100个刻度,并且DTMF事件长度为300个刻度):
Seq = 10, Timestamp = 1000, M = 0, Payload = PCM
Seq = 11, Timestamp = 1000, M = 1, Payload = DTMF: '*'; duration = 100
Seq = 12, Timestamp = 1100, M = 0, Payload = PCM
Seq = 13, Timestamp = 1000, M = 0, Payload = DTMF: '*'; duration = 200
Seq = 14, Timestamp = 1200, M = 0, Payload = PCM
Seq = 13, Timestamp = 1000, M = 0, Payload = DTMF: '*'; duration = 300; E = 1
这是一个正确的流吗?
答案 0 :(得分:2)
如果远程UE支持播放dtmf音调,它将播放音调。否则它只会丢弃dtmf有效载荷(未知或不支持)
答案 1 :(得分:0)
没有任何问题。
如果您有rtc2833,您只需按当前顺序发送rtp数据包,并使用dtmf发送其他数据包。
如果你有带内dtmf,你可以在一个数据包中混合音频和rtp(识别质量可以降低)
如果你有sip_info dtmf,你只需按当前顺序发送带有dtmf和rtp的sip消息。