媒体源Api不能用于自定义webm文件(Chrome版本23.0.1271.97 m)
Media Source Api not working for a custom webm file (Chrome Version 23.0.1271.97 m)
我指的是这个链接上给出的媒体源api演示
对于给定的测试webm文件,它工作得很好,但是当我试图将文件名称更改为自定义webm文件时,代码停止工作。
产生以下错误:Uncaught Error: INVALID_STATE_ERR: DOM Exception 11
at以下代码:sourceBuffer.append(new Uint8Array(e.target.result));
为了检查自定义webm文件是否工作,我创建了一个测试页面,其中我定义了一个视频标签,其中包含该自定义webm文件的源。当我运行代码时,它工作正常。
我无法理解这种奇怪行为的原因。
最有可能的问题是您的WebM文件有集群,不以关键帧开始。
在Chrome开发通道构建(即Chrome 25或更高版本)中,您可以通过以下步骤验证这一点。
- 在另一个选项卡中打开chrome:media-internals。返回到测试页面的选项卡并重新加载它。
- 当错误再次发生时,切换回chrome:media-internal选项卡并寻找底部的"Active media players:"标题下的条目。它应该与你传递给视频元素src属性的blob: URL相同。
- 点击blob: URL展开玩家数据
- 点击"Log:"条目来显示玩家的日志数据。
- 在"事件:"列中搜索具有"MEDIA_SOURCE_ERROR"的条目。这些条目应该提供关于传递给浏览器的内容有什么问题的信息。
如果你看到类似"媒体段没有以关键帧开始"的消息,那么这意味着你的文件有集群没有以关键帧开始。这在由FFmpeg生成的内容中很常见。您可以使用以下方法之一修复文件:
- 运行WebM自适应流指南2.2.5节中提到的sample_muxer程序
- 运行我在mse-tools项目中编写的mse_webm_remuxer程序。
UPDATE:在我的情况下没有显示内部错误(接受的答案建议检查),但仍然存在相同的问题
我遇到了同样的麻烦,当试图播放记录的。webm文件由MediaRecorder API使用媒体源扩展 (MSE)。Chrome(51)的录音是畸形的,Firefox(46)似乎没有问题。
要让它工作,你必须在。webm文件中修复提示:
- 克隆https://github.com/webmproject/libwebm
- 确保你有cmake版本>= 3.2 (https://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04)
-
cmake .
-
make
-
./sample_muxer -i original.webm -o fixed.webm
- 加载固定。webm到DASH/你自己的播放器!
希望能帮到别人。这是相当困难的谷歌没有DASH关键字的任何信息(我不使用DASH,只有相同的底层技术- MSE):)
相关文章:
- JS编译器/包管理器,用于版本控制
- jQuery-2.1.1.min.js或最新版本jQuery-2.13.min.js不会't支持'@
- Chrome加载旧版本的Javascript文件
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- 如何设置jsfiddle's的javascript版本
- 同一HTML页面中的两个不同版本的JQuery
- YouTube作为弹出窗口在桌面版本上播放,但不在移动设备上播放
- 有没有一种方法可以获得three.js的最小/lite版本
- Node和Nodejs版本不同
- 以ECMAScript 5及更高版本为目标时,八进制文字不可用
- 如何在HTML中指定Javascript的版本
- 注册组件的非角度和角度版本
- 浏览器是否持久缓存脚本元素的编译版本
- 如何确定相对较新版本的IE的高度和宽度(IE8不喜欢从JavaScript设置这种样式吗?
- 如何在IE8及以前版本中处理mousemove
- 从自身的一个版本中创建新的JavaScript对象
- PhpWindows 8.1版本上的Javascript web应用程序
- javascript网格未在IE 8及以上版本中显示
- 媒体源Api不能用于自定义webm文件(Chrome版本23.0.1271.97 m)