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将"修复"播放并且电影将以10x平稳播放.只需单击播放时间线即可.
有谁知道如何平稳播放1x以外的费率?这显然不是硬件问题或文件大小问题,因为QuickTime Player和AVPlayerView都可以做到这一点.
尝试
这个问题表明它可能是一个音频问题(事实上,QuickTime播放器和AVPlayerView在转发时都会使音频静音)但是我所有试图禁用所有音轨,静音所有音轨或改变音频音调算法的尝试似乎都没有做出改变.即使没有音频,播放仍然不稳定.
我也试过停止播放然后prerollAtRate:completionHandler用新的速率呼叫,但这也没有什么区别.
QuickTime Player和AVPlayerView正在做什么,可以以10倍,30倍甚至60倍的速度播放流畅的电影?
更新到Swift 3后,我意识到我的应用程序需要很长时间才能从远程服务器开始播放音频文件.在Swift 2.3中,这不会发生.我一直试图调试它,但我找不到任何东西.从来就获得印刷AVPlayer的状态在每一个时刻,我发现它的变化Loading,以Playing秒内,但随后需要约20秒才能真正开始播放歌曲.
我正在使用TeodorPatras的Jukebox
我想调整Avplayer率,我可以帮忙
[_avplayer play];
[_avplayer setRate:1.5];
Run Code Online (Sandbox Code Playgroud)
同样禁用音轨,当它小于2.0时运行良好.但是当我们应用它大于2X时,会导致Choppy或jerky视频.
当我搜索这个 - 我发现这一个链接暗示相同的行为
https://developer.apple.com/library/content/qa/qa1772/_index.html
当以指定速率播放的数据速率或其他处理要求超过AVFoundation跟上的能力时,以大于2.0的速率播放可能导致回放不稳或不稳定.在这些情况下,AVPlayer会自动降低播放质量以便跟上,采用一系列后备策略,具体取决于主要条件.一层退化是在视频子流内仅解码和显示I帧,这确实看起来很不稳定.
任何人都可以帮忙,如果是这样的话,我应该用什么方法来达到目的?
avplayer ×3
ios ×2
appkit ×1
avfoundation ×1
cocoa ×1
macos ×1
objective-c ×1
playback ×1
swift ×1
video ×1