2010-09-13 46 views
3

我做的RFC 3550 (RTP)a Java implementation,我已經遇到了一個小問題:RTP RFC(3550)解釋的問題

chapter 11,第2款,它指出:

(.. )參與者不得假定傳入的RTP或RTCP數據包的源端口可用作傳出RTP或RTCP數據包的目標端口。當雙向發送RTP數據包時,每個參與者的RTCP SR數據包必須發送到另一個參與者指定用於接收RTCP的端口。 (...)

RTP沒有任何機制來通知這些地址和端口(這取決於SDP或其他設置協議),這會使我將本段理解爲「如果你是接收來自未知來源的數據,只是丟棄它「。

但在section 6.3.3它基本上說,當一個RTP或non-BYE RTCP數據包收到一個未知的SSRC時,一個新的參與者應該被添加到表中。

所以總結起來:

  1. 接收到未知的SSRC時,應添加一個新的參與者;
  2. 您不能將數據包的源IP /端口用作該參與者的數據包的目的地;
  3. SDP沒有定義每個RTP參與者使用的SSRC;
  4. 您可以手動添加RTP參與者(以其他方式發現),但您不知道SSRC會是什麼。

因此,百萬美元的問題是:人們應該如何處理意想不到的SSRC?

回答

2
  1. 接收到未知的SSRC時,應添加新的與會者 - >僅在驗證了它作爲每節6.2節之後。1
  2. 您不能將數據包的源IP /端口用作該參與者的數據包的目的地 - >這是說您不能期望端點A的RTP/RTCP對與端點B的對相同(除非指定)。 (在第11節中,RFC不是在談論IP地址。)
  3. SDP沒有定義每個RTP參與者使用的SSRC - >是,因爲SSRC可以隨時更改。
  4. 您可以手動添加RTP參與者(以其他方式發現),但您不知道SSRC會是什麼。 ???

因此,百萬美元的問題仍然值得一百萬美元。將研究並更新你。同時,如果你找到答案,請更新我們。

0

從我的RFC的解釋,你的問題的答覆是6.3.3節:

6.3.3接收的RTP或者非BYE RTCP包

當RTP或從其SSRC不在成員表中的參與者收到RTCP數據包時,將SSRC添加到該表中,並且如第6.2.1節所述驗證參與者後更新成員的值。

關於哪個入口應考慮有效:

(...)新條目可以承載直到新SSRC多個數據包已經收到視爲無效(見附錄A.1)或者直到收到包含該SSRC的CNAME的SDES RTCP數據包(...)

我可以錯過什麼嗎? ;)

+0

最大的問題是如何確定這個新參與者的IP /端口組合 - 驗證後 - 因爲第11節第2段指出源IP /端口「不得」被使用,並且「(.. )包必須發送到另一個參與者爲接收指定的端口(...)「。如果它是一個新的,意外的參與者(意思是,通過SDP未公佈,可能有人攻入)如何指定接收IP /端口組合? – biasedbit 2010-09-14 14:43:43