swift - Swift / Firebase - 在播放之前下载一个 mp4
问题描述
我正在寻找播放我的 mp4 文件(存储在 firebase 存储中)并在它开始播放时启动一个计时器。我的问题是计时器在视频显示在我的屏幕上之前启动。有人知道如何在视频播放后开始计时吗?
这是我的代码,谢谢!
我的变量
var avPlayer:AVPlayer!
var player:AVPlayer?
var moviePalyer: AVPlayerLayer?
var isdone = true
var previewlayer: AVCaptureVideoPreviewLayer?
var timer = Timer()
我的代码:
let url = URL(string:movieURL)
let avPlayer = AVPlayer.init(url: url!)
moviePalyer = AVPlayerLayer.init(player: avPlayer)
moviePalyer?.frame = imageView.bounds
moviePalyer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
previewlayer?.connection?.videoOrientation = AVCaptureVideoOrientation.portrait
imageView.layer.addSublayer(moviePalyer!)
avPlayer.play()
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(MyViewController.decreaseTimer), userInfo: nil, repeats: true)
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: avPlayer.currentItem, queue: nil, using: { (_) in
DispatchQueue.main.async {
if self.isdone == true{
avPlayer.seek(to: kCMTimeZero)
avPlayer.play()
}else {
avPlayer.pause()
self.isdone = false
}
}
})
解决方案
尝试这个 :
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: avPlayer.currentItem, queue: nil, using: { (_) in
DispatchQueue.main.async {
if self.isdone == true{
avPlayer.seek(to: kCMTimeZero)
avPlayer.play()
}else {
avPlayer.pause()
self.isdone = false
}
}
DispatchQueue.main.async {
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(MyViewController.decreaseTimer), userInfo: nil, repeats: true )
}
})
推荐阅读
- python - SQLAlchemy 从查询结果中访问列类型
- c - 如何在 C 中复制指针数组?(uint32_t)
- r - 从 coinmarketcap 中抓取历史数据
- python - def drawPieces(屏幕,板)上的语法错误:
- python - 为什么 strip() 删除未提及的值
- r - 如何将纯色应用于ggplot线
- javascript - Electron Builder:“主进程发生错误 - 回调不是函数”
- macos - 如何创建指向 pyenv 特定 python 版本的符号链接
- amazon-web-services - quicksite 是否允许添加除美国以外的任何其他国家的地理空间数据?
- r - 安排数据框活动——基于时间的下一个活动