【问题标题】:Media Source Api not working for a custom webm file (Chrome Version 23.0.1271.97 m)Media Source Api 不适用于自定义 webm 文件(Chrome 版本 23.0.1271.97 m)
【发布时间】:2012-12-11 19:21:19
【问题描述】:

我指的是link上给出的媒体源api演示

对于给定的测试 webm 文件工作正常,但是当我尝试将文件名更改为自定义 webm 文件时,代码停止工作。

它正在生成以下错误:Uncaught Error: INVALID_STATE_ERR: DOM Exception 11 在以下代码:sourceBuffer.append(new Uint8Array(e.target.result));

为了检查自定义 webm 文件是否正常工作,我创建了一个测试页面,我在其中定义了一个包含该自定义 webm 文件源的视频标签。 当我运行代码时,它工作正常。

我无法理解这种奇怪行为的原因。

【问题讨论】:

    标签: javascript html video streaming media-source


    【解决方案1】:

    最有可能的问题是您的 WebM 文件包含不以关键帧开头的集群。

    在 Chrome 开发通道构建(即 Chrome 25 或更高版本)中,您可以通过以下步骤验证这一点。

    1. 在另一个选项卡中打开 chrome:media-internals。
    2. 返回带有测试页的选项卡并重新加载它。
    3. 当错误再次出现时,切换回 chrome:media-internals 选项卡并在“活动媒体播放器:”标题下查找底部条目。它应该具有您传递给 video 元素 src 属性的相同 blob: URL。
    4. 点击 blob: URL 展开播放器数据。
    5. 单击“日志:”条目以显示播放器日志数据。
    6. 在“事件:”列中搜索具有“MEDIA_SOURCE_ERROR”的条目。这些条目应提供有关传递给浏览器的内容有什么问题的信息。

    如果您看到类似“媒体片段不是以关键帧开头”的消息。那么这意味着您的文件具有不以关键帧开头的集群。这在 FFmpeg 生成的内容中很常见。您可以通过以下方式之一修复您的文件:

    1. 运行WebM adaptive streaming guide第2.2.5节中提到的sample_muxer程序
    2. 运行我在 mse-tools 项目中编写的 mse_webm_remuxer 程序。

    【讨论】:

    • 感谢亚伦的回复。我已按照您提到的步骤进行操作,发现错误与您提到的相同。
    • 现在我按照步骤 1 运行 sample_muxer 程序。我已经访问了您提到的链接。我已经阅读了其中提到需要 FFmpeg、libwebm 和 webm-tools 的先决条件。我已经下载了 FFmpeg 的 windows 版本并添加到环境变量路径中并在 cmd 中检查。我已经下载了 libwebm 文件夹,但我不知道如何配置它,并且第三个先决条件 webm-tools 链接没有什么可下载的。请帮我让它工作。
    • 分析代码后发现simple_muxer是一个cpp内置的应用程序。我已经安装了 Dev-C++ 软件,但是当我尝试编译文件 sound_mixer.cpp 时出现错误
    • 运行 mse_webm_remuxer 程序的第二种方法对我有用。感谢 aaron 的宝贵建议。
    • 如果你将簇大小限制设置得足够高,你可以防止FFmpeg创建没有关键帧的簇;我使用“-cluster_size_limit 10M -cluster_time_limit 10K”
    【解决方案2】:

    更新:在我的案例中没有显示内部错误(接受的答案建议检查)但仍然是同样的问题

    我在尝试使用 MediaSource Extensions (MSE) 播放由 MediaRecorder API 录制的 .webm 文件时遇到了同样的问题。 Chrome (51) 录音格式错误,Firefox (46) 似乎还可以。

    要使其正常工作,您必须修复 .webm 文件中的提示:

    1. 克隆https://github.com/webmproject/libwebm
    2. 确保您的 cmake 版本 >= 3.2 (https://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04)
    3. cmake .
    4. make
    5. ./sample_muxer -i original.webm -o fixed.webm
    6. 将 fixed.webm 加载到 DASH / 您自己的播放器中!

    希望它对某人有所帮助。如果没有 DASH 关键字,很难在谷歌上搜索任何信息(我没有使用 DASH,只使用相同的底层技术 - MSE):)

    【讨论】:

    • 我一直在努力解决这个问题。您知道这可以在 chrome 中使用吗?也许通过实时修复 webm?
    • 它应该可以在 Chrome 中使用。我写这篇文章已经有一段时间了,但它可以在 Chrome、Firefox 和 Opera 中运行。
    • 嘿抱歉,我的意思是有一种方法可以使用 MediaRecorder API 进行录制,该 API 可以立即在 Chrome 中播放。无需重新混合视频。
    • 这在 Chrome 51 中是不可能的。也许它现在可以工作了,我还没有尝试过。但是,如果您不需要录制,则不必使用 MediaRecorderAPI(例如,如果您只想显示/流式传输 MediaStream)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多