我一直在研究 Internet 上的媒体源扩展示例,但还没有完全找到一种方法来使它们适应我的需求。
我正在寻找本地缓存的 MP4/WebM 视频(具有 100% 关键帧和 1:1 的簇/原子与关键帧的比率)并以非顺序方式解码/显示它们(即第 10、400、2、100 帧等),并能够以 0-60fps 的速率按需渲染这些非连续帧。使用 currentTime 属性的简单非 MSE 方法由于设置此属性和显示帧的延迟而失败。
我意识到这完全超出了视频播放的正常预期,但我的应用程序需要这种类型的非连续高速播放。理想情况下,我可以使用 h264 来实现 GPU 加速,但我意识到可能有一些特定于平台的 GPU 缓冲区需要处理,尽管零帧缓冲区似乎应该是可能的(参见此处)。我希望 MSE 可以完成这种非连续的高帧率低延迟播放,但我知道我要求很多。
问题:
appendBuffer 会接受由单个关键帧组成的单个 WebM 集群/MP4 Atom,并且还能够以高频率(60fps)解码吗?
您认为我在浏览器中尝试做的事情是可能的吗?
任何帮助、见解或代码建议/示例将不胜感激。
谢谢!
2016 年 4 月 5 日更新
我能够让 MSE 主要在 Firefox、Edge 和 Chrome 中处理单帧 MP4 片段。但是,Chrome 似乎遇到了上面链接的帧缓冲区问题,我还没有找到一种方法来预处理 MP4 以调用这种“低延迟”模式。如果可以使用 MP4Box 等现有工具创建这样的文件,任何人都有任何线索吗?
Firefox 和 Edge 立即解码/显示单个帧,延迟非常小,但是一旦我将此视频加载到 Three.js WebGL 项目中(没有视频输出,没有错误),当然会出现问题。我暂时忽略了这一点,因为我更愿意在 Chrome 上运行,因为我也将针对 Android。