2013-07-24 15 views
15

Sto usando questo codice per riprodurre file video utilizzando AVPlayer come faccio a fermare loCome fermare un video in AVPlayer?

[videoView setHidden:NO]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path2 = [documentsDirectory stringByAppendingPathComponent:saveFileName]; 
    NSURL *url1 = [[NSURL alloc] initFileURLWithPath: path2]; 
    videoPlayer = [AVPlayer playerWithURL:url1] ; 
    self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:videoPlayer]; 

    //[self willAnimateRotationToInterfaceOrientation]; 
    avPlayerLayer.frame = videoView.bounds; 
    [self.videoView.layer addSublayer: avPlayerLayer]; 

    [self.videoPlayer play]; 

ho provato questo non funziona

//[self.videoPlayer release]; 

risposta

50

AVPlayer non ha un metodo denominato stop. È possibile pause o impostare rate su 0,0.

+9

PEGGIORE. STRUTTURA. EVER – Osa

13

È possibile mettere in pausa e impostare il valore dell'oggetto AVPlayer su zero.

E nel codice è possibile utilizzare questo:

[self.videoPlayer pause]; 
[self.avPlayerLayer removeFromSuperlayer]; 
self.videoPlayer = nil; 
13

Se non volete impostare il lettore AV a zero, un approccio migliore potrebbe essere:

videoPlayer.replaceCurrentItemWithPlayerItem(nil) 
+2

Questa opzione non è compatibile con Swift. –

+0

Senza fare questo 'replaceCurrentItem..' scopro che networkActivityIndicator non si spegne mai e l'app utilizza molta energia della batteria, anche quando il lettore è stato messo in pausa e impostato su zero. – snakeoil

+0

@HolaSoyEduFelizNavidad, sì lo è. Puoi fare '.replaceCurrentItem (con: nil)' – gbhall

22

solito seekToTime 0.0, quindi metti in pausa. Funziona perfettamente con me. :)

[self.videoPlayer seekToTime:CMTimeMake(0, 1)]; 
[self.videoPlayer pause];