使用 AVPlayer-Swift 无缝循环视频

2023-12-21

我正在使用 AVPlayer 在后台循环播放本地视频,视频播放正常,但完成视频后需要暂停才能循环播放视频。我尝试了很多方法,也看到了很多关于堆栈溢出的帖子,但我未能找到合适的解决方案。我正在使用 Swift3。

代码在这里:

var videoplayer :AVPlayer = AVPlayer()

override func viewDidLoad() {
super.viewDidLoad()

let path = Bundle.main.path(forResource: "background4", ofType: "mp4")
        videoplayer = AVPlayer(url: URL(fileURLWithPath: path!))
        videoplayer.volume = 0     
        videoplayer.actionAtItemEnd = AVPlayerActionAtItemEnd.none;

        let playerLayer = AVPlayerLayer(player: videoplayer)
        playerLayer.frame = self.view.frame
        playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

        if (videoplayer.rate != 0) {
            print("playing videoplayer")
            self.blurBgImage.isHidden = true
        }

        playerLayer.zPosition = -1
        videoplayer.rate = 0
        videoplayer.play()
        self.blurBgImage.layer.addSublayer(playerLayer)

 NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: videoplayer.currentItem, queue: nil, using: { (_) in
        DispatchQueue.main.async {

             let t1 = CMTimeMake(5, 100)
            self.videoplayer.seek(to: t1)
            self.videoplayer.play()
        }
    })
}

我也尝试过AVPlayerLooper。 代码是:

 var playerLooper: NSObject?
var playerLayer:AVPlayerLayer!
var queuePlayer: AVQueuePlayer?

 func playVideo(_ filmName: String){
       if let path = Bundle.main.path(forResource: filmName, ofType: "mp4")        let url =  URL(fileURLWithPath: path)
         if #available(tvOS 10.0, *) {
          let playerItem = AVPlayerItem(url: url as URL)
            self.videoplayer = AVQueuePlayer(items: [playerItem])
            self.playerLayer = AVPlayerLayer(player: self.videoplayer)
            self.playerLooper = AVPlayerLooper(player: self.videoplayer as! AVQueuePlayer, templateItem: playerItem)
            self.blurBgImage.layer.addSublayer(playerLayer!)
            self.playerLayer?.frame = self.view.frame
            self.videoplayer.volume = 10
            self.videoplayer.play()
        } else {
            videoplayer = AVPlayer(url: url)
            videoplayer.play()
            loopVideo(videoplayer)
        }
}
}

我应该怎么做才能实现无缝循环?提前致谢。


仅供参考,这里有示例代码:https://developer.apple.com/library/content/samplecode/avloopplayer/Introduction/Intro.html https://developer.apple.com/library/content/samplecode/avloopplayer/Introduction/Intro.html


@matt 删除的答案对我来说(在设备/模拟器上)适用于 iOS 10+ 设备:

使用AVPlayerLooper。这正是它的用途。

https://developer.apple.com/reference/avfoundation/avplayerlooper https://developer.apple.com/reference/avfoundation/avplayerlooper

基本上它为你实现了 AVQueuePlayer,不断更新 队列,使其永远不会结束。

它无缝循环,没有任何白/黑斑点。

E.g.

private var looper: AVPlayerLooper?

...

let queuePlayer = AVQueuePlayer(playerItem: item)
looper = AVPlayerLooper(player: queuePlayer, templateItem: item)
videoPlayerLayer.player = queuePlayer

如果您最终在可重复使用的单元中执行此操作(例如UICollectionView),然后确保在单元重新使用之前禁用循环,否则您会遇到一些不起眼的崩溃:

looper?.disableLooping()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AVPlayer-Swift 无缝循环视频 的相关文章

  • 在 Cordova / PhoneGap 中生成 iOS 和 Android 图标

    我有一个新创建的 Cordova 项目 其中包含以下内容config xml设置 使用来自http docs phonegap com en edge config ref images md html http docs phonegap
  • 使用 cordova 工具集构建应用程序时出错

    我正在使用 Visual Studio 2017 社区版 并且只需使用 vs 文档中的步骤即可使用 macincloud 服务进行远程构建 我基本上遇到了以下明确的错误 来自构建服务器的远程构建错误https xxxx macincloud
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • 有没有办法反转 SKSpriteNode 的颜色

    我想知道是否可以反转 SKSpriteNode 的颜色 或调整色调 您可以通过应用带有 SKEffect 节点的 CIFilter 来反转颜色 像这样的东西应该有效 SKEffectNode effectNode SKEffectNode
  • 使用 Xcode 6 XLIFF 导出的 iOS 本地化/国际化设置 Bungle

    背景 Xcode 6 添加了快速导出功能 可为每种语言创建单个 XLIFF 文件 只需从文件导航器中选择您的项目 然后选择菜单项编辑器 导出以进行本地化 Issue 它工作得非常好 并且 XML 中包含了所有内容 除了设置捆绑字符串 有人有
  • iPad 的自适应布局

    我正在关注这篇文章在 ios 中构建自适应布局为 iOS 8 构建自适应用户界面 http www sitepoint com building adaptive user interfaces ios 8 它在 iPhone 上运行良好
  • 查找 NSString 中子字符串的所有位置(不仅仅是第一个)

    有一个子串在字符串中出现多次 我用rangeOfString 不过好像只能找到第一个位置 如何找到子字符串的所有位置 NSString subString1 NSString subString2 n NSRange range1 newr
  • 在 Chrome 中使用 animate.css 时出现全屏视频问题

    我有一个页面 其中包含使用视频标签的视频 另外 我的页面使用 animate css 向我的元素添加一些动画 问题是 当我在 animate css 中使用样式时 我的视频无法正确全屏显示 这是我的页面的示例 div div class g
  • HTMLMediaElement 持续时间不一致

    我的视频播放器出现问题 视频时长从HTMLMediaElement duration https developer mozilla org en US docs Web API HTMLMediaElement duration不一致 我
  • 如何在flutter插件中调试iOS原生代码?

    我想知道如何在插件中调试 flutter iOS 代码 我可以打开每当您创建插件时生成的示例应用程序 但我将插件代码视为二进制框架 因此我无法调试它 对于 android 这相当简单 我只需打开 A S 中的 android 文件夹即可 插
  • ScrollView 内的 SwiftUI 列表

    我想将列表放在 ScrollView 中 以便可以一起滚动列表行和标题 但我发现 ScrollView 中的 List 不起作用 它什么也没显示 我应该同时使用它们 我应该使用 ScrollView 这样当我滚动行时 我可以使标题 图像或文
  • 在 iOS 7 上需要具有非半透明栏的 WantsFullScreenLayout 行为

    我希望能够让我的视图覆盖整个屏幕 位于导航栏和工具栏后面 并将导航栏和工具栏的半透明属性设置为NO 我想要不透明的条 在 iOS 7 之前 这很容易通过设置来完成wantsFullScreenLayout是 然而 在 iOS 7 中 我找不
  • 我应该在哪里保存想要长期保留的数据和文件,以及如何防止 iCloud 备份它们

    我有任意类型的文件 包括核心数据存储库 我需要保留这些文件 并且不要让 iOS 删除它们 通常 我不希望 iCloud 备份这些文件 我应该把它们保存在哪里 iOS5 0 及更早版本 5 0 1 和 5 1 及更高版本中保存文件的本地更改主
  • 使用 AVVideoCompositionCoreAnimationTool 在 CALayer 中将视频与静态图像混合

    我正在尝试将来自相机的视频与静态图像 水印 混合 我已经检查了这里的问题 答案和一些示例 包括来自 Apple 的 WWDC AVEditDemo 并以以下代码结束 不幸的是 导出的视频不包含带有图像的图层 有任何想法吗 void imag
  • UITableView 部分始终保持在视图内

    我有一个包含 3 个部分的 UITableView 第 1 节 该部分的标题是 Players 内容恰好是 1 个单元格 包含 1 4 个玩家姓名的水平列表 第 2 节 该部分的标题是 回合 内容是 X 个单元格 每个单元格包含每个玩家在第
  • CSS 背景在 iOS 中拉伸以填充高度,但滚动上有空白

    这个 CSS 让我的背景在 iOS 中填充 100 的屏幕高度 但有一个小问题 当你向下滚动时 最初有空白 然后当你松开手指并停止滚动时 背景图像会 调整 并填充 100再次屏幕高度的 如果您继续滚动 该问题不会在同一页面上再次出现 只是第
  • Crashlytics 和答案套件的问题

    我在我的应用程序中使用 Crashlytics 来跟踪崩溃 并使用 Answers 工具包来处理自定义事件 我正在使用 pod 文件将框架集成到我的项目中 但是在添加两个 pod 时出现链接错误 pod Fabric pod Answers
  • NSXMLParser 解析使用 Windows-1256 编码的 xml 文件

    我想解析 Windows 1256 编码的 rss 文件 但解析器没有读取它 我用 UTF8 编码做了很多解析 但只有这个不起作用 为什么 带有 Windows 1256 的 rss 文件 http youm7 com Rss asp 解决
  • MVVM 在 iOS 中的使用

    我是一名 iOS 开发人员 我对我的项目中存在大量视图控制器感到内疚 因此我一直在寻找更好的方法来构建我的项目 并遇到了 MVVM 模型 视图 视图模型 架构 我读了很多关于 iOS 的 MVVM 文章 但有几个问题 我将用一个例子来解释我
  • 如何在 iOS 上反转使用 CoreGraphics 渲染的 pdf 上的文本颜色?

    我正在使用开源 PDF 查看库 VFR PDF Readerhttps github com vfr Reader https github com vfr Reader 我正在尝试实现 夜间模式 或黑色背景与白色文本 我可以将背景设置为我

随机推荐

  • 如何模拟鼠标点击屏幕上的某个位置?

    我想做的是操纵鼠标 出于我自己的目的 这将是一个简单的宏 所以它会将我的鼠标移动到屏幕上的某个位置并单击 就像我以一定的间隔单击一样 这是使用非托管函数来模拟鼠标单击的代码 This is a replacement for Cursor
  • 选择框箭头样式

    我想让第二个选择框箭头与第一个选择框箭头相同 但我不知道为什么它们不同 因为我没有设置箭头的样式 在大多数情况下 浏览器和操作系统决定选择框的样式 仅用 CSS 来更改它们几乎是不可能的 您必须研究替代方法 主要技巧是应用appearanc
  • List的实现既是Set a List(序列)?

    我正在扩展 LinkedList 并实现 Set 这样我就有了一个没有重复项的列表 我想知道这样的实现是否还不存在 我所要做的就是覆盖add e 方法首先查找元素 如果存在则不添加它 就像是 add E if get E null supe
  • Resharper - 如何关闭“私有”访问修饰符?

    我不喜欢在访问修饰符之前放置 私有 无论如何 它们默认都是私有的 这只是视觉上的混乱 如何关闭 resharper 不断用 私人 标记所有内容的功能 锐锐9 1 ReSharper gt 选项 gt 代码编辑 gt C gt 代码样式 gt
  • OkHttp 不断收到 StreamResetException:流已重置:当它为 200 时,内部错误

    I got StreamResetException stream was reset INTERNAL ERROR来自 OkHttp 有什么问题 这是日志 I okhttp OkHttpClient lt 200 https www ex
  • 在 python 中使用 getattr

    The getattr函数定义如下 getattr 对象 名称 默认 返回对象的命名属性的值 名称必须是字符串 如果字符串是对象属性之一的名称 则结果是该属性的值 例如 getattr x foobar 相当于x foobar 如果指定的属
  • Spring Eureka 应用程序不显示仪表板

    有一个 Eureka Server 应用程序 EnableEurekaServer SpringBootApplication public class RegistrationModulesServiceApplication publi
  • 为什么要用耳朵而不是战争?

    I read this https stackoverflow com questions 3923514 ejb explanation ear vs war and this https stackoverflow com questi
  • 如何操作谷歌应用程序引擎数据存储中的文件

    我的问题围绕用户将文本文件上传到我的应用程序 我需要获取此文件并使用我的应用程序对其进行处理 然后再将其保存到数据存储区 从我所读到的一点来看 我了解到用户上传作为 blob 直接进入数据存储 如果我可以获取该文件 对其执行操作 意味着更改
  • CKEditor & JavaScript - 在 CKEditor 中调整高度和宽度

    如何在CKEditor中调整高度 这是我的 CKEditor 代码 在参数中添加高度和宽度设置 CKEDITOR replace content toolbar
  • E2E 测试 - WebdriverJS、Selenium 和 Jasmine

    好的 我遵循了几个略有不同的示例 正 如您在下面的注释代码中看到的那样 他们都声称可以工作 但我无法让它这样做 我在用着 selenium webdriver jasmine node reporter fix jasmine node e
  • 将数据从“datetime_select”转换为 DateTime 对象的 Rails 方法在哪里?

    当我使用在表单中 它会生成如下 HTML
  • Angular 6 应用程序在生产构建后重新加载时中断

    我有一个应用程序 我在其中保存了 dist 文件夹 该文件夹是在我的服务器上成功完成完整生产构建后获得的 一切正常 所有模块和组件都工作正常 直到我手动重新加载浏览器窗口 它才会抛出以下错误 我还使用 base href dist 构建了项
  • 自定义Prolog算术函数

    我正在寻找类似内置算术运算符的东西 它在 Prolog 中 特别是在 SWI Prolog 中 有返回值 例如 如果你跑A is 1 2 3 2 它返回A 8 我该如何定义func运算符做类似的事情 操作员 E g A is 2 func
  • 使用 SQLAlchemy declarative_base() 在 VS Code 中“继承‘Base’,这不是一个类”

    VS 代码显示 继承 Base 它不是一个类 作为错误消息 给出以下内容 from sqlalchemy ext declarative import declarative base from sqlalchemy import Inte
  • Cython“无法获取内存视图切片的地址”

    我在 Cython 中创建一个简单的类时遇到问题 与处理 C 包装器中数组的内存视图相关的文档很少 我想创建一个具有时间 x y 和 z 属性的数据类 我需要这些属性是数组 最终可以在 Python 中调用 我以前使用 numpy 类型进行
  • Java 中的本福德定律 - 如何将数学函数放入 Java 中

    我有一个快速的问题 我正在尝试用java制作一个欺诈检测应用程序 该应用程序将主要基于本福德定律 本福德定律非常酷 它基本上可以解释为在真实的金融交易中 第一个数字通常是 1 2 或 3 很少是 8 9 我还没能得到本福德公式翻译成可以在J
  • 从服务器,如何识别 javascript fetch() 调用(asp.net mvc)

    这并不完全是重复的 下面提供的答案与提议的重复答案中的评论相同 从 asp net 控制器操作内部 我有兴趣了解该调用是否是由 javascript fetch 调用进行的 我可以询问 Request 对象的任何部分来发现这一点吗 例如 如
  • 我应该为 PayPal 沙盒使用什么用户名/密码/签名?

    我正在尝试使用 Paypal NVP API 退款交易 我在沙盒帐户中收到了一些付款 但是当我尝试通过 API 发放退款时 我得到了You do not have permissions to make this API call 但我不确
  • 使用 AVPlayer-Swift 无缝循环视频

    我正在使用 AVPlayer 在后台循环播放本地视频 视频播放正常 但完成视频后需要暂停才能循环播放视频 我尝试了很多方法 也看到了很多关于堆栈溢出的帖子 但我未能找到合适的解决方案 我正在使用 Swift3 代码在这里 var video