在AVFoundation中有一种相对简单的循环视频方式吗?
我已经创建了我的AVPlayer和AVPlayerLayer:
avPlayer = [[AVPlayer playerWithURL:videoUrl] retain];
avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain];
avPlayerLayer.frame = contentView.layer.bounds;
[contentView.layer addSublayer: avPlayerLayer];
Run Code Online (Sandbox Code Playgroud)
然后我播放我的视频:
[avPlayer play];
Run Code Online (Sandbox Code Playgroud)
视频播放正常但最后停止播放.使用MPMoviePlayerController,您只需将其repeatMode
属性设置为正确的值即可.AVPlayer似乎没有类似的属性.似乎没有一个回调可以告诉我什么时候电影结束所以我可以寻找开头并再次播放它.
我没有使用MPMoviePlayerController,因为它有一些严重的限制.我希望能够一次播放多个视频流.
之前已经讨论过如何循环AVPlayer
播放视频项目,但没有"解决方案"足够无缝以提供无延迟的视频循环.
我正在开发一个tvOS应用程序,它的一个视图背景中有一个高质量的10秒"风景"剪辑,只需重新启动它的AVPlayer"标准"方式(订阅NSNotification
捕获它)太疯狂了注意并减损用户体验.
似乎实现真正无缝循环的唯一方法是在较低级别(在OpenGL中)手动管理帧...
尽管我已尽最大努力阅读此内容,并且作为操纵视频流水线的新手,我还没有达到一个易于理解的解决方案.
我知道存在外部库可以更容易地执行此行为; 最值得注意的是GPUImage.但是,我正在开发的应用程序是针对tvOS的,因此很难使用相当多的第三方iOS库,包括GPUImage.我遇到的另一个库是AVAnimator,它为轻量级动画视频提供了强大的功能,但不能用于.H264中编码的源素材的密集,高质量视频剪辑.
到目前为止,我最接近的是Apple自己的AVCustomEdit源代码,但这主要涉及静态生成"过渡",虽然无缝,但过于复杂,我无法辨别如何使其执行简单的循环功能.
如果任何人都可以在AVPlayer
较低级别操作,即使用图像处理/缓冲区(或者不依赖于外部库的iOS开发),我会非常有兴趣知道如何开始.