2016-02-18 2 views
0

Я пытаюсь показать заставку с видео. Для этого у меня есть два вопроса:Видео не воспроизводится на заставке

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

ответ

0

Прежде всего убедитесь, что в закладке Общие в Launch Screen File Main.storyboard выбран потому, что вы используете ViewController в целях выплеска.

0

Невозможно воспроизвести видео на экране запуска. Что вам нужно сделать, так это взять первый кадр вашего видео в качестве стартового изображения или поместить в панель запуска экрана запуска. Напишите отдельный контроллер просмотра, который воспроизводит ваше фактическое видео и загружается из раскадровки. Установите эту панель рассказов в качестве основного интерфейса в общей вкладке проекта Xcode.

+0

Я использую контроллер отображения заставки для отображения видео. IN appDelegate i am splashScreenVC как контроллер rootView –

+0

Хорошо. Где вы вызываете playVideo()? –

+0

Я ОБНОВЛЯЮТ ВОПРОСЫ. ПОЖАЛУЙСТА, ВИДИТЕ –

1

Одним из решений для вас является всплеск (IMG), а не воспроизведение понравившегося вам видео.

Для воспроизведения видео в скор использования AV Foundation https://developer.apple.com/av-foundation/

Вы не можете избавиться от статического изображения заставки. Пока показано, что операционная система загружает приложение и создает экземпляр, пока он не станет , готовым вызвать ваш UIApplicationDelegate. Так что все, что вы можете сделать, это либо не использовать всплеск (черный экран в течение нескольких секунд), либо сделать ваш фильм начните именно с показанного заставки, чтобы он выглядел как статическое изображение внезапно одушевлялось.

Чтобы избавиться от черного экрана во время загрузки фильма, вы можете попробовать сделать плеер прозрачным и иметь UIImageView за игроком , который отображает всплеск изображения. Поведение будет следующим:

Отображается экран заставки (статическое изображение). Загружается приложение. Вы видите UIImageView, также показывающий заставку. Наверху это прозрачный проигрыватель фильмов . Фильм-плеер, наконец, загрузил ход, и начинает его играть. По крайней мере теоретически это должно вызвать эффект , что статическое изображение внезапно начинает оживлять.

Но если не использовать заставку на всех (много игр сделать это), , то это не имеет значения, что видеоплеер показывает черный экран сначала, вы бы не заметили ,

Что касается показывать заставку в UIImageView: к сожалению, вы должны проверить вращение интерфейса и загрузить изображение вручную, нет никакого способа запроса, который брызнуть экран был показан. Если вы только поддерживаете одну ориентацию интерфейса (опять же, много игр делают это) у вас , нет этой проблемы, конечно.

1

О вашем втором вопросе вы можете использовать AVPlayer внутри вашего SplashScreenVC. В быстром будет что-то вроде этого:

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() 
} 
Смежные вопросы