Eビットが0のときにdtmfサウンドが鳴り、1のときに音が出ないのはなぜですか?(RTPパケットはどちらの方法でもwiresharkに表示されます)
バックグラウンド:
http://www.ietf.org/rfc/rfc2833.txtで概説されているようにRFC2833dtmfイベントを送信して 、Eビットが設定されていない場合に次の動作を取得できます。
たとえば、キー7874556332111111145855885#3
が押されると、すべてのイベントが送信され、wiresharkなどのプログラムに表示されますが、音だけが87456321458585#3
鳴ります。そのため、最初のキー(別の問題である可能性があります)とイベントの繰り返し(つまり11111)は鳴りません。
上記のリンクされたドキュメントのセクション3.9、図2では、最後のイベントを除くすべてのイベントにEビットが設定されている911の例が示されています。
すべての数値に対して「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仕様で説明されているように、ゼロの音量は取得可能な最大レベルです。
"音量:DTMFディジットおよびトーンとして表現可能なその他のイベントの場合、このフィールドはトーンの電力レベルを示し、符号を落とした後のdBm0で表されます。電力レベルの範囲は0〜-63 dBm0です。有効なDTMFの範囲は0〜 -36 dBm0(受け入れる必要があります)-55 dBm0未満は拒否する必要があります(TR-TSY-000181、ITU-T Q.24A)。したがって、値が大きいほど音量が小さいことを示します。この値はDTMFディジットに対してのみ定義されます。その他の場合イベントの場合、送信者によってゼロに設定され、受信者によって無視されます。」問題は、「イベントの終了」ビットがオンになっている場合です。