在浏览器(HTML5)中显示RTSP H264流的现代方法

15

是的,这个话题经常在SO上出现。

我已经阅读了很多关于这个话题的内容,并尝试了一些解决方案,但是我有一些限制:

  1. 独立于浏览器(大多数浏览器应该都可以使用)
  2. 独立于平台(应支持主要平台)
  3. 开箱即用(无需插件!)
  4. 低延迟(最好在1秒以下)
  5. 带宽受限(MJPEG不是选项)
  6. 不进行转码!

因此,向前看:对于约束1和2,H264流似乎是完美的选择。

此外,我的源会生成一个实时的H264(确切地说是MPEG-4 AVC,第10部分)到一个RTSP容器中。

但是,浏览器仍然不支持RTSP。

我已经检查过的内容:

以上所有帖子都与此问题相关,其中有很多有价值的信息。

另外,我读了一篇很好的文章,来自2014年(!),详细而具有前瞻性。

所以,截至今天,最好的解决方案是:
  1. 解析RTSP并提取h264流
  2. 重组流(将其转换为分段MP4)
  3. WebSocket(稍后再看)
  4. 如果浏览器具有MSE(另一种选择是使用broadway.js,但会占用CPU),则可以轻松播放fMP4

有些解决方案是在服务器端执行步骤1和2,然后将fMP4推送到WebSocket中。客户端从WebSocket中消费数据,并将其传递给MSE组件进行显示。

2014年的文章显示,步骤2也可以在客户端上执行。在这种情况下,只有步骤1在服务器上执行,然后将h264推送到WebSocket中,在客户端上进行重组和显示。

Streamedian 看起来是一个不错的解决方案,但他们没有发布他们的服务器端代码,而且他们的网站一天返回502错误。

我不想使用 GStreamerffmpeg,它们都太重了。

但是有一些不错的工具可以帮助:

  • MP4Box.js - 用于将MP4文件分段以便与Media Source Extension API一起使用
  • mux.js - 视频文件的检查和操作工具

回到我的列表,步骤2可以使用MP4Box完成 - 至少我相信/希望如此。

步骤3步骤4很简单,有很多教程可以参考。

然而,我对步骤1有些困惑。它应该在服务器端完成,最好使用可以轻松与Websockets交互的语言(如Java)。

这就是我的问题所在:我需要在Java中从RTSP中提取h264流,如何简单地完成但不调用外部程序?


没有任何浏览器支持RTSP流媒体,而且它们也没有计划这样做。有多个网关解决方案可以将RTSP/RTP转换为其他协议,如MPEG-DASH/HLS/WEBRTC。 - mail2subhajit
你知道任何完全开源(没有FFMPEG等)的网关解决方案吗? - Daniel
1
大多数开源网关解决方案使用ffmpeg,例如MP4Box,Shaka Player。 - mail2subhajit
好的,谢谢。当FFmpeg从RTSP中提取H264帧时,它实际上并不进行转码,只是解析流吗? - Daniel
是的,它只进行流传输。当RTSP流被分段为MP4片段时,不进行转码。 - Inder Preet
你解决了吗?第一步可以在客户端运行吗? - Derzu
1个回答

0
使用WebCodecs API在浏览器中解码H.264包如何?该API将受益于现代浏览器提供的硬件加速。顺便说一下,我认为延迟主要出现在解码过程中。

2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接