是的,这个主题不时地出现在SO上。
我读了很多关于这个主题的文章,也尝试了一些解决方案,但我有一些限制:
1.独立于浏览器(大多数浏览器都可以正常工作)
1.独立于平台(应支持主要平台)
1.开箱即用(无插件!)
1.低延迟(最好低于1秒)
1.带宽是有限的(MJPEG不是一个选项)
1.没有转码!
因此,展望未来:H264流对于约束条件1和2似乎是完美的。
也是我的来源产生了一个活的H264(确切地说:MPEG-4AVC,第10部分)到RTSP容器中。
但RTSP在浏览器中仍然不受支持。
我检查过的内容:
- How to embed streaming rtsp media into an html5 page
- How can I display an RTSP video stream in a web page?
- stream RTSP to HTML website
- Displaying RTSP on website
- stream RTSP to HTML website
- How to get RTSP stream over web application
- RTSP solution for JavaScript/HTML5
- Streaming via RTSP or RTP in HTML5
上面所有的帖子都是关于这个问题的,里面有很多有价值的信息。
此外,我还读了一个非常good article从2014年(!)这是详细的,相当前瞻性。
所以,从今天开始,最好的解决方案是:
1.解析RTSP并提取h264流
1.重组流(将其转换为碎片化的MP4)
- WebSocket(请参阅后面的内容)
1.如果浏览器具有MSE,则可以通过HTML5视频轻松播放fMP 4(另一种方法是使用broadway.js,它很酷,但CPU密集)
有解决方案是在服务器端执行步骤1和步骤2,然后将fMP 4推送到WebSocket中,客户端使用websocket中的数据,并将其传递给MSE组件进行显示。
2014年的文章显示,步骤2也可以在客户端发生。在这种情况下,只有步骤1发生在服务器上,然后h264被推送到WebSocket中,当然在客户端有重组和显示。
Streamedian似乎是一个很好的解决方案,但他们没有公布他们的服务器端代码,而且他们的网站返回了一天的502错误。
不过,也有一些不错的项目可以帮助:
回到我的列表,步骤2可以用MP4 Box完成-至少我相信/希望。
步骤3和步骤4非常简单,这些步骤有大量的操作方法。
但是我对step1有点困惑。它应该在服务器端完成,最好是用一种可以很容易与websockets交互的语言(比如java)。
这就是我的问题:我需要在java中从RTSP中提取h264流,如何才能在不调用外部程序的情况下简单地完成此操作?
1条答案
按热度按时间kqhtkvqz1#
在浏览器中使用WebCodecs API对H.264包进行解码如何?该API将利用现代浏览器提供的硬件加速。