ios - 无缝循环 AVPlayer

标签 ios video opengl-es avfoundation tvos

已经有some discussion之前关于如何循环播放 AVPlayer 的视频项目,但没有“解决方案”足够无缝以提供视频的无延迟循环 .

我正在开发一个 tvOS 应用程序,它在其中一个 View 的背景中有一个高质量的 10 秒“风景”剪辑,并且只需以“标准”方式重新启动它的 AVPlayer(订阅 NSNotification 来捕捉它)过于神经质以至于不会注意到并且会影响用户体验。

似乎实现真正无缝循环的唯一方法是在较低级别(在 OpenGL 中)手动管理帧...

尽管尽了最大努力阅读这篇文章,并且作为操纵视频管道的新手,我还没有足够接近一个可理解的解决方案。

我知道存在外部库可以更轻松地执行此行为;最值得注意的是 GPUImage .但是,我正在开发的应用程序是针对 tvOS 的,因此很难使用现有的很多第 3 方 iOS 库,包括 GPUImage。我遇到的另一个图书馆是 AVAnimator ,它为轻量级动画视频提供了强大的功能,但不适用于以 .H264 编码的源素材的密集、高质量视频剪辑。

到目前为止我最接近的是Apple自己的AVCustomEdit源代码,然而,这主要涉及“过渡”的静态生成,尽管它是无缝的,但对我来说太复杂了,无法辨别如何使其执行简单的循环功能。

如果有人能分享在较低级别操作 AVPlayer 的经验,即图像处理/缓冲区(或不依赖外部库的 iOS 开发),我将非常感兴趣了解如何开始。

最佳答案

我在流式传输视频时遇到了同样的问题。第一次播放后,第二次加载视频时出现黑屏。我通过提前 5 毫秒搜索视频摆脱了黑屏。它制作了几乎无缝的视频循环。 ( swift 2.1)

// Create player here..
let player = AVPlayer(URL: videoURL)

// Add notification block
NSNotificationCenter.defaultCenter().addObserverForName(AVPlayerItemDidPlayToEndTimeNotification, object: player.currentItem, queue: nil)
{ notification in
   let t1 = CMTimeMake(5, 100);
   player.seekToTime(t1)
   player.play()
}

关于ios - 无缝循环 AVPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33285826/

相关文章:

android - 纹理和颜色在 OpenGL ES 中显示不正确

ios - 带有 2 个文本字段的 UIDatePicker(从/到日期)?

android - 使用 VideoView,如何去除 "can' t play this video”的提示信息?

image - ffmpeg 将一系列图像转换为视频 - 每两帧之间使用交叉淡入淡出或任何其他过渡

ios - 自定义着色器 SCNProgram iOS 9 Scenekit

java - 如何在OpenGL中移动2D相机

ios - 类型 'MapViewController' 没有成员 'mapTypeChanged' Swift Big Nerd Ranch Guide

ios - 为什么我的 unicode 字符看起来与我期望的不同?

iOS地理围栏;这会比我现在拥有的更准确吗?

android - Lollipop 如何播放压缩的音频/视频