热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何确定html视频元素上的预期帧速率

如何解决《如何确定html视频元素上的预期帧速率》经验,为你挑选了1个好方法。

有没有办法确定在html视频元素中播放的内容的预期帧速率?

视频元素是否知道预期的FPS或帧数,或者只是"猜测"(可能是24fps)并以猜测的速度播放?

以下是我不成功的尝试:

在视频元素本身上寻找FPS或FrameCount属性 - 不!

查找有关FPS或FrameCount的跨视频格式标题信息 - 没有任何一致性!

寻找在换帧时触发的事件 - 不!

我的下一次尝试更复杂:通过捕获画布元素的帧来对视频进行采样,并通过确定像素何时发生变化来计算帧数.

在做复杂的尝试之前,有没有人有更简单的答案?



1> GameAlchemis..:

知道视频的帧速率并不像你想象的那么有用.
浏览器使用一些技巧来匹配电影的帧速率和屏幕的刷新率,所以如果你看一下currentTime属性,你会看到实际的帧持续时间(== currentTime- previous currentTime)不是一个常数,它在帧与帧之间变化.

在这个示例视频:http://jsfiddle.net/3qs46n4z/3/ 模式是:
4-1-5-1:
4帧在21.3 + 1帧在32 + 5帧在21.3 + 1帧在32.

因此,如果您希望始终在画布上显示最新帧,同时避免过度绘制,解决方案可能是:
- 在每个rAF上,查看视频的当前时间:
•相同? - >什么都不做.
•改变了? - >更新框架.

无论你想做什么,比较两个currentTime ===两个数字可能比比较两个imageDatas更快;-)

编辑:查看规范以找到我的说法的证据,我发现这个注释的细微差别:

 Which frame in a video stream corresponds to a particular playback position is defined by the video stream's format.

(4.8.6的说明,见http://www.w3.org/TR/2011/WD-html5-20110113/video.html)

所以严格说我们只能说(当前时间是相同的)暗示(帧是相同的).
我只能打赌倒数是真的=>不同的时间意味着不同的帧.
在上面的示例中,Chrome试图通过尝试获得45 Hz(= 60/2 + 60/4)来匹配60Hz计算机上的24Hz电影,最接近48 = 2*24.对于21个创建的帧,我不知道它是插值还是仅复制帧.它肯定会根据浏览器/设备(尤其是Gpu)而改变.我打赌任何最近的台式机或功能强大的智能手机都会进

无论如何,考虑到使用imageData检查的高成本,你要比检查更好地绘制两次.

Rq1:我想知道在一次使用Xor模式+测试0到32位的程度会增加比较时间.(getImageData 慢.)

Rq2:我确信使用播放速率"同步"视频和显示器,以及知道哪个帧是真正的(==非插值)帧是一种愚蠢的方法.(所以两个传递到这里1)同步2)倒带和检索帧).

Rq3:如果您的目的是获取每个视频帧不是视频帧,那么浏览器就不可能了.如上所述,(桌面)浏览器进行内插以尽可能接近地匹配显示帧速率.那些帧不在原始流中.甚至还有一些高端"3D"(2D +时间)插值设备,其中初始帧甚至不打算显示(!).另一方面,如果您对(插值)输出流没问题,则对rAF进行轮询将提供您看到的每个帧(您不能错过一个帧(显然您的应用正在忙着做其他事情).

Rq4:插值(==无重复帧)在近期/不错的GPU供电桌面上有99.99%的可能性.

Rq5:确保温暖你的功能(在启动时调用它们100次)并且不产生垃圾以避免jit/gc暂停.


推荐阅读
author-avatar
KenNaNa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有