2014-11-22 128 views
1

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

首先,从RTP标准来看,是否允许发送连续不间断音频事件时间重叠?我正在阅读RFC3550,RFC3551RFC4733,并没有看到任何明确提及这是允许的,但并未真正明确禁止这一点。

标记位的使用可能会令人困惑。也就是说,它用于非帧音频有效负载(我使用u-law pcm)来指示不连续之后的第一帧,而在RFC4733事件中,相同的标记位标记事件的开始。无处可以找到一个流复用的提及。

其次,一个实际的考虑。即使标准允许,实践中是否有风险/不常见?我通过其功能图(features.conf)控制Asterisk功能。在DTMF事件期间,所有电话和PJSIP库都将音频流静音。

最后,如果标准允许并且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 

那会是一个正确的流?

回答

1

4733表示,在带内dtmf的情况下,您应该发送dtmf'代替'音频数据。 您以相同的速率递增seqNo和TS,但有效负载将是dtmf数据。

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

+1

我的整体印象是RTP的整个写法是假设一个媒体流,不同的格式只是媒体的替代表示,我认为你是对的,标准中的这个陈述应该是最广泛的NSE。 – kkm 2014-11-26 02:53:55

0

没有任何问题。

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

如果您有带内DTMF,你在一个包中混合音频和RTP(认可的质量也下降)

如果你有sip_info DTMF,你只是发送SIP消息,DTMF和RTP在目前的订单。

+0

Дякую。 :)我认为你正在回答我的实际问题(第二和第三)。你有任何指点或证据来阐述?我知道你知道Asterisk不会不高兴地看到一个音频和DTMF数据包交织的RTP流。你能建议一个测试场景,我可以运行以确认在我的设置中一切都很好吗?问题是,我们在客户端使用pjsip,并且当dtmf排队等待输出时,库显然会丢失地板上的PCM帧。一些硬件电话也一样。只是想知道什么是我做快速测试的最佳选择。 – kkm 2014-11-22 23:37:57

+0

这取决于您使用的dtmf标准。尝试启用星号调试和dtmf调试,看看会发生什么。也许你需要linux/asterisk大师的帮助来解释结果。如果你以标准的方式说话,没有星号的差异。除带内方法外,由于非dtmf帧可能会大大降低质量。 – arheops 2014-11-23 03:05:22

+0

不幸的是,这是整个问题所在。它不是缺少星号或linux专家,而是不知道标准是否允许这样做,并且没有办法在没有编码练习的情况下运行测试,并深入pjsip库中...:( – kkm 2014-11-23 03:38:51

相关问题