Javascript 媒体源Api不适用于自定义webm文件(Chrome版本23.0.1271.97 m)
我指的是一个媒体源api演示给出了这个 对于给定的测试webm文件,它可以正常工作,但当我尝试将文件名更改为自定义webm文件时,代码停止工作 它正在生成以下错误:Javascript 媒体源Api不适用于自定义webm文件(Chrome版本23.0.1271.97 m),javascript,html,video,streaming,media-source,Javascript,Html,Video,Streaming,Media Source,我指的是一个媒体源api演示给出了这个 对于给定的测试webm文件,它可以正常工作,但当我尝试将文件名更改为自定义webm文件时,代码停止工作 它正在生成以下错误:Uncaught error:INVALID_STATE_ERR:DOM Exception 11位于以下代码:sourceBuffer.append(新的Uint8Array(e.target.result)) 为了检查自定义webm文件是否正常工作,我创建了一个测试页面,在该页面中,我定义了一个视频标记,其中包含该自定义webm文
Uncaught error:INVALID_STATE_ERR:DOM Exception 11
位于以下代码:sourceBuffer.append(新的Uint8Array(e.target.result))代码>
为了检查自定义webm文件是否正常工作,我创建了一个测试页面,在该页面中,我定义了一个视频标记,其中包含该自定义webm文件的源。
当我运行代码时,它运行良好
我无法理解这种奇怪行为的原因。最有可能的问题是,您的WebM文件具有不以关键帧开头的群集
在Chrome开发频道构建(即Chrome 25或更高版本)中,您可以通过以下步骤验证这一点
在另一个选项卡中打开chrome:media internals
返回带有测试页的选项卡并重新加载它李>
当错误再次出现时,切换回chrome:media internals选项卡,并在“Active media Player:”标题下查找底部条目。它应该具有与传递给video元素src属性相同的blob:URL
单击blob:URL以展开播放器数据
单击“日志:”条目以显示播放器日志数据
在“事件:”列中搜索具有“媒体源错误”的条目。这些条目应提供有关传递到浏览器的内容的错误信息
如果您看到一条类似于“媒体段未以关键帧开头”的消息,则表示您的文件具有不以关键帧开头的簇。这在FFmpeg生成的内容中很常见。您可以通过以下方式之一修复文件:
运行本手册第2.2.5节中提到的示例_muxer程序
运行我作为项目一部分编写的mse_webm_remuxer程序
更新:我的案例中没有显示内部错误(接受的答案建议检查),但仍然存在相同的问题
我在尝试使用媒体源扩展名播放录制的.webm文件时遇到了同样的问题。Chrome(51)的录制格式不正确,Firefox(46)看起来还行
要使其工作,您必须修复.webm文件中的提示:
克隆
确保您的cmake版本>=3.2()
cmake.
make
/sample\u muxer-i original.webm-o fixed.webm
将fixed.webm加载到DASH/您自己的播放器中李>
希望它能帮助别人。如果没有DASH关键字,很难在谷歌上搜索任何信息(我不使用DASH,只使用相同的底层技术-MSE):谢谢aaron的回复。我已经按照您提到的步骤进行了操作,发现错误与您提到的相同。现在,我按照步骤1运行示例\u muxer程序。我已经访问了你提到的链接。我已经阅读了先决条件,其中提到需要FFmpeg、libwebm和webm工具。我已经下载了FFmpeg的windows版本,并将其添加到环境变量path中,并签入cmd。我已经下载了libwebm文件夹,但我不知道如何配置它,第三个必备的webm工具链接也没有什么可下载的。请帮助我使其工作。在分析代码后,我发现simple_muxer是一个内置于cpp中的应用程序。我已经安装了Dev-C++软件,但是当我试图编译sound_mixer.cpp文件时,我遇到了错误。运行mse_webm_remuxer progran的第二种方法对我很有效。感谢aaron的宝贵建议。如果将簇大小限制设置得足够高,可以防止FFmpeg创建没有关键帧的簇;我使用“-cluster\u size\u limit 10M-cluster\u time\u limit 10K”我已经为此绞尽脑汁一段时间了。您是否知道在chrome中可以使用这种方法?也许通过实时修复webm?它应该在Chrome中工作。我写这篇文章已经有一段时间了,但它在Chrome、Firefox和Opera中都可以使用。嘿,对不起,我的意思是,有没有一种方法可以使用MediaRecorder API进行录制,它可以立即在Chrome中播放。不需要重新制作视频,这在Chrome51中是不可能的。也许它现在起作用了,我还没有试过。但是,如果您不需要录制,则不必使用MediaRecorderAPI(例如,如果您只想显示/stream MediaStream)。