RTSP:RTP 使用与 RTSP 相同的端口

RTSP: RTP uses the same port as RTSP

这确实不是问题,但我想听听社区对这种“奇怪”现象的看法,或者至少在我看来是这样。

我编写了一个流式传输视频和音频的 RTSP 应用程序(分别作为 RTP 负载 96 和 97)

RTSP 客户端建立连接并设置并正确播放(可以在客户端看到视频)。我担心的是 RTP(视频和音频)是通过 TCP(通过端口 554)发送的。是的,我知道它的正确行为,但我很困惑它使用与 RTSP 相同的端口(端口 554)。我一直认为 RTSP 会有一个静态端口号,在建立 RTSP 连接后,客户端将与服务器协商 RTP/RTCP 连接(这将导致创建额外的端口(在我的例子中是 4)。但是,似乎所有 RTP/RTSP/RTCP 流量都通过同一端口传输(或者我误解了结果)

下面是wireshark抓取的rtsp交易

C->S (video payload)
SETUP rtsp://192.168.22.33:554/MOVIE/stream=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
User-Agent: happytimesoft rtsp client

S->C (video payload ok)
RTSP/1.0 200 OK
CSeq: 3
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=7C0EAE5B;mode="PLAY"
Server: GStreamer RTSP server
Session: -8lIe87._f3qX4.h
Date: Wed, 24 Mar 2021 15:23:22 GMT

C->S (audio payload)
SETUP rtsp://192.168.22.33:554/MOVIE/stream=1 RTSP/1.0
CSeq: 4
Session: -8lIe87._f3qX4.h
Transport: RTP/AVP/TCP;unicast;interleaved=2-3
User-Agent: happytimesoft rtsp client

S->C (audio payload)
RTSP/1.0 200 OK
CSeq: 4
Transport: RTP/AVP/TCP;unicast;interleaved=2-3;ssrc=2E0ECCA6;mode="PLAY"
Server: GStreamer RTSP server
Session: -8lIe87._f3qX4.h
Date: Wed, 24 Mar 2021 15:23:22 GMT

C->S
PLAY rtsp://192.168.22.33:554/MOVIE/ RTSP/1.0
CSeq: 5
Session: -8lIe87._f3qX4.h
Range: npt=0.000-
User-Agent: happytimesoft rtsp client

然后它在同一个端口播放两个负载

我的解释正确吗?通过一个端口发送所有通信是否有任何问题(尽管有延迟)?或者是否有可能重新路由数据包?

谢谢

https://www.rfc-editor.org/rfc/rfc2326.txt

RTSP/RTP有多种发送方式。您的客户端明确请求 RTSP 交错 - RTP 数据在 RTSP 通道中交错发送。这是防火墙限制环境的一个很好的回退。如果您不请求此 RTP 通道,则应通过其各自的 UDP 端口发送。