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

Dan*_*iel 12 java rtsp h.264 websocket

是的,这个话题也在 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 视频轻松播放(替代方法是使用很酷但 CPU 密集型的Broadway.js

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

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

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

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

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

  • MP4Box.js - 分割 MP4 文件以与媒体源扩展 API 一起使用
  • mux.js - 视频文件的检查和操作工具

回到我的清单,步骤 2可以用 MP4Box 完成——至少我相信/希望。

Step3step4很简单,有很多关于这些的方法。

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

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

归档时间:

查看次数:

6575 次

最近记录:

5 年,2 月 前