是否犹豫是否同时发送RTP音频和DTMF事件?

时间:2014-11-22 04:10:39

标签: asterisk voip rtp dtmf

我通过RTP发送音频流,同时应该发送一些DTMF事件来控制另一端的交换机。

首先,根据RTP标准,是否允许发送连续不间断的音频事件及时重叠?我正在阅读RFC3550RFC3551RFC4733,并没有看到任何特别提及允许的内容,而没有明确禁止这一点。

标记位的使用可能会令人困惑。即,它用于非帧音频有效载荷(我使用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

这是一个正确的流吗?

2 个答案:

答案 0 :(得分:2)

4733说如果是带内dtmf,你应该发送dtmf'而不是'音频数据。 你以相同的速率增加seqNo和TS,但有效载荷将是dtmf数据。

如果远程UE支持播放dtmf音调,它将播放音调。否则它只会丢弃dtmf有效载荷(未知或不支持)

答案 1 :(得分:0)

没有任何问题。

如果您有rtc2833,您只需按当前顺序发送rtp数据包,并使用dtmf发送其他数据包。

如果你有带内dtmf,你可以在一个数据包中混合音频和rtp(识别质量可以降低)

如果你有sip_info dtmf,你只需按当前顺序发送带有dtmf和rtp的sip消息。