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

2022-09-04 23:35:58

是的,这个话题在SO上不时出现。

我已经阅读了很多关于这个主题的文章,也尝试了一些解决方案,但我有一些限制:

  1. 浏览器独立性(大多数浏览器应该工作)
  2. 独立于平台(应支持主要平台)
  3. 开箱即用(没有插件!
  4. 低延迟(首选在 1 秒以下)
  5. 带宽有限(MJPEG不是一个选项)
  6. 没有转码!

因此,展望未来:H264 流似乎非常适合约束 1 和 2。

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

但是 RTSP 在浏览器中仍然不受支持。

我检查过的内容:

上面的所有帖子都与这个问题有关,并且有很多有价值的信息。

此外,我还阅读了2014年(!)的一篇非常好的文章,该文章非常详细且具有前瞻性。

因此,截至今天,最好的解决方案是:

  1. 解析 RTSP 并提取 h264 流
  2. 重构流(将其转换为碎片 MP4)
  3. websocket (見後面)
  4. 如果浏览器具有MSE,fMP4可以通过HTML5视频轻松播放(替代方案是使用百老汇.js这很酷但CPU密集型)

有些解决方案中,步骤1和2发生在服务器端,然后将fMP4推入websocket。客户端使用 websocket 中的数据,并将其传递给 MSE 组件进行显示。

2014 年的文章表明,step2 也可以在客户端发生。在这种情况下,只有步骤1发生在服务器上,然后h264被推入websocket,在客户端当然有重组和显示。

Streamedian似乎是一个很好的解决方案,但他们没有发布他们的服务器端代码,而且他们的网站返回了一天的502错误。

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

但是,有一些不错的项目可以帮助:

回到我的列表,step2可以用MP4Box完成 - 至少我相信/希望。

Step3step4很简单,这些都有大量的操作方法。

但是,我对步骤1有点困惑。它应该在服务器端完成,最好是使用一种可以轻松与websockets交互的语言(如java)。

这就是我问题的重点:我需要从Java中的RTSP中提取h264流,我如何在不调用外部程序的情况下完成它的简单操作?


答案 1

使用WebCodecs API在浏览器中解码H.264包怎么样?此 API 将利用现代浏览器提供的硬件加速。顺便说一句,在我看来,延迟主要发生在解码过程中。


答案 2

推荐