使用
使用
AVPlayer
+AVPlayerLayer
+AVPictureInPictureController
在运行iOS 14(beta 7)的iPhone上创建自定义视频播放器时,当从UIButton
操作调用player.start()
后,该视频不会自动进入画中画模式,即使应用程序进入后台。使用
AVPlayerViewController
时未能复制此问题,这似乎表明iOS 14中的AVPictureInPictureController
存在问题,但我想知道是否有其他人遇到了这个问题并且知道任何解决方法。 我还将此问题提交给了苹果公司,编号为rdar://8620271
示例代码。import UIKit
import AVFoundation
import AVKit
class ViewController: UIViewController {
private let player = AVPlayer(url: URL(string: "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")!)
private var pictureInPictureController: AVPictureInPictureController!
private var playerView: PlayerView!
private var playButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
playerView = PlayerView(frame: CGRect(x: 0, y: 44, width: view.bounds.width, height: 200))
playerView.backgroundColor = .black
playerView.playerLayer.player = player
view.addSubview(playerView)
playButton = UIButton(frame: CGRect(x: view.bounds.midX - 50, y: playerView.frame.maxY + 20, width: 100, height: 22))
playButton.setTitleColor(.blue, for: .normal)
playButton.setTitle("Play", for: .normal)
playButton.addTarget(self, action: #selector(play), for: .touchUpInside)
view.addSubview(playButton)
pictureInPictureController = AVPictureInPictureController(playerLayer: playerView.playerLayer)
do {
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(.playback)
try audioSession.setMode(.moviePlayback)
try audioSession.setActive(true)
} catch let e {
print(e.localizedDescription)
}
}
@objc func play() {
player.play()
}
}
class PlayerView: UIView {
override class var layerClass: AnyClass {
return AVPlayerLayer.self
}
var playerLayer: AVPlayerLayer! {
return layer as? AVPlayerLayer
}
}
playerController.videoGravity = .resizeAspectFill
才能让它正常工作(我的视频是一个竖屏 iPhone 屏幕录制,所以我认为这与纵横比问题有关)。 - DeveloBär