video 转 blob:Failed to execute 'endOfStream' on 'MediaSource'?

在使用 MediaSource 的时候发现了一些问题:

我使用的代码是 MDN 上的示例代码:

地址: - https://developer.mozilla.org...

代码什么都没变,但是一直报错:

clipboard.png

可以发现我上面输出 readyState 的时候明明是 open 的,下面报错 is not open.

验证了一下发现是我的视频的问题,如果我用该作者的视频,就不会出现这个错误。作者 demo 地址:

我不确定是否是在 URL.createObjectURL(mediaSource) 的时候出现的问题,因为 mimeCodec 定义如下:

var mimeCodec = 'video/mp4; codecs="avc1.42E01E,mp4a.40.2"';

我看 stackoverflow 上有相关的问题, 说与这个有关但是并没有说有什么解决方法。

如果想知道这个视频的编码能够用什么去看? ffmpeg 还是 bento4

而且我换了个视频也是依旧如此的错误。比如:http://shared.youdao.com/mark...

上面那个视频我看了一下他的 Codec 信息:(使用Bento4看的)

得到的结果如下:

clipboard.png

然后我把我的 mimeCodec 改了之后还是报同样的错误。

阅读 5.3k
1 个回答

经过查证发现和 Codecs 没有关系。

主要的原因是 我使用的 mp4 视频不是 fragmented 的视频。

关于 fragmented MP4 可以查看:https://blog.csdn.net/nonmark...

如果要将 非 fragmented MP4视频转 fragmented MP4 视频,可以借助工具去操作:

我使用的是 BenTo4https://www.bento4.com/downlo...

下载 windows 版本的,然后解压文件夹,在 bin 目录中打开 powershell ,然后运行命令:

 .\mp4fragment.exe .\v0temp.mp4 v0-new.mp4

解析:

  • .\mp4fragment.exe Bento4 的一个命令
  • .\v0temp.mp4 需要转换的文件地址
  • v0-new.mp4 转换结束后的文件名称(地址)

运行之后,MP4便是 fragmented 的了。

使用相同的代码则不会报错!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏