在浏览器中显示mp4流视频

时间:2019-11-19 21:25:08

标签: javascript html video video-streaming html5-video

我正在尝试在浏览器中显示连续的视频流(实时流)。

说明:

我的客户报告说,视频流在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格式?

1 个答案:

答案 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中没有一个提供您可以自己解决的相关错误信息,请使用这些输出中的输出更新问题,以便其他人获得更多信息。