【问题标题】:Modern way of displaying RTSP H264 stream in a browser (HTML5)在浏览器中显示 RTSP H264 流的现代方式 (HTML5)
【发布时间】:2020-01-09 09:00:15
【问题描述】:

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

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

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

所以向前看:H264 流似乎非常适合约束 1 和 2。

另外,我的源将实时 H264(确切地说:MPEG-4 AVC,第 10 部分)生成到 RTSP 容器中。

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

我检查过的内容:

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

我还阅读了 2014 年的 good article(!),内容详细且颇具前瞻性。

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

  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 - 视频文件的检查和操作工具

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

Step3step4 很简单,上面有大量的操作指南。

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

这就是我的问题的重点:我需要从 java 中的 RTSP 中提取 h264 流,我怎样才能简单但不调用外部程序?

【问题讨论】:

  • 没有一个浏览器支持 RTSP 流,他们也没有任何计划这样做。有多种网关解决方案可以从 RTSP/RTP 转换为其他协议 MPEG-DASH/HLS/WEBRTC。
  • 您知道任何完全开源(没有FFMPEG等)的网关解决方案吗?
  • 大部分开源网关解决方案使用 ffmpeg - 比如 MP4Box ,Shaka Player。
  • 好的,谢谢。 ffmpeg从rtsp中提取h264帧时,居然不转码只解析流?
  • 是的,它只是流式传输。 rtsp流分片成mp4段时不进行转码

标签: java websocket h.264 rtsp


【解决方案1】:

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

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2011-07-13
相关资源
最近更新 更多