asterisk - 同时发送 RTP 音频和 DTMF 事件是否符合规定?

标签 asterisk voip rtp dtmf

我正在通过 RTP 发送音频流,同时应该发送一些 DTMF 事件来控制另一端的开关。

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

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

这是正确的流吗?

最佳答案

4733 表示,如果是带内 dtmf,您应该发送 dtmf“而不是”音频数据。 您以相同的速率增加 seqNo 和 TS,但有效负载将是 dtmf 数据。

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

关于asterisk - 同时发送 RTP 音频和 DTMF 事件是否符合规定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073956/

相关文章:

javascript - 如何通过 Node.js 将对象实时发送到浏览器

php - 使用 PHP 存储在 ASTERISK 数据库中的规则的正则表达式

c# - 语音 session ——如何让更多人参与进来?

gstreamer - rtpvp8depay + rtpvp8pay 似乎在 Janus Gateway 上引入了工件

ffmpeg:VLC 不会打开 ffmpeg 生成的 .sdp 文件

asterisk - 使用 Asterisk 作为 SIP 客户端调用和挂断

webrtc - 通过 wss SIPML5 连接到 Asterisk 13

Android:实现一个VoIP程序

java - 出站 Asterisk 调用前导零

android - 如何使用 RTP 发送和接收语音流