gpt4 book ai didi

swift - AVPlayerViewController 视频适用于 iOS 11、12,但不适用于 iPhone 11 的 iOS 13

转载 作者:行者123 更新时间:2023-11-30 10:34:49 25 4
gpt4 key购买 nike

我收到一个奇怪的错误,我的背景视频在 iOS 13 iPhone 8iPhone 8+ 上按预期播放>iPhone 11 模拟器(和设备),但无法在 iOS 13 iPhone 11 ProiPhone 11 Pro Max 模拟器上运行。

我在单独的登陆页面 View Controller 中引用了下面的VideoSplashViewController

VideoSplashViewController

import UIKit
import MediaPlayer
import AVKit

public enum ScalingMode {
case resize
case resizeAspect
case resizeAspectFill
}

open class VideoSplashViewController: UIViewController {

fileprivate let moviePlayer = AVPlayerViewController()
fileprivate var moviePlayerSoundLevel: Float = 1.0
open var contentURL: URL? {
didSet {
setMoviePlayer(contentURL!)
}
}

open var videoFrame: CGRect = CGRect()
open var startTime: CGFloat = 0.0
open var duration: CGFloat = 0.0
open var backgroundColor: UIColor = UIColor.white {
didSet {
view.backgroundColor = backgroundColor
}
}
open var sound: Bool = true {
didSet {
if sound {
moviePlayerSoundLevel = 1.0
}else{
moviePlayerSoundLevel = 0.0
}
}
}
open var alpha: CGFloat = CGFloat() {
didSet {
moviePlayer.view.alpha = alpha
}
}
open var alwaysRepeat: Bool = true {
didSet {
if alwaysRepeat {
NotificationCenter.default.addObserver(self,
selector: #selector(VideoSplashViewController.playerItemDidReachEnd),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
object: moviePlayer.player?.currentItem)
}
}
}
open var fillMode: ScalingMode = .resizeAspectFill {
didSet {
switch fillMode {
case .resize:
moviePlayer.videoGravity = AVLayerVideoGravity(rawValue: AVLayerVideoGravity.resize.rawValue)
case .resizeAspect:
moviePlayer.videoGravity = AVLayerVideoGravity(rawValue: AVLayerVideoGravity.resizeAspect.rawValue)
case .resizeAspectFill:
moviePlayer.videoGravity = AVLayerVideoGravity(rawValue: AVLayerVideoGravity.resizeAspectFill.rawValue)
}
}
}

override open func viewDidAppear(_ animated: Bool) {

}

var coverView = UIView()

override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)


view.backgroundColor = UIColor.white

moviePlayer.view.frame = videoFrame
moviePlayer.view.backgroundColor = UIColor.white

moviePlayer.showsPlaybackControls = false
view.addSubview(moviePlayer.view)
view.sendSubviewToBack(moviePlayer.view)

coverView.frame = CGRect.init(x: 0, y: 0, width: 500, height: 500)
coverView.backgroundColor = UIColor.white
coverView.layer.zPosition = 11;
coverView.isUserInteractionEnabled = false
moviePlayer.view.addSubview(coverView)

UIView.animate(withDuration: 2) {
self.coverView.backgroundColor = UIColor(hue: 0.5194, saturation: 0.4, brightness: 0.94, alpha: 0.1)
}

_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default, options: .mixWithOthers)

}

override open func viewWillDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
NotificationCenter.default.removeObserver(self)
moviePlayer.view.backgroundColor = UIColor.white
}

fileprivate func setMoviePlayer(_ url: URL){
let videoCutter = VideoCutter()
videoCutter.cropVideoWithUrl(videoUrl: url, startTime: startTime, duration: duration) { (videoPath, error) -> Void in
if let path = videoPath as URL? {
DispatchQueue.global().async {
DispatchQueue.main.async {
self.moviePlayer.player = AVPlayer(url: path)
self.moviePlayer.player?.play()
self.moviePlayer.player?.volume = self.moviePlayerSoundLevel
//added to mute
self.moviePlayer.player?.isMuted = true
}
}
}
}
}

override open func viewDidLoad() {
super.viewDidLoad()
moviePlayer.view.backgroundColor = UIColor.white
}

override open func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

@objc func playerItemDidReachEnd() {
moviePlayer.player?.seek(to: CMTime.zero)
moviePlayer.player?.play()
}
}

这是在我的主着陆页 View 上调用的代码。

在继承VC的单独VideoSplashViewController中调用的代码

    func setupVideoBackground() {
let url = URL(fileURLWithPath: Bundle.main.path(forResource: "timelapse_clouds_compress", ofType: "mp4")!)

// setup layout
videoFrame = self.view.frame
fillMode = .resizeAspectFill
alwaysRepeat = true
sound = true
startTime = 2.0
alpha = 0.8

contentURL = url
view.isUserInteractionEnabled = true
}

我怀疑这是模拟器问题,因为我在 XCode 中没有看到任何警报或错误,并且视频在真正的 iPhone 8+ iOS 13 上按预期工作。很快就会尝试在真正的 iPhone 11 Pro Max 上进行测试,但感谢任何帮助!

最佳答案

该视频在实际的 iPhone 11 Pro 和 iPhone 11 Pro Max 设备上效果良好。这是模拟器错误。

关于swift - AVPlayerViewController 视频适用于 iOS 11、12,但不适用于 iPhone 11 的 iOS 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58280571/

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