gpt4 book ai didi

ios - 在播放来自 UIImagePickerController 的视频之前,AVPlayer 不会播放视频

转载 作者:行者123 更新时间:2023-12-02 01:26:23 25 4
gpt4 key购买 nike

我遇到了一个问题,我在这里没有看到类似的帖子。我有一个 AVPlayerViewController,它可以从我的 Firebase 数据库(不是存储)的路径播放基于视频的视频。视频按照我想要的方式完美播放,但只有当我观看在应用程序其他位置的 UIImagePickerController 中单击的视频时。

例如,AVPlayer 将显示黑色背景(应用程序中的所有 AVPlayer 都会出现这种情况),除非我观看来自UIImagePickerController 与任何其他 View 无关。我不知道从哪里开始。我感谢您的所有帮助和建议!

这是我的 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()
}
}

}

最佳答案

您检查过子 Controller View 的大小吗?

playerController!.view.frame = view.frame 

放入

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

playerController!.view.frame = view.frame
}

或使用约束。

关于ios - 在播放来自 UIImagePickerController 的视频之前,AVPlayer 不会播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60699431/

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