如何重播 RTSP 流并支持暂停、速度调整和倒带?

How can I rebroadcast an RTSP stream and support pause, speed adjustment, and rewind?

我有一个非常简单的 RTSP 流,我正在尝试为一个强大的客户端重新广播,然后使用暂停和倒带等控件进行观看。

根据 RTSP RFC 功能,例如 PAUSE 和 SET_PARAMETER(用于播放速度)在协议中是可选的。很难找到支持这些功能的服务器,我不清楚理论上是否可以支持倒带,如果可以的话如何控制;至少,它似乎不是客户端或服务器上的典型 RTSP 功能,但似乎也没有用于 RTSP 重播的标准更强大的协议。

如果不纯粹自以为是,很难阐明这个问题,但经过一些毫无结果的研究,我希望了解有哪些理智的选择可以实现更强大的 RTSP / 其他流媒体播放,我真的很感激任何先进的见解主播讨论了这个话题。

我认为退一步看看什么是 RTSP 以及它与您的视频流的关系可能会有所帮助。

RTSP本身就是一个流媒体控制协议,用来控制流媒体服务器。

它与类似 'TV remote control' 的协议进行了比较 - 即它提供了启动、停止、倒带、快进等流媒体服务器的方法。

RSTP 本身并不实际传输媒体数据 - 在大多数 RSTP 用例中,RTP(实时传输)协议会处理此问题。

因此,就像您的电视遥控器可以暂停、快进、倒回等一些流(VOD 流、回放、录制等)但不能对其他流(直播电视有例如,没有启用 catchup),类似的 RTSP 功能受到流本身性质的限制。

例如,如果您的 RTSP 流来自实时安全或网络摄像头,您显然无法从实时流中快进,并且通常也无法倒带,除非来源支持此功能。

对于您的用例,将 RTSP 流式传输到视频流服务器可能是最简单的方法,该服务器随后可以存储视频并将其重新流式传输到多个客户端。这将允许您在视频服务器上实现存储和追赶,以及倒带等。您还可以转换为 HLS 和 DASH,这可能会为您提供更好的跨浏览器和应用程序的播放支持,但代价是流中的延迟,如果这对您的用例来说是可以接受的话。