2011-09-07 21 views
13

estoy usando AVPlayer jugar una transmisión en vivo a través de Internet utilizando el siguiente código:iOS AVPlayer Reproducir/Pausa tema botón

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

Y tengo un botón de reproducción:

[radiosound play]; 

y pausa :

[radiosound pause]; 

Mi problema es que quiero utilizar sólo un botón de reproducción/pausa, pero cuando estoy usando el código

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

Mi aplicación se cuelga, porque AVPlayer no reconoce "isPlaying".

¿Algún consejo?

Respuesta

37

AVPlayer no tiene una propiedad de isPlaying. Use la propiedad rate (0.0 significa parado, 1.0 jugando).

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

Usted puede mirar en el AVPlayer referencia here clase.

+0

Algunas personas dicen que seguirá siendo 1.0 en modo avión incluso si está en pausa. – openfrog

+2

Probablemente no sea una buena idea comparar _float_ con _1.0_. Tal vez __si (tasa de radiación.n> 0.99) __? – SoftDesigner

+0

@SoftDesigner buen punto, pero tanto AFAICT 0.0 como 1.0 son representables con precisión en [punto flotante IEEE-754] (http://www.cprogramming.com/tutorial/floating_point/understanding_floating_point_representation.html). –

5

Después de algunas investigaciones descubrí que cuando no hay conexión a la red, AVPlayer aún establece la velocidad en 1.0 después de recibir un mensaje -play.

Por lo tanto, yo también para comprobar la currentItem y modificado mi método así:

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

Por favor dé su opinión si cree que algo está mal con este enfoque.

+2

¿Cuál es el punto de comprobar currentItem? En pausa, no debería ser nulo. El artículo no desaparece solo porque detiene al jugador. – openfrog