Streaming RTP/RTSP启动延迟:此方法是否有助于减少延迟,如果有,为什么不';我没有

Streaming RTP/RTSP启动延迟:此方法是否有助于减少延迟,如果有,为什么不';我没有,streaming,video-streaming,rtsp,rtp,Streaming,Video Streaming,Rtsp,Rtp,对于这样一个专门的问题,这可能不是最好的论坛,但目前我不知道有更好的论坛(可以接受建议/建议) 我在一个视频产品上工作,在过去10多年中,该产品一直使用专有通信协议(基于DCOM)通过网络发送视频。不久前,我们认识到需要进行标准化,目前几乎正在剥离所有DCOM包袱,并用完全兼容的RTP/RTSP客户机/服务器框架取代它 在过去几个月的测试中,我们注意到的一点是,当我们将客户端切换到使用RTP/RTSP时,启动延迟明显增加。问题是不是我们,而是RTSP BEFORE(DCOM):我们将发送一个DC

对于这样一个专门的问题,这可能不是最好的论坛,但目前我不知道有更好的论坛(可以接受建议/建议)

我在一个视频产品上工作,在过去10多年中,该产品一直使用专有通信协议(基于DCOM)通过网络发送视频。不久前,我们认识到需要进行标准化,目前几乎正在剥离所有DCOM包袱,并用完全兼容的RTP/RTSP客户机/服务器框架取代它

在过去几个月的测试中,我们注意到的一点是,当我们将客户端切换到使用RTP/RTSP时,启动延迟明显增加。问题是不是我们,而是RTSP

BEFORE(DCOM):我们将发送一个DCOM命令,在该命令返回到客户端之前,服务器已经在发送视频。-总延迟1RTT

现在(RTSP):这是一系列命令,每个命令都是一个单独的网络请求:描述、设置、设置、播放(假设会话有音频和视频)——总共4个RTT

按设计工作-不幸的是,这感觉像是倒退,因为以前的用户体验实际上更好

这能改进吗?如果你坚持标准,简短的回答是,不。但是,我的团队完全控制我们的整个RTP/RTSP堆栈,我一直在想,我们可以引入一个新的RTSP命令(不涉及任何现有命令,因此我们仍然可以完全互操作)作为解决方案:描述设置和播放

我们可以发送这个命令,传入感兴趣的流类型(通常只有一个视频和0..1个音频)。响应将包括完整的SDP文本以及所有端口信息,就像以前一样,服务器将立即开始流式传输,而无需等待来自客户端的任何其他信息


这样行吗?有什么我看不到的缺点吗?我很好奇为什么官方规范中没有考虑(或删除)这一点,因为即使是在本地内部网中,延迟也绝对是显而易见的。

仅供参考,根据规范,这是可能的:

9.1管道

支持持久连接或无连接模式的客户端 可以“管道化”其请求(即,发送多个请求而不发送 等待每个响应)。服务器必须将其响应发送给那些 请求的顺序与接收请求的顺序相同

还包含对管道的支持


但是,我使用的客户机/服务器中没有一个可以实现它。

请检查。那里有很多精明的人可能有知识来回答你的问题。必须使用流URL进行设置,使用会话URL进行描述/播放。描述响应将包含描述URL流部分的“a=control:…”属性。如果没有描述repsonse,则无法发布安装程序。然而,PLAY可能与SETUP命令一起被流水线处理,我想不出这两个请求之间有什么相互依赖的关系。我想你有一个观点,那就是它可以减少到2个rtt。类似地,descripe\u SETUP\u PLAY也没有任何意义:如果您需要描述会话以便能够流式传输动态内容,则无法通过管道传输请求。如果内容(媒体类型、端口)是静态的,或者您有一个SDP(就像您以前的协议中一样?),那么类似地,您不需要进行描述?在D___P请求中,客户端可以指定它想要视频还是带音频的视频(99.9%的时间,这通常是客户端唯一需要的)。然后,D_S_P响应将包括原始SDP,以便客户端能够建立解码器管道,并立即开始解码接收到的任何内容如果您只需要音频,而频道仅为视频,或者反之亦然?那你就需要第二次往返了。或者您想要视频,但不支持该格式,或者您没有能够解码特定编解码器模式的解码器?或者您的RTP库没有实现打包模式,等等?在某些情况下,您需要在协议中有额外的往返,否则就不需要创建协议。我的观点是,RTSP满足了一系列的用例,包括多播、VOD、live、SIP地址和其他一些。我猜启动延迟是高度特定于用例的。在视频点播中,如果你在观看一部2小时的电影时等待200毫秒而不是100毫秒,你会介意吗?一个额外的RTT是否会产生如此大的差异,RTT的范围从几毫秒到大约250毫秒不等,用于欧洲到非洲的连接。然后,您需要添加抖动缓冲区(比如100ms),以补偿任何情况下的网络抖动?我想有这么多的因素,它实际上归结为您的特定用例。谢谢讨论!