gpt4 book ai didi

ios - AVPictureInPictureController 在应用程序后台运行时不会自动启动画中画

转载 作者:行者123 更新时间:2023-12-03 21:11:15 30 4
gpt4 key购买 nike

使用 AVPlayer 创建自定义视频播放器时+ AVPlayerLayer + AVPictureInPictureController对于运行 iOS 14 (beta 7) 的 iPhone,当应用在 player.start() 后进入后台时,视频不会自动进入画中画模式从 UIButton 操作调用。
使用 AVPlayerViewController 不会重现该问题这似乎表明 AVPictureInPictureController 存在问题一般在 iOS 14 上,但我想知道是否还有其他人遇到过这个问题并知道任何解决方法。我也在 rdar://8620271 下向 Apple 提交了这个问题
示例代码。

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
}
}

最佳答案

问题的根本原因最终是双重的:

  • AVAudioSession.sharedInstance().setActive(true)必须叫之前 AVPictureInPictureController被初始化。
  • AVPlayerLayer 的框架尺寸必须具有不大于 16/9 的纵横比(作为单独的错误提交,rdar//8689203)
  • 对于 iPad,视频必须与设备宽度相同(在任何给定方向)。没有单独的 rdar,因为 Apple 已经承认了另一个错误。

  • (上面的例子中不存在第二个问题)
    Apple 已经承认这些错误,并向我报告它们已经/将被修复(雷达实际上导致回复的罕见情况!)

    关于ios - AVPictureInPictureController 在应用程序后台运行时不会自动启动画中画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63739978/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com