Tengo un AVQueuePlayer
(que obviamente se extiende a AVPlayer
) que carga una lista de reproducción de transmisión de audio. La transmisión está funcionando bien, pero me gustaría tener un indicador de actividad para mostrar que se está cargando el audio del usuario. El problema es que parece que no puedo encontrar ninguna Notificación en el AVQueuePlayer
(o AVPlayer
) que indique cuándo el buffer de audio ha terminado de cargarse/está listo para jugar (ni parece haber un método de delegado). ¿Alguna idea?AVQueuePlayer/AVPlayer ¿Está cargando la notificación?
6
A
Respuesta
26
Deberá utilizar KVO para hacerlo.
Para cada elemento que se agrega a la cola, es posible que los observadores configuración como esta:
item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://somefunkyurl"]] retain];
[item_ addObserver:self forKeyPath:@"status" options:0 context:nil];
[item_ addObserver:self forKeyPath:@"playbackBufferEmpty" options:0 context:nil];
Ahora se puede evaluar el estado de ese elemento en el método de observador;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([object isKindOfClass:[AVPlayerItem class]])
{
AVPlayerItem *item = (AVPlayerItem *)object;
//playerItem status value changed?
if ([keyPath isEqualToString:@"status"])
{ //yes->check it...
switch(item.status)
{
case AVPlayerItemStatusFailed:
NSLog(@"player item status failed");
break;
case AVPlayerItemStatusReadyToPlay:
NSLog(@"player item status is ready to play");
break;
case AVPlayerItemStatusUnknown:
NSLog(@"player item status is unknown");
break;
}
}
else if ([keyPath isEqualToString:@"playbackBufferEmpty"])
{
if (item.playbackBufferEmpty)
{
NSLog(@"player item playback buffer is empty");
}
}
}
}
Cuestiones relacionadas
- 1. Spork.prefork está cargando app/modelos/*
- 2. yii clase no está cargando
- 3. ¿Cómo puedo verificar si el teléfono Android se está cargando?
- 4. Pepino (rieles 2) no está cargando jQuery
- 5. Notificación en Phonegap mientras la aplicación no se está ejecutando
- 6. Javascript no está cargando datos binarios
- 7. jQuery no está cargando en el iPhone
- 8. commons-net ftp está cargando archivos dañados
- 9. Detectar si el dispositivo se está cargando
- 10. Codeigniter no está cargando CI súper objeto
- 11. getResourceAsStream no está cargando recursos en la aplicación web
- 12. La Orden de asambleas que se está cargando
- 13. estado de la batería no se está cargando
- 14. Android - Mantener la notificación estable en la barra de notificación
- 15. Notificación de inserción mientras la aplicación no se está ejecutando - launchOptions dictionary está vacío
- 16. NSUserNotificationCenter descartar la notificación
- 17. Cargando jQuery sobre la marcha
- 18. Recuperar datos de notificación de notificación
- 19. Cargando caché cuando está fuera de línea en Android Webview
- 20. página ASP.NET no se está cargando estilos CSS
- 21. Visual Studio no está cargando mi visualizador de depuración
- 22. mod_rewrite no está cargando archivos css y js
- 23. hibernate getId está cargando el objeto aunque es flojo
- 24. Android Mapview no está cargando mosaicos en HTC Desire?
- 25. ¿Por qué IE8 no está cargando mis archivos eot?
- 26. En Emacs, ¿cómo puedo saber qué paquete está cargando tramp?
- 27. Ubuntu AMI no está cargando datos de usuario
- 28. Reemplazar parcialmente el contenido de WebView mientras se está cargando
- 29. ie8 javascript no se está ejecutando o cargando
- 30. Cargando imagen gif mientras jQuery ajax se está ejecutando
También se puede observar la propiedad de los objetos playbackBufferEmpty AVPlayerItem para detectar si/cuando el búfer se vacía durante la reproducción para que pueda mostrar un indicador de actividad o una advertencia 'buffering'. – reddersky
@virorum ¡Buen punto, agregué ese a mi respuesta - ty! – Till
Siempre podría subir mi comentario si le gustó ;-) – reddersky