2014-11-22 50 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

相關問題