视频无法在启动画面上播放

时间:2016-02-18 10:58:40

标签: ios iphone mpmovieplayercontroller splash-screen

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

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

4 个答案:

答案 0 :(得分:1)

一个解决方案是显示Splash(IMG),而不是播放您喜欢的视频。

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

  

你无法摆脱静态飞溅图像。虽然它显示,所以   操作系统正在加载应用程序并实例化其中的内容   准备打电话给你的UIApplicationDelegate。所以你所能做的就是   不使用闪光灯(黑屏几秒钟)或制作电影   从显示的启动画面开始,所以看起来像静态   图像会突然变得有活力。

     

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

     

显示启动画面(静态图像)。应用程序已加载。你看   UIImageView,也显示启动画面。最重要的是   透明电影播放器​​。电影播放器​​终于加载了这一举动   开始玩它。至少在理论上,这应该会产生这种效果   静态图像突然开始制作动画。

     

但如果你根本不使用闪屏(许多游戏都这样做),   然后电影播放器​​显示黑屏并不重要   起初,你不会注意到。

     

关于在UIImageView中显示启动画面:不幸的是,   你必须测试界面旋转并手动加载图像,   无法查询显示的启动画面。如果你只是   支持一个界面方向(再次,很多游戏都这样做)你   当然没有这个问题。

答案 1 :(得分:1)

关于第二个问题,您可以在SplashScreenVC中使用AVPlayer。在swift中会是这样的:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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