dja*_*o-d 15 avfoundation ios avplayer
我能够成功创建一个播放器,但对最初的黑屏感到恼火.我决定覆盖UIImageView并在播放器启动后隐藏它.这很有用,但我不想为我的所有视频创建和维护图像的麻烦.
我能够通过播放获得我想要的确切结果,并在实例化之后立即暂停播放器.唯一的问题是,有时玩家的状态记录不正确,所以当我再次启动玩家时,状态被列为已经"正在播放",即使播放器已暂停.
我开始研究使用AVPlayerItem seekToTime但没有找到任何可行的解决方案.是否有"非hacky"方式实现这一目标?
如果你正在使用AVPlayerViewController,这是玩家控制器contentOverlayView属性的完美使用.这是UIView在播放器层和为此目的完全暴露的控件之间:
首先,创建截图:
let asset = AVAsset(URL: URL(string: "")!) // link to some video
let imageGenerator = AVAssetImageGenerator(asset: asset)
let screenshotTime = CMTime(seconds: 1, preferredTimescale: 1)
if let imageRef = try? imageGenerator.copyCGImageAtTime(screenshotTime, actualTime: nil) {
let image = UIImage(CGImage: imageRef)
// see part 2 below
}
Run Code Online (Sandbox Code Playgroud)
现在,将图像添加为contentOverlayView播放器控制器中的子视图:
// in the same try block
let imageView = UIImageView(image: image)
let playerVC = AVPlayerViewController()
let playerItem = AVPlayerItem(asset: asset)
playerVC.player = AVPlayer(playerItem: playerItem)
self.presentViewController(playerVC, animated: true) {
playerVC.contentOverlayView?.addSubview(imageView)
// adjust the frame of your imageView to fit on the player controller's contentOverlayView
}
Run Code Online (Sandbox Code Playgroud)
然后,imageView在播放器开始播放资源时或缓冲完成时删除子视图.
| 归档时间: |
|
| 查看次数: |
1667 次 |
| 最近记录: |