这真的不是一个问题,但我想从社会上听到这个“奇怪”的现象,或者至少在我看来是这样。
我编写了一个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
之后,它在一个端口中处理两个有效载荷。
我的解释正确吗?是否存在通过一个端口发送所有通信的问题(尽管延迟)?或者是否有可能重新路由数据包?
谢谢
发布于 2022-05-09 06:17:44
RTSP/RTP有多种发送方式。您的客户端显式请求RTSP交织- RTP数据在RTSP通道中被交织发送。这是防火墙受限环境的一个不错的退路。如果您不请求,这个RTP通道应该通过它们各自的UDP端口发送。
发布于 2022-09-16 15:39:46
它使用TCP (您的主要关注事项)的原因是它使用TCP是按照以下尝试顺序默认的:tcp+udp-mcast+udp
:https://gstreamer.freedesktop.org/documentation/rtsp/rtspsrc.html#rtspsrc:protocols
您可以通过将rtspsrc
参数protocols
设置为GST_RTSP_LOWER_TRANS_UDP
来强制UDP。或在gst-launch-1.0
-> protocols=1
https://stackoverflow.com/questions/72167562
复制相似问题