如果我的计算机在 NAT 之后,如何通过 UDP 使用 RTSP 流式传输视频?

Posted

技术标签:

【中文标题】如果我的计算机在 NAT 之后,如何通过 UDP 使用 RTSP 流式传输视频?【英文标题】:How to stream a video using RTSP via UDP if my computer is behind NAT? 【发布时间】:2021-12-23 12:37:13 【问题描述】:

我想通过 UDP 使用 RTSP 流式传输视频。但我不能这样做,因为我的计算机在 NAT 后面。流正常启动,但大约 10 秒后它会关闭流。

我找到了它发生的原因。 RTSP 使用 RTCP 来控制和检查流媒体是否仍然可用。它向客户端发送一些“报告”,并且客户端必须向服务器发送报告,表明它仍然处于活动状态。但是来自服务器的消息无法到达客户端,因为 RTCP 通常通过 UDP 工作,并且由于 NAT 无法到达,因为通过 RTSP 发送到服务器的本地 UDP 端口与使用 NAT 映射的端口不匹配。

当然,我可以使用 TCP 代替 UDP,它解决了问题,但是通过 TCP 进行流式传输可能会慢得多。如果可能的话,我想使用 UDP。

我发现 Discord 也发送和接收 RTP 数据包,但通过 UDP,即使我的计算机位于 NAT 之后。怎么可能?我使用 ffmpeg 实用程序进行流式传输,我怎样才能做到这一点并使用 UDP?

希望得到您的帮助!

【问题讨论】:

【参考方案1】:

实际上有一个互联网草案可以解决这个问题:https://tools.ietf.org/id/draft-ietf-avt-app-rtp-keepalive-10.html

他们列出了几种方法以及他们对首选方法的建议。

【讨论】:

以上是关于如果我的计算机在 NAT 之后,如何通过 UDP 使用 RTSP 流式传输视频?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 NAT 通过公共 IP 发送 UDP 数据包?

两个经过 NAT 的 Skype 节点如何通信

UDP打孔到期[关闭]

udp打孔后发送文件

UDP、NAT 和设置“连接”

UDP打孔可能吗?