Reproducir video en fondo usando Avplayer

En mi aplicación para iPhone, quiero seguir reproduciendo video cuando la aplicación ingrese en modo de fondo.

Estoy usando AVPlayer y no encuentro ninguna manera de reproducir video en segundo plano. Estaré muy agradecido si alguien puede ayudarme en esto. Gracias

Con sorpresa puedo decir que esto se puede lograr y lo acabo de hacer.

Este método admite todas las posibilidades:

  • Pantalla bloqueada por el usuario;
  • Botón de inicio presionado;
  • Cambiar a otra aplicación.

Siempre que tenga una instancia de AVPlayer con iOS, evitará el locking automático del dispositivo.

Primero necesita configurar la aplicación para que admita el fondo de audio desde el archivo Info.plist agregando en el arreglo UIBackgroundModes el elemento de audio .

Luego ponga su AppDelegate.m en la aplicación - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:

estos metodos

 [[AVAudioSession sharedInstance] setDelegate: self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

y #import

Luego, en su controlador de vista que controla AVPlayer

 -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; } 

y

 - (void)viewWillDisappear:(BOOL)animated { [mPlayer pause]; [super viewWillDisappear:animated]; [[UIApplication sharedApplication] endReceivingRemoteControlEvents]; [self resignFirstResponder]; } 

entonces responde al

 - (void)remoteControlReceivedWithEvent:(UIEvent *)event { switch (event.subtype) { case UIEventSubtypeRemoteControlTogglePlayPause: if([mPlayer rate] == 0){ [mPlayer play]; } else { [mPlayer pause]; } break; case UIEventSubtypeRemoteControlPlay: [mPlayer play]; break; case UIEventSubtypeRemoteControlPause: [mPlayer pause]; break; default: break; } } 

Se necesita otro truco para reanudar la reproducción si el usuario presiona el botón de inicio (en cuyo caso la reproducción se suspende con un fundido de salida).

Cuando controlas la reproducción del video (tengo play: y pause: métodos)

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; 

y

 [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; 

y el método correspondiente que se invocará que iniciará un temporizador y reanudará la reproducción.

 - (void)applicationDidEnterBackground:(NSNotification *)notification { [mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01]; } 

Puedes hacer esta tarea en segundo plano cuando la aplicación está en segundo plano:

1> audio
2> ubicación
3> voip
4> contenido de quiosco
5> accesorio externo
6> bluetooth-central
7> bluetooth-periférico
ver este enlace,

 http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html http://www.rideitdown.com/2012/10/how-to-listen-youtube-videos-in.html 

también esto puede ayudarte: AVPlayer reproduce video en segundo plano

Pruebe este código en su applicationDidEnterBackground :

 UIApplication *app = [UIApplication sharedApplication]; bgTask = 0; backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(backgroundTask) userInfo:nil repeats:YES]; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; 

lo encontré en algún lugar en la stack funciona para mí

También consulte este tutorial que cubre los modos de fondo, incluido el audio de fondo .. http://www.raywenderlich.com/29948/backgrounding-for-ios

Las respuestas anteriores detienen el video por un segundo cuando la aplicación ingresa en segundo plano, pero al usar el método mencionado a continuación, mantiene el video reproduciéndose mientras la aplicación va al fondo sin ningún problema técnico.

Si el elemento actual del AVPlayer muestra video en la pantalla del dispositivo, la reproducción del AVPlayer se pausará automáticamente cuando la aplicación se envíe al fondo. Hay dos formas de evitar esta pausa:

  1. Desactive las pistas de video en el elemento del reproductor (solo contenido basado en archivos).
  2. Elimine AVPlayerLayer de su AVPlayer asociado (establezca la propiedad del jugador AVPlayerLayer en cero).

REFERENCIA

Reproducción de contenido multimedia en segundo plano con AV Foundation en iOS