2014-05-06 12 views
16

Tôi đã xem qua các tài liệu AVPlayerItemAVPlayer và dường như không có bất kỳ cuộc gọi lại nào khi mục được phát xong. Tôi đã hy vọng rằng sẽ có một số loại gọi lại đại biểu mà chúng tôi có thể sử dụng hoặc rằng AVPlayerActionAtItemEnd sẽ cung cấp một hành động tùy chỉnh để chúng tôi viết.Làm thế nào để phát hiện khi một AVPlayerItem được chơi xong?

Làm cách nào tôi có thể tìm ra cách phát hiện khi AVPlayer chơi xong một mục?

Trả lời

38

Sử dụng NSNotification để cảnh báo khi quá trình phát lại kết thúc.

Đăng ký nhận thông báo:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerItem]; 

Phương pháp để gọi khi thực hiện xong:

-(void)itemDidFinishPlaying:(NSNotification *) notification { 
    // Will be called when AVPlayer finishes playing playerItem 
} 
+0

bạn có thể sử dụng '[avPlayer currentItem]' nếu bạn sử dụng AVPlayerViewController – abhi1992

5

Swift-i-fied (phiên bản 3)

class MyVideoPlayingViewController: AVPlayerViewController { 

    override func viewDidLoad() { 
     // Do any additional setup after loading the view. 
     super.viewDidLoad() 

     let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "MyVideo", 
                    ofType: "mp4")!) 
     player = AVPlayer(url: videoURL) 

     NotificationCenter.default.addObserver(self, 
              selector: #selector(MyVideoPlayingViewController.animationDidFinish(_:)), 
              name: .AVPlayerItemDidPlayToEndTime, 
              object: player?.currentItem) 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     player?.play() 
    } 

    func animationDidFinish(_ notification: NSNotification) { 
     print("Animation did finish") 
    } 

    deinit { 
     NotificationCenter.default.removeObserver(self) 
    } 

} 
+0

Tốt câu trả lời nhưng hãy chắc chắn để gọi removeObserver (_: Tên: đối tượng :) trước khi quan sát hoặc bất kỳ đối tượng quy định tại addObserver: selector: Tên: đối tượng : được deallocated. – pierre23

0

Đây là cách tôi đã làm nó.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:AVPlayerItemDidPlayToEndTimeNotification object:player.currentItem]; 


- (void)movieFinishedCallback:(NSNotification*)aNotification 
{ 
    // [self dismissViewControllerAnimated:YES completion:Nil]; 
} 
Các vấn đề liên quan