ios - 使用多个 AVPlayer 时如何检测哪个视频结束了?
问题描述
我在屏幕上并排播放两个视频,所以我有两个 AVPlayer 实例。我正在使用工作正常的通知检测视频播放结束。我的选择器(playerDidFinishPlaying)在两个视频结束时都会被调用。
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil)
现在我的问题出在选择器(playerDidFinishPlaying)中,我想检测它是为哪个 avplayer 调用的?如何唯一标识视频结束的 AVPlayer?
解决方案
另一个想法。更新了@black_pearl 的方法
不同的通知注册,不同的通知方式。
var player = AVPlayer()
var playerTwo = AVPlayer()
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlay(_:)), name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishMusic(_:)), name: .AVPlayerItemDidPlayToEndTime, object: playerTwo.currentItem)
}
@objc func playerDidFinishPlay(_ noti: Notification) {
if let p = noti.object as? AVPlayerItem, p == player.currentItem {
print("1")
}
}
@objc func playerDidFinishMusic(_ noti: Notification) {
if let p = noti.object as? AVPlayerItem, p == playerTwo.currentItem{
print("2")
}
}
推荐阅读
- python - 全局变量未更新/未定义
- c++ - C++ - 如何确定函数返回值的类型?
- javascript - 服务工作者在反应中缓存的路由
- machine-learning - 这个分类模型是否过拟合?
- apache-kafka - 保护 Kafka Connect
- verilog - 如何在没有 # 的情况下在 Verilog 中建模延迟?可以合成的
- java - 无法在 CarouselView 上调用`setPageCount(int)`
- angular - 如何在 NgModel 组件和管道角度之间进行通信
- azure - .NET Core 项目的 Azure Pipelines 中不必要的启动命令
- c - 这个 const 值是如何改变的..?