在浏览器中显示 RTSP H264 流的现代方式 (HTML5)
是的,这个话题在SO上不时出现。
我已经阅读了很多关于这个主题的文章,也尝试了一些解决方案,但我有一些限制:
- 浏览器独立性(大多数浏览器应该工作)
- 独立于平台(应支持主要平台)
- 开箱即用(没有插件!
- 低延迟(首选在 1 秒以下)
- 带宽有限(MJPEG不是一个选项)
- 没有转码!
因此,展望未来:H264 流似乎非常适合约束 1 和 2。
此外,我的源代码还生成了一个实时的H264(确切地说:MPEG-4 AVC,第10部分)到RTSP容器中。
但是 RTSP 在浏览器中仍然不受支持。
我检查过的内容:
- 如何将流式 rtsp 媒体嵌入到 html5 页面中
- 如何在网页中显示 RTSP 视频流?
- 将 RTSP 流式传输到 HTML 网站
- 在网站上显示 RTSP
- 将 RTSP 流式传输到 HTML 网站
- 如何通过 Web 应用程序获取 RTSP 流
- RTSP solution for JavaScript/HTML5
- 在 HTML5 中通过 RTSP 或 RTP 进行流式传输
上面的所有帖子都与这个问题有关,并且有很多有价值的信息。
此外,我还阅读了2014年(!)的一篇非常好的文章,该文章非常详细且具有前瞻性。
因此,截至今天,最好的解决方案是:
- 解析 RTSP 并提取 h264 流
- 重构流(将其转换为碎片 MP4)
- websocket (見後面)
- 如果浏览器具有MSE,fMP4可以通过HTML5视频轻松播放(替代方案是使用百老汇.js这很酷但CPU密集型)
有些解决方案中,步骤1和2发生在服务器端,然后将fMP4推入websocket。客户端使用 websocket 中的数据,并将其传递给 MSE 组件进行显示。
2014 年的文章表明,step2 也可以在客户端发生。在这种情况下,只有步骤1发生在服务器上,然后h264被推入websocket,在客户端当然有重组和显示。
Streamedian似乎是一个很好的解决方案,但他们没有发布他们的服务器端代码,而且他们的网站返回了一天的502错误。
但是,有一些不错的项目可以帮助:
回到我的列表,step2可以用MP4Box完成 - 至少我相信/希望。
Step3和step4很简单,这些都有大量的操作方法。
但是,我对步骤1有点困惑。它应该在服务器端完成,最好是使用一种可以轻松与websockets交互的语言(如java)。
这就是我问题的重点:我需要从Java中的RTSP中提取h264流,我如何在不调用外部程序的情况下完成它的简单操作?