为什么E位为0时有dtmf声音,为1时没有声音?(RTP数据包出现在wireshark中)
背景:
我可以发送一个 RFC 2833 dtmf 事件,如http://www.ietf.org/rfc/rfc2833.txt中所述, 当未设置 E 位时获得以下行为:
例如,如果7874556332111111145855885#3
按下键,则所有事件都会发送并显示在诸如wireshark之类的程序中,但只有87456321458585#3
声音。因此,第一个键(我认为这可能是一个单独的问题)和事件的任何重复(即 11111)都无法发出声音。
在上面链接文档的第 3.9 节,图 2 中,他们给出了一个 911 示例,其中除了最后一个事件之外的所有事件都设置了 E 位。
当我将所有数字的“E”位设置为 1 时,我永远不会听到任何声音。
我想到了一些可能的原因,但不知道是不是原因:
1)图2显示了发送的96和97的有效载荷类型。我还没有发送这些标题。在第 3.8 节中,代码 96 和 97 被描述为“已分别为冗余机制和电话事件有效负载分配了动态有效负载类型 96 和 97”
2)在第 3.5 节,“E:”,“发送者可以延迟设置结束位,直到重新传输最后一个数据包以获取音调,而不是在第一次传输时” 有人知道如何实际执行此操作吗?
3)我有一个单独的输出流也可以播放,所以想知道它是否会干扰听到这个流。
4)还摆弄了时间戳间隔和RTP标记。
任何帮助是极大的赞赏。以下是相关区域的示例 wireshark 事件捕获:
6590 31.159045000 xx.x.x.xxx --.--.---.-- RTP EVENT Payload type=RTP Event, DTMF Pound # (end)
Real-Time Transport Protocol
Stream setup by SDP (frame 6225)
Setup frame: 6225
Setup Method: SDP
10.. .... = Version: RFC 1889 Version (2)
..0. .... = Padding: False
...0 .... = Extension: False
.... 0000 = Contributing source identifiers count: 0
0... .... = Marker: False
Payload type: telephone-event (101)
Sequence number: 0
Extended sequence number: 65536
Timestamp: 2000
Synchronization Source identifier: 0x15f27104 (368210180)
RFC 2833 RTP Event
Event ID: DTMF Pound # (11)
1... .... = End of Event: True
.0.. .... = Reserved: False
..00 0000 = Volume: 0
Event Duration: 1000
请注意:如 ietf.org/rfc/rfc2833.txt 规范中所述,音量为零是可获得的最大音量:
"volume:对于DTMF数字和其他可表示为音调的事件,该字段描述音调的功率电平,在去掉符号后以dBm0表示。功率电平范围从0到-63 dBm0。有效DTMF的范围是从0到-36 dBm0(必须接受);低于 -55 dBm0 必须被拒绝(TR-TSY-000181,ITU-T Q.24A)。因此,较大的值表示较低的音量。此值仅针对 DTMF 数字定义。对于其他事件,它被发送者设置为零并且被接收者忽略。” 问题是“事件结束”位打开时。