2014-10-04 147 views
1
[Offer] 

     v=0 
     o=alice 2890844526 2890844526 IN IP4 host.atlanta.example.com 
     s= 
     c=IN IP4 host.atlanta.example.com 
     t=0 0 
     m=audio 49170 RTP/AVP 0 8 97 
     a=rtpmap:0 PCMU/8000 
     a=rtpmap:8 PCMA/8000 
     a=rtpmap:97 iLBC/8000 
     m=video 51372 RTP/AVP 31 32 
     a=rtpmap:31 H261/90000 
     a=rtpmap:32 MPV/90000 


[Answer] 

    v=0 
    o=bob 2808844564 2808844564 IN IP4 host.biloxi.example.com 
    s= 
    c=IN IP4 host.biloxi.example.com 
    t=0 0 
    m=audio 49172 RTP/AVP 0 8 
    a=rtpmap:0 PCMU/8000 
    a=rtpmap:8 PCMA/8000 
    m=video 0 RTP/AVP 31 
    a=rtpmap:31 H261/90000 

我發送的INVITE包含3個支持音頻的編解碼器,因此我收到了與我的設置匹配的2個編解碼器。 PCMU和PCMA。SIP編解碼器協商

我最終應該使用哪個編解碼器來避免在另一端進行轉碼?我相信我可以確定傳入流的編解碼器,只需查看RTP數據包的有效負載即可。但是,我不清楚應使用哪個編解碼器來編碼輸出流?首先從名單中?從列表中的任何?或用於傳入流的相同編解碼器

如果我用PCMA編碼輸出流並用PCMU解碼輸入,可以嗎?

回答

2

我不同意Liviu和Rajesh .. 您應該隨時準備在BOTH(PCMU和PCMA)上接收。 (如果Far End想要,他們也可以交替)。你已經建立並接受了BOTH編解碼器。我會推測你也同時承認了這一點。

如果你想只有一個編解碼器,你必須重新邀請你想使用的那個。 (請參閱RFC 4317的第2.2節)瞭解「第二答案」。

在「現實世界」中,因爲通話的雙方都能夠使用提供並同意的編解碼器的「任一」,所以允許選擇第一個。但是如果遠端選擇使用它,你也應該允許第二個。我不認爲你提供這個。然而;只用一個編解碼器重新邀請,將確保只有那一個將被使用。

2

在SDP響應中明確規定了以下內容:

  • 用於用於輸入流的輸出流
  • 編解碼器的編解碼器

你應該在尋找第一個編解碼器「m =」行,因爲「a =」行可能會混淆。在我們的例子中,決定的編解碼器是0(PCMU)

2

借用以前的用戶答案我只是想添加一些東西。

我還沒有遇到SDP規範中的一行,指定編解碼器的順序是優先級/優先級順序。但在大多數情況下,我發現情況是這樣。

因此,在這種情況下,通常0 [PCMU]是端點開始發送媒體的內容,以及UAC應該選擇的內容。如果UAC決定執行8 [PCMA],因爲沒有數據包來自UAS,這可能導致需要對呼叫的任一側進行轉碼/分級服務。

順便說一下,既然答案已經被編碼解碼器接受,它確實表明UAS能夠處理同一端口上的編解碼器。

一些其他選項檢查第一個數據包,並決定編解碼器,從任一這些,然後在隨後切換到同一重新INVITE使轉換服務可以從通話中刪除。