Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 媒体源Api不适用于自定义webm文件(Chrome版本23.0.1271.97 m)_Javascript_Html_Video_Streaming_Media Source - Fatal编程技术网

Javascript 媒体源Api不适用于自定义webm文件(Chrome版本23.0.1271.97 m)

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文

我指的是一个媒体源api演示给出了这个

对于给定的测试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)。