2016-09-15 100 views
1

我使用以下代码来显示两个不同的视频源作为背景。 “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'的返回类型是'void'而不是'CMTime'。 –

回答

2

经过调查问题首先看看documentation并返回该方法的值。

- (void)seekToTime:(CMTime)time; 

方法所使用的回报void,无法比拟的CMTime

为了解决你的问题是尝试这种解决方案:

首先,你需要订阅你的类发送到表示视频已结束的通知。

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

而不是定义方法来处理此通知。

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

在这种情况下,您正在跟踪视频何时结束,然后再次启动。

+0

不知何故我现在又有了一个bug,我已经更新了这个问题。谢谢! – Victor