2013-04-14 177 views
3

我想了解如何spydroid(https://code.google.com/p/spydroid-ipcamera/)的作品,所以我可以爲我的手機寫一個類似的應用程序。基於spydroid,這是我對RTSP,RTCP和RTP的理解。RTSP,RTCP和RTP端口號

RTSP在指定的端口上運行並設置所有內容。

RTCP可以在任何端口上運行。有一個客戶端端口和一個服務器端口。這是RTP的控制流程

RTP可以在任何端口上運行。有一個客戶端端口和一個服務器端口。這包含音頻和視頻流。這是令人困惑的,因爲它似乎並不實際發送此端口上的音頻和視頻。它在子站點發送端口5006上的視頻和5004上的音頻。

Spydroid通過RTSP發送此消息以確認端口... 傳輸:RTP/AVP/UDP;單播;目的地= 123.456.789.00; client_port = 65234-65235; server_port = 44580-44581; ssrc = ba98a863; mode = play

我想這是說客戶端(VLC在我的情況下)正在使用UDP監聽65234 RTP和65235 RTCP消息。此外,spydroid正在44580上收聽RTP,44581收聽RTCP。這是正確的嗎?

爲RTSP DESCRIBE的序列中

現在,spydroid告訴客戶端M =視頻5006 RTP/AVP 96我認爲這是說,它將通過UDP通過端口5006

來發送視頻做的一切我在上面的句子中說的聲音是正確的?

我真正想知道的是如何將這些信息轉發到正確的端口。客戶端端口由VLC自動分配。我試着運行這個命令...... vlc「rtsp://192.168.1.104:8086」--rtp-client-port = 58866但是VLC似乎忽略它並選擇它自己的端口。所以我已經轉發了端口8086,5004和5006,但我不知道哪個端口要轉發RTP和RTCP連接,因爲它每次都會更改。我可以完成這項工作的唯一方法是將所有端口轉發到我的電腦。 (我有一個Linksys路由器,它有一個DMZ選項)但這是一個不好的解決方案。有人能指導我在正確的方向。

此外,我很高興知道我正在這樣做,因爲我通過互聯網通過外部IP地址發送所有內容。在什麼地方可以在局域網上使用子彈體。

回答

0

我不知道RTSP是如何工作的,以及如何配置VLC,但我知道RTP的一個或兩個。 我猜測客戶端端口意味着在哪裏發送數據包,服務器端口是它將用作源端口的地方。因此,在UDP級別,RTP數據包看起來像:

| SRC_PORT = 44580 | DST_PORT = 65234 | ... RTP_PACKET |

下一頁:M = 5006視頻RTP/AVP 96 根據SDP標準5006是其中spydroid將監聽傳入RTP分組 端口(不知道爲什麼)和RTP有效載荷類型將是96.

因此,檢查是否使VLC偵聽端口65234並將{44580,65234}數據包轉發到您的PC。你給的信息有點混亂,似乎自相矛盾。所以,基於這一點,我們無法得出任何具體的結論。

0

根據SDP標準...

實際上它表示源端口。

端口(範圍)僅表示媒體將從哪裏發送。

例如,如果您的源在5006上發送,但它通過10002路由,這是rtsp幫助通過傳輸標頭所在的位置。

源端口實際上可能是5006,但是在LAN內某處的中間路由器或防火牆接收到數據包並通過另一個端口和地址發送它。

大多數軟件不會自動了解您的網絡設置,因此無需修改用於外部網絡的sdp,因此無法在您的網絡地址空間之外的任何地方使用它。

如果您需要端口匹配它,您可以只需手動配置套接字和軟件。 (例如多播或其他原因,爲什麼該端口(範圍)需要與rtsp傳輸標頭中的內容不同,但是如果是這樣,那麼現在您瞭解如何以及爲什麼。發送一個探測包,如果這個包通過icmp返回,則源端口重置爲0,以便可以發現,請注意,如果不正確,可能會與來自主機的現有流量發生衝突。將其擰緊(大多數人都這樣做),並在使用0時允許從同一主機的任何端口直接插入解碼器,並且ffmpeg和lav不支持介質端口中的正確範圍。正如想法中的excersize一樣,如果端口號是1或65536或*或-7,該怎麼辦?

應該這樣處理嗎?

如果範圍是*或 - 或以其他方式怎麼辦?

請記住,僅僅因爲一個值不存在並不意味着您不能根據現有信息做正確的事情(如果需要的話)即使所收到的數據不符合預期或者指示了一個不應該是的值用過的。