dbm*_*dbm 4 javascript video playback
我试图搜索有关这方面的信息,但没有找到任何适当的答案.
我进行了一项研究,我改变了使用视频的播放率的JavaScript playbackRate属性.5和2,从自然的播放速率.
我想知道Javascript如何改变视频播放速度.
例如,当播放速率变为时2,它是否仅导致从视频中删除帧?
播放速度减慢到什么时会发生什么.5?在这种情况下是否添加了帧?框架是如何添加的?音频是如何伸展/修剪的?
html5中视频标签的行为取决于用户的浏览器以及他们的操作系统和/或用于观看视频的设备.
不同的浏览器使用不同的音频/视频编解码器来解码音频/视频数据.以下是不同浏览器(和平台)中的视频格式和编解码器列表:
https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
您会注意到虽然浏览器之间的编解码器可能不同(IE vs Firefox vs Chrome vs Safari vs Opera),但它们在桌面和移动版本的浏览器中也可能不同.解码器可以基于OS(例如,iOS仅支持H.264解码器).某些浏览器允许用户通过浏览器插件添加解码器.
基本点是播放控件的行为方式(包括加速或减速)也取决于编解码器的行为.当您提到"JavaScript更改播放速率"时,浏览器只是要求底层视频编解码器更改视频的播放速率.
您的问题似乎是"如果我将视频加速到原始速度的两倍,它会丢失一半的帧吗?"或"如果我将视频减慢到原始速度的一半,它是否会复制每一帧" ?"
答案很大程度上取决于视频的内容和用于创建视频的编码类型.虽然将视频视为一系列帧(或图像)是合理的,但视频中的某些帧比其他帧更重要.大多数视频都表示为I,P和B帧.I帧,也称为关键帧包含大部分信息,而P帧和B帧包含关于I帧的差异信息.
例如,考虑一个视频序列,其中有一辆汽车在很大程度上静态的背景中移动.表示此序列的第一帧将包含整个场景的图像,但是大多数后续帧将仅包含有关移动车辆的信息.场景的其余部分是静态的 - 因此信息可以表示为差异图像.
当加速或减慢视频时,编解码器会尝试保留正在显示的视频序列中的大部分信息.因此,如果您加速视频,他们将优先显示关键帧和其他信息重帧,而不是场景主要是静态的帧.因此,虽然当您将视频加速到速度的两倍时,视频中的一半帧可能会被丢弃,但您无法准确预测哪些帧将被丢弃.它不像第2,第4,第6,第8帧都将被丢弃,而所有奇数帧都将保留.
这是一篇由Firefox开发人员于2014年12月撰写的关于Firefox实现视频播放速率的好文章:
http://blog.pearce.org.nz/2014/12/firefox-video-playbacks-skip-to-next.html
在那里,他们提到Firefox希望在音频加速方面做得比视频加速更好,因为人们对音频中的故障比视频更敏感.在视频中,他们会尝试"跳到下一个关键帧",也就是说,如果无法按时完成视频解码,则丢弃两个关键帧之间的所有帧.
我相信它们的实现必须在过去几年内发展,但本文让您对回放率操作的复杂性有了一个很好的了解.此外,如果您尝试将某些视频时刻与各自的音频声音紧密关联,则更改播放速度可能会非常棘手.
另外要记住的一点是,在浏览器上访问视频数据时,大多数数据并不存在于本地驱动器上 - 视频文件是通过异步加载的不可靠网络访问的.因此,即使连接不良,编解码器也会有很多内置优化功能来显示视频数据.基本思想是在丢弃其他信息的同时显示具有最相关信息的帧或帧的一部分.这再次与这样的概念联系在一起:很难预测在加速视频时哪些帧会被丢弃,甚至假设整个帧将被丢弃可能不正确.
如果以两倍的速度播放视频,将丢弃一半帧的计算假设视频具有恒定的帧速率.关于回放速率操纵,可变帧速率视频的处理方式不同.然后,它更多的是总数据速率(每秒应显示多少数据)的问题,而不是每秒需要丢弃/添加多少帧.
| 归档时间: |
|
| 查看次数: |
12204 次 |
| 最近记录: |