【问题标题】:Displaying mp4 streamed video in browser在浏览器中显示 mp4 流式视频
【发布时间】:2019-11-19 21:25:08
【问题描述】:

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

说明:

我的客户报告视频流在 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 video 标签应该支持直播,如何调试?
我想也许我应该寻找像 HLS 这样的东西,但对于 mp4 格式?

【问题讨论】:

  • 您好,“客户端的特定视频流不起作用”到底是什么意思?
  • "I found a lot of information about how a streamed file might contain metadata (at the beginning of the file or at the end)." 现场直播是假的。对于直播,使用分段的 mp4,其中部分元数据在开头,或者在单独的初始化片段中,其余部分分散在每个片段中
  • @k3llydev 对不起,也许我有点困惑。该视频仅在客户端的网络中可用,因此我无法在本地调试它(我可以访问客户端的 Chrome 浏览器,但无法使用标志运行它)。 doesn't work 我的意思是它不播放视频(也不记录任何错误或 Http 网络错误),它只显示黑色背景。
  • @szatmary 我不知道这一点,但如果是直播,我猜浏览器应该会获得未知数量的片段。不知道为什么 VLC 能够显示它而浏览器不能。浏览器是否可能无法获取元数据(是否可以从javascript lvl检查元数据是否存在)?
  • 在不知道 URL 是什么的情况下,我只能猜测。浏览器需要额外的信息,通常编码在清单或播放列表中。如果你不知道格式,我也没办法,除非你能提供一个公共链接。 URL 中的文件扩展名是什么? mp4? m3u8? mpd?你在浏览器中使用的是什么播放器? hls.js?视频.js?原始mse?

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


【解决方案1】:

我也经历过同样的事情 - 我需要将传入的实时流从 rtsp 混合到 HTML5 视频,遗憾的是这可能变得不简单。

因此,对于直播,您需要一个分段的 mp4(如果您不知道那是什么,请查看this SO 问题:)。这是isobmff 规范,它设置了流中应该存在哪些框的规则。根据我的经验,虽然浏览器在直播时有自己的怪癖(必须调试 chrome/firefox 才能找到它们)。 Chrome 有chrome://media-internals/ 标签,显示所有加载的播放器的错误 - 这也有助于调试。

所以我解决这个问题的候选名单是: 1)如果你说 VLC 播放流,打开 VLC 中的消息窗口(工具 -> 消息),将严重性设置为调试,当流进入时,你应该在那里看到 mp4 框信息,验证 moof有盒子 2a) 在 chrome 中加载流,在新选项卡中打开 chrome://media-internals/ 并检查错误 2b) Chrome 在下面使用 ffmpeg,因此您也可以尝试使用ffplay 播放流并检查是否有任何错误。 2c)您实际上对 mp4box 不正确 - 您可以简单地从流中加载一些起始字节,保存到文件并在其上使用 mp4box 或其他工具(在最坏的情况下,如果您剪切,它应该在最后抱怨一些损坏的盒子一个盒子短)

如果 2a/2b/2c 均未提供任何您可以自行修复的相关错误信息,请使用这些输出更新问题,以便其他人获得更多信息。

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多