html5-video - 使用媒体源扩展逐帧解码

标签 html5-video mp4 h.264 webm media-source

我一直在挖掘 Internet 上的 Media Source Extension 示例,但还没有想出一种方法来使它们适应我的需求。

我正在寻找一个本地缓存的 MP4/WebM 视频(具有 100% 关键帧和 1:1 的簇/原子与关键帧的比率)并非顺序地解码/显示它们(即帧 10、400、2、100等),并且能够以 0-60fps 的速率按需渲染这些非序列帧。使用 currentTime 属性的简单非 MSE 方法由于设置此属性和显示帧的延迟而失败。

我意识到这完全超出了视频播放的正常预期,但我的应用程序需要这种类型的非顺序高速播放。理想情况下,我可以使用 h264 来实现 GPU 加速,但我意识到可能需要处理一些特定于平台的 GPU 缓冲区,尽管零帧缓冲区似乎应该是可能的(请参阅 here )。我希望 MSE 可以完成这种非连续高帧率低延迟播放,但我知道我要求很多。

问题:

  • appendBuffer 是否会接受由单个关键帧组成的单个 WebM 集群/MP4 Atom,并且还能够以高频率 (60fps) 进行解码?
  • 你认为我想要做的事情在浏览器中可行吗?

  • 任何帮助、见解或代码建议/示例将不胜感激。

    谢谢!

    2016 年 4 月 5 日更新

    我能够让 MSE 主要在 Firefox、Edge 和 Chrome 中处理单帧 MP4 片段。但是,Chrome 似乎遇到了上面链接的帧缓冲区问题,我还没有找到预处理 MP4 以调用这种“低延迟”模式的方法。如果可以使用 MP4Box 等现有工具创建这样的文件,任何人都有任何线索吗?

    Firefox 和 Edge 立即解码/显示单个帧,延迟很小,但是一旦我将此视频加载到 Three.js WebGL 项目中(没有视频输出,没有错误),当然会出现问题。我暂时忽略了这一点,因为我更愿意在 Chrome 上工作,因为我也将针对 Android。

    最佳答案

    我能够很好地完成这项工作。关键是通过使用修改后的 mp4box 源混合特制的 MP4 文件,让 Chrome 进入其“低延迟”模式。我在 movie_fragments.c 中添加了一行,所以它是:

            if (movie->moov->mvex->mehd && movie->moov->mvex->mehd->fragment_duration) {
                trex->track->Header->duration = 0;
                Media_SetDuration(trex->track);
                movie->moov->mvex->mehd->fragment_duration = 0;
            }
    

    现在,每个创建的 MP4 都会将 MEHD 片段持续时间设置为 0,这会导致 Chrome 将其作为实时流进行处理。

    我仍然有一个与timestampOffset 属性相关的遗留问题,该属性与媒体片段中设置的FPS 一起控制播放速度。因为我想直接控制 FPS,所以我不希望 MSE 播放引擎有任何额外的延迟。我将在这里发布一个单独的问题来解决这个问题。

    谢谢,
    达斯汀

    关于html5-video - 使用媒体源扩展逐帧解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36364943/

    相关文章:

    javascript - 使用 HTML5 视频的 JQuery 在动态创建的代码中检测到 `play` 事件,但未检测到 `ended` 事件

    php - ffmpeg 无法识别的选项在上传时转换为 html 5 视频

    Javascript HTML5 play() 在 ios9 Safari 中不起作用?

    javascript - HTML 5 Canvas 到视频流不起作用

    python - 在python中将元数据从一个mp4文件复制到另一个文件

    encoding - 尝试实用地确定 h.264 配置文件和级别

    audio - 无法使用 png 和 mp3 音频生成 mp4

    ffmpeg - 视频转码和编解码器问题

    video - 在 h264 中,NAL 单位表示帧。?

    python-3.x - 如何使用帧单元制作 TIME 字幕(.srt、.smi 等)