我遇到了一个问题,但在这里还没有看到类似的帖子。我有一个
例如,
以下是
AVPlayerViewController
,它根据来自我的Firebase Database(而不是Storage)的路径播放视频。视频按照我想要的方式完美地播放,但只有当我在应用程序的其他位置观看被点击的UIImagePickerController
中的视频时才会如此。例如,
AVPlayer
将显示黑色背景(所有AVPlayer
都会出现这种情况),除非我从UIImagePickerController
观看与任何其他视图无关的视频。我不知道从哪里开始解决这个问题。感谢您的所有帮助和建议!以下是
AVPlayerViewController
的示例代码:import UIKit
import AVFoundation
import AVKit
class VideoView: UIViewController {
private var videoURL: URL
var player: AVPlayer?
var playerController : AVPlayerViewController?
init(videoURL: URL) {
self.videoURL = videoURL
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.gray
player = AVPlayer(url: videoURL)
playerController = AVPlayerViewController()
guard player != nil && playerController != nil else {
return
}
playerController!.showsPlaybackControls = false
playerController!.player = player!
self.addChild(playerController!)
self.view.addSubview(playerController!.view)
playerController!.view.frame = view.frame
NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.player!.currentItem)
let cancelButton = UIButton(frame: CGRect(x: 10.0, y: 10.0, width: 30.0, height: 30.0))
cancelButton.setImage(#imageLiteral(resourceName: "cancel"), for: UIControl.State())
cancelButton.addTarget(self, action: #selector(cancel), for: .touchUpInside)
view.addSubview(cancelButton)
// Allow background audio to continue to play
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.ambient)
} catch let error as NSError {
print(error)
}
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch let error as NSError {
print(error)
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
player?.play()
}
@objc func cancel() {
dismiss(animated: true, completion: nil)
}
@objc fileprivate func playerItemDidReachEnd(_ notification: Notification) {
if self.player != nil {
self.player!.seek(to: CMTime.zero)
self.player!.play()
}
}
}
AVPlayer
会显示黑色背景。否则,播放器可以从UIImagePickerViewController
中选择视频并正常播放。我认为我是正确的吧? - Ram