2016-09-15 10 views
1

次のコードを使用して、2つの異なるビデオソースを背景として表示します。 「selectVideo」(SegmentedControl)は、ビデオの選択に使用されます。問題は以下の通りです。再生終了後のビデオ再生

@IBAction func selectVideo(sender: AnyObject) { 
    if self.Controller.selectedIndex == 1 { 
     self.videoBackgroundCustomer() 
    } 

    if self.Controller.selectedIndex == 0 { 
     self.videoBackgroundDriver() 
    } 
} 

    func videoBackgroundDriver() { 
     //Load video background. 
     let videoURL: NSURL = NSBundle.mainBundle().URLForResource("background_video_2", withExtension: "mp4")! 

     player = AVPlayer(URL: videoURL) 
     videoBackground() 
    } 

    //Video background customer 
    func videoBackgroundCustomer() { 
     //Load video background. 
     let videoURL: NSURL = NSBundle.mainBundle().URLForResource("background_video_1", withExtension: "mp4")! 

     player = AVPlayer(URL: videoURL) 
     videoBackground() 
    } 

    //Vieobackground-code part 2, provides with less code. 
    func videoBackground() { 
     player?.actionAtItemEnd = .None 
     player?.muted = true 

     let playerLayer = AVPlayerLayer(player: player) 
     playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
     playerLayer.zPosition = -1 

     playerLayer.frame = view.frame 

     view.layer.addSublayer(playerLayer) 

     player?.play() 

     //call loop video 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.loopVideo), name: AVPlayerItemDidPlayToEndTimeNotification, object: player!.currentItem) 
    } 

    //Loop video 
    func loopVideo() { 
     player?.seekToTime(kCMTimeZero) 
     player?.play() 
    } 

問題:ビデオの再起動最後のビデオが終了している必要があります。最新の動画が終了した時点ではありません。

最後に再生された動画の再生が終了した後、それを繰り返し再生するにはどうすればよいですか?ありがとう

+0

メソッド 'seekToTime'の戻り値の型は' CMTime'ではなく 'void'です。 –

答えて

2

問題の調査の後、まずdocumentationとメソッドの戻り値を見てください。

まずあなたがしているクラスをサブスクライブする必要があります:あなたはリターンvoidを使用していると、あなたのことを解決するためCMTime

と比較することができませんでした

- (void)seekToTime:(CMTime)time; 

方法は、問題は、このソリューションを試してみてくださいねそのビデオが終了したことを示す通知に転送します。

NSNotificationCenter.defaultCenter().addObserver(self,selector: "itemDidReachEnd:", 
    name: AVPlayerItemDidPlayToEndTimeNotification, 
    object: player.currentItem) 

この通知を処理するメソッドを定義します。

func itemDidReachEnd(notification: NSNotification) { 
    player.seekToTime(kCMTimeZero) 
    player.play() 
} 

この場合、ビデオの終了時にそれを追跡し、もう一度開始します。

+0

何とか別のバグがありました。質問を更新しました。ありがとう! – Victor

関連する問題