视频未在启动屏幕上播放

问题描述 投票:0回答:4

我正在尝试用视频显示启动画面。为此我有两个疑问:

  1. 我创建了闪屏视图控制器并在应用程序启动时加载它。但在我的闪屏 VC 显示任何修复之前,白屏会显示几秒钟?
  2. 我在其上显示的视频仅显示黑屏。我无法猜测我做错了什么。下面是它的代码。

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    
    let vc = SplashScreenVC(nibName: "SplashScreenVC", bundle: nil)
    let rootViewController = UINavigationController(rootViewController: vc)
    self.window?.rootViewController = rootViewController
    self.navigationController?.navigationBarHidden = true
    self.window?.makeKeyAndVisible()
    
    // Override point for customization after application launch.
    return true
    

    }

    class SplashScreenVC: UIViewController {
    
    override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBarHidden = true
        playVideo()
    }
    
    func playVideo() {
    
      let moviePath = NSBundle.mainBundle().pathForResource("animationVideo", ofType: "mp4")
      let movieUrl = NSURL.fileURLWithPath(moviePath!)
      let moviePlayer : MPMoviePlayerController = MPMoviePlayerController(contentURL: movieUrl)
      moviePlayer.prepareToPlay()
      let vV = self.view.viewWithTag(SplashScreenUITags.videoView.rawValue)! as UIView
      moviePlayer.controlStyle = MPMovieControlStyle.None
      moviePlayer.scalingMode = MPMovieScalingMode.Fill
      moviePlayer.movieSourceType  = MPMovieSourceType.File;
      moviePlayer.view.frame = vV.bounds
    
      vV.addSubview(moviePlayer.view)
      moviePlayer.play()
    
      NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("moviePlayBackDidFinish:"), name: MPMoviePlayerPlaybackDidFinishNotification, object: moviePlayer)
    
    }
    }
    
ios iphone mpmovieplayercontroller splash-screen
4个回答
1
投票

关于你的第二个问题,你可以在 SplashScreenVC 中使用 AVPlayer。很快就会是这样的:

var player: AVPlayer?

override func viewDidLoad() {
   super.viewDidLoad()

   loadVideo()
}

private func loadVideo() {

    //this line is important to prevent background music stop
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
    } catch { }

    let path = NSBundle.mainBundle().pathForResource("your path", ofType:"mp4")

    player = AVPlayer(URL: NSURL(fileURLWithPath: path!))
    let playerLayer = AVPlayerLayer(player: player)

    playerLayer.frame = self.view.frame
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    playerLayer.zPosition = -1

    self.view.layer.addSublayer(playerLayer)

    player?.seekToTime(kCMTimeZero)
    player?.play()
}

1
投票

为您提供的一个解决方案是显示启动画面 (IMG),然后播放您喜欢的视频。

要快速播放视频,请使用 AV Foundation https://developer.apple.com/av-foundation/

您无法摆脱静态启动图像。如图所示,操作系统正在加载应用程序并实例化内容,直到准备好调用 UIApplicationDelegate。因此,您所能做的就是要么不使用启动画面(黑屏几秒钟),要么让您的电影完全按照显示的启动画面开始,这样静态图像看起来就会突然动画化。

要在电影加载时摆脱黑屏,您可以尝试使播放器透明,并在播放器后面有一个 UIImageView 来显示启动图像。行为将是这样的:

显示启动画面(静态图像)。应用程序已加载。您会看到 UIImageView,还显示启动屏幕。最上面是透明的电影播放器。电影播放器终于加载了动作并开始播放。至少在理论上,这应该会导致静态图像突然开始动画的效果。

但是,如果您根本不使用启动画面(很多游戏都这样做),那么电影播放器一开始显示黑屏并不重要,您也不会注意到。

关于在 UIImageView 中显示启动屏幕:不幸的是,您必须测试界面旋转并手动加载图像,无法查询显示了哪个启动屏幕。如果您只支持一种界面方向(同样,很多游戏都这样做),那么您当然不会遇到这个问题。


0
投票

首先确保在“启动屏幕文件”的“常规”选项卡中选择“Main.storyboard”,因为您正在使用 ViewController 作为启动视图。


0
投票

无法在启动屏幕中播放视频。您所要做的是将视频的第一帧作为启动图像或放入启动屏幕脚本中。编写单独的视图控制器来播放实际视频并从故事板加载。在 Xcode 项目的常规选项卡中将此故事板设置为主界面。

© www.soinside.com 2019 - 2024. All rights reserved.