我正在尝试在浏览器中显示连续的视频流(实时流)。
我的客户报告说,视频流在Chrome浏览器中不起作用。我以为这是一个简单的案例,我什至试图编写一个演示,以证明仅HTML5原生视频标签才可以提供流式传输: https://github.com/mishaszu/streaming-video-demo
随机视频没有问题,但: 客户端上的特定视频流不起作用。 带有html代码:
<video id="video-block" width="320" height="200" autoplay>
<source src="url/to/my/video" type="video/mp4">
</video>
显示装载器一会儿就死了。
我对流的了解:
1.使用的编解码器:H264-MPEG-4 AVC (part 10) (avc1)
2.它是实时流,而不是文件,因此我无法在终端上使用像MP4Box
这样的命令
3.因为它是实时流,所以可能没有“文件末尾”
4.我知道它没有坏,因为VLC可以显示它
5.我尝试将本机HTML 5视频标签与所有媒体类型字符串一起使用(以防万一,检查所有编解码器中的mp4)
正如我提到尝试使用不同的mime类型并没有帮助,我也尝试使用MediaSource
,但是我真的不确定如何将其与实时流结合使用,因为我发现的所有信息都是假设的: />
a)等待解决承诺,然后追加缓冲区
b)将updateend
的事件侦听器添加到追加缓冲区
我认为在直播中,它是行不通的。
我发现了很多有关流式文件可能如何包含元数据的信息(在文件的开头或结尾)……最后我得出的结论可能是我不完全了解正在发生的事情。
处理mp4实时流的正确方法是什么?
如果原生HTML视频标签应支持实时流,如何对其进行调试?
我以为也许我应该寻找像HLS一样的东西,但要寻找mp4格式?
答案 0 :(得分:0)
我经历了同样的事情-我需要从rtsp到HTML5视频混入传入的实时流,但不幸的是,这可能变得微不足道。
因此,对于实时流,您需要分段的mp4(如果您不知道这是什么,请询问this问题)。这是isobmff规范,它为流中应包含哪些框设置了规则。根据我的经验,当涉及到实时流时,浏览器会有自己的怪癖(必须调试chrome / firefox才能找到它们)。 Chrome浏览器具有chrome://media-internals/
标签,其中显示了所有已加载播放器的错误-这也有助于调试。
因此我要解决此问题的候选清单是:
1)如果您说VLC正在播放流,请在VLC中打开“消息”窗口(“工具”->“消息”),将严重性设置为“调试”,并且当流进入时,您应该在其中看到mp4框信息,请验证{{ }}框存在
2a)在Chrome中加载流,在新标签页中打开moof
并检查错误
2b)Chrome在下面使用ffmpeg,因此您也可以尝试使用chrome://media-internals/
播放流,并检查是否有任何错误。
2c)您实际上对mp4box是不正确的-您可以简单地从流中加载多个起始字节,保存到文件中,然后在其中使用mp4box或其他工具(最糟糕的是,如果剪切,它最终会抱怨一些损坏的盒子一盒短)
如果2a / 2b / 2c中没有一个提供您可以自己解决的相关错误信息,请使用这些输出中的输出更新问题,以便其他人获得更多信息。