2013-04-14 340 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,该怎么办?

应该这样处理吗?

如果范围是*或 - 或以其他方式怎么办?

请记住,仅仅因为一个值不存在并不意味着您不能根据现有信息做正确的事情(如果需要的话)即使所收到的数据不符合预期或者指示了一个不应该是的值用过的。