2011-09-07 15 views
13

Sto usando AVPlayer di giocare un flusso dal vivo da Internet utilizzando il seguente codice:iOS AVPlayer Play/Pause problema pulsante

NSString *u = @"http://192.192.192.192:8036"; 
NSURL *url = [NSURL URLWithString:u]; 
radiosound = [[AVPlayer alloc] initWithURL:url]; 
    [radiosound play]; 

E ho un pulsante play:

[radiosound play]; 

e mettere in pausa :

[radiosound pause]; 

il mio problema è che io voglio usare un solo tasto Play/Pause, ma quando io sto usando questo codice

if (radiosound.isPlaying) {   
    [radiosound pause]; 
} else {     
    [radiosound play]; 
} 

La mia app si arresta in modo anomalo, poiché AVPlayer non riconosce "isPlaying".

Qualche consiglio?

risposta

37

AVPlayer non ha una proprietà isPlaying. Utilizzare la proprietà rate (0.0 significa arrestato, 1,0 in riproduzione).

if (radiosound.rate == 1.0) {   
    [radiosound pause]; 
} else {     
    [radiosound play]; 
} 

Potete guardare il riferimento di classe AVPlayerhere.

+0

Alcune persone dicono che sarà ancora 1.0 in modalità aereo anche se in pausa. – openfrog

+2

Probabilmente non è una buona idea confrontare _float_ con _1.0_. Forse __if (radiosound.rate> 0,99) __? – SoftDesigner

+0

@SoftDesigner buon punto, ma AFAICT sia 0.0 che 1.0 sono entrambi precisamente rappresentabili in [punto mobile IEEE-754] (http://www.cprogramming.com/tutorial/floating_point/understanding_floating_point_representation.html). –

5

Dopo alcune ricerche ho scoperto che quando non c'è una connessione di rete, AVPlayer imposta ancora la velocità su 1.0 dopo aver ricevuto un messaggio -play.

Così, ho anche controllare per la CurrentItem e modificato il mio metodo del genere:

-(BOOL)isPlaying 
{ 
    if (self.player.currentItem && self.player.rate != 0) 
    { 
     return YES; 
    } 
    return NO; 
} 

Si prega di condividere la vostra opinione se si pensa che qualcosa non va con questo approccio.

+2

Qual è il punto di verifica per currentItem? In pausa non dovrebbe essere nulla. L'oggetto non va via solo perché si mette in pausa il giocatore. – openfrog