UIView 中的 AVPlayer

Posted

技术标签:

【中文标题】UIView 中的 AVPlayer【英文标题】:AVPlayer Inside A UIView 【发布时间】:2017-11-08 19:33:38 【问题描述】:

所以我在我的 HomeViewController 上有一个视图,我想在其中播放视频。在 viewDidLoad() 我调用 playVideo() 这是我的代码:

func playVideo() 
    guard let filePath = Bundle.main.path(forResource: "video", ofType: "mov") else 
        debugPrint("video.mov not found.")
        return
    

    let avPlayer = AVPlayer(url: URL(fileURLWithPath: filePath))
    let avPlayerController = AVPlayerViewController()
    avPlayerController.player = avPlayer
    avPlayerController.view.frame = playerView.bounds
    avPlayerController.showsPlaybackControls = false
    avPlayerController.player?.play()
    playerView.addSubview(avPlayerController.view)
    playerView.bringSubview(toFront: QRButton)

我得到的只是黑色背景,没有视频。我究竟做错了什么?我已经尝试解决这个问题一段时间了。

ios:11.2 测试版 Xcode:9.2 测试版

【问题讨论】:

PS:我用 Xcode 9.1 和 iOS 11.1 试过,结果是一样的。 【参考方案1】:

尝试使用avPlayer作为类变量,可能还没开始播放就被释放了。

class ViewController: UIViewController 
     var avPlayer:AVPlayer?

    func playVideo() 
    guard let filePath = Bundle.main.path(forResource: "video", ofType: "mov") else 
        debugPrint("video.mov not found.")
        return
    

    avPlayer? = AVPlayer(url: URL(fileURLWithPath: filePath))
    let avPlayerController = AVPlayerViewController()
    avPlayerController.player = avPlayer
    avPlayerController.view.frame = playerView.bounds
    avPlayerController.showsPlaybackControls = false
    avPlayerController.player?.play()
    playerView.addSubview(avPlayerController.view)
    playerView.bringSubview(toFront: QRButton)
 
 

【讨论】:

以上是关于UIView 中的 AVPlayer的主要内容,如果未能解决你的问题,请参考以下文章

UIView 中的 UIView 问题

检测一个 UIView 是不是在父级中的另一个 UIView 后面

使 UIVIew 看起来像 IB 中的 UIView 的最佳方法?

在 Objective C 中的 UIView 中的命中测试

如何获取嵌套在 UIView 中的 UIView 框架 - Objective C

不同uiview中的iOS MultiTouch事件