AVPlayer
有一个名为 rate
的属性,用于控制播放速率 . 1.0
是正常速度,而像 2.0
或 5.0
这样的值应分别以2x和5x回放 .
每当我将播放速率值设置为高于 1.0
(例如 10.0
)时,播放就会非常不连贯,看起来大量的帧会因为播放器无法跟上而丢失 .
但是,QuickTime Player中的相同值(使用相同的电影)可以为 2x, 5x, 10x, 30x and 60x
(由QuickTime播放器报告)生成平滑播放 .
我创建了一个测试OS X应用程序,它只包含一个 AVPlayerView
和两个用于设置播放速率的按钮 . 1.0
的速率按预期工作,但速率为 10.0
会产生非常不稳定的播放 .
然而, AVPlayerView
有一个奇怪的怪癖,如果你鼠标点击播放时间线寻找另一个位置(当它以10x和波动的方式播放时),那么 AVPlayerView
将"fix"播放,电影将以10x平稳播放 . 只需单击播放时间线即可 .
有谁知道如何平稳播放1x以外的费率?这显然不是硬件问题或文件大小问题,因为QuickTime Player和AVPlayerView都可以做到这一点 .
Attempts
这个question表明它可能是一个音频问题(事实上,QuickTime播放器和AVPlayerView在转发时都会使音频静音)但我所有试图禁用所有音轨,静音所有音轨或更改音频音调算法的尝试似乎都没有做出改变 . 即使没有音频,播放仍然不稳定 .
我也试过停止播放,然后用新的速率调用 prerollAtRate:completionHandler
,但这也没有什么区别 .
QuickTime Player和AVPlayerView正在做什么,可以以10倍,30倍甚至60倍的速度播放流畅的电影?
1 回答
这只是一种解决方法 .
当播放速率从0.0更改为较大值时,如果这是自上次调用
AVPlayer.replaceCurrentItem
以来播放速率中的第一个从零到非零的转换,则播放流畅(音频自动静音) . 这是第一次这样的转换是必要的:仅将速率设置为0.0然后设置为所需的速率不起作用 .因此,例如,这将在高速下产生流畅的播放: