首页 > 解决方案 > 如何将本地视频嵌入到 iOS 12 中的 UIView

问题描述

我用来在 UIView 中嵌入本地视频的代码在 IOS 12 上不起作用。音频正在播放,但出现黑屏。

来自苹果开发者网站:

不要继承 AVPlayerViewController。不支持覆盖此类的方法,并导致未定义的行为。

该代码在 IOS 11 上运行良好,知道我需要在代码中更改什么吗?

谢谢

import UIKit
import AVFoundation
import AVKit

class ViewController: UIViewController {

    var avPlayer: AVPlayer!

    override func viewDidLoad() {

        super.viewDidLoad()
        let filepath: String? = Bundle.main.path(forResource: "qidong", ofType: "mp4")
        let fileURL = URL.init(fileURLWithPath: filepath!)


        avPlayer = AVPlayer(url: fileURL)


        let avPlayerController = AVPlayerViewController()
        avPlayerController.player = avPlayer
        avPlayerController.view.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)

        avPlayerController.showsPlaybackControls = false

        avPlayerController.player?.play()
        self.view.addSubview(avPlayerController.view)
    }
}

标签: iosswift

解决方案


您需要将其添加AVPlayerViewController为子视图控制器,如下所示:

import UIKit
import AVFoundation
import AVKit

class ViewController: UIViewController {

    var avPlayer: AVPlayer!

    override func viewDidLoad() {

        super.viewDidLoad()
        let filepath: String? = Bundle.main.path(forResource: "qidong", ofType: "mp4")
       let fileURL = URL.init(fileURLWithPath: filepath!)


        avPlayer = AVPlayer(url: fileURL)


        let avPlayerController = AVPlayerViewController()
        avPlayerController.player = avPlayer
        avPlayerController.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)

        avPlayerController.showsPlaybackControls = false

        avPlayerController.player?.play()
        self.addChild(avPlayerController)
        self.view.addSubview(avPlayerController.view)
        avPlayerController.didMove(toParent: self)
}

如果您不这样做,那么AVPlayerViewController可能会提前发布。

另一个小问题,但不要使用UIScreen视图控制器视图的框架的大小(或者甚至更好地执行诸如使用自动布局之类的操作)。


推荐阅读