Reproduzca música en segundo plano con AVAudioplayer

Quiero reproducir música incluso si la aplicación está en segundo plano. Revisé todos los enlaces de stackoverflow pero ninguno funcionó. Por favor ayúdenme necesitan hacerlo hoy.

Yo había usado el siguiente código:

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Day At The Beach" ofType: @"mp3"]; NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; NSError *error; playerTemp = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; playerTemp.numberOfLoops = 0; AudioSessionSetActive(true); [playerTemp play]; 

Resolví esta pregunta al referirme a las tareas de fondo de la aplicación iOS

y hacer algunos cambios en el archivo .plist de nuestra aplicación …

Actualizar

escribe este código en la vista de tu controlador sí carga un método como este

 - (void)viewDidLoad { NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"in-the-storm" ofType:@"mp3"]]; AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [audioPlayer play]; [super viewDidLoad]; } 

Solo quería agregar una nota a la respuesta de Mehul. Esta línea:

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

es realmente muy importante. Utilicé otros tutoriales para poner en funcionamiento mi AVAudioPlayer. Todo funcionó bien, excepto que mi audio no START si la aplicación estaba en segundo plano. Para aclarar, mi audio estaba bien si ya se estaba reproduciendo cuando la aplicación pasó a segundo plano … pero no se inició si la aplicación ya estaba en segundo plano.

Agregar la línea de código anterior lo hizo para que mi audio se iniciara incluso si la aplicación estaba en segundo plano.

Necesita configurar ‘audio’ como uno de sus UIBackgroundModes en Info.plist. Apple tiene documentación sobre el problema .

Puede usar MPMoviePlayerController incluso para reproducir películas de audio en solitario. Si le gusta, lea esta detallada P & R técnica de la Biblioteca de Apple:

Preguntas y respuestas técnicas sobre la biblioteca para desarrolladores de iOS QA1668

Paso 1

Realice los siguientes cambios en info.plist

  1. La aplicación no se ejecuta en segundo plano: NO

  2. Modos de fondo requeridos

    item0 :App plays audio or streams audio/video using AirPlay

Paso 2 No olvides agregar lo siguiente en el archivo MainViewController.h

  1. #import < 'AVFoundation/AVAudioPlayer.h>
  2. @interface MainViewController:< 'AVAudioPlayerDelegate>

  3. AVAudioPlayer *H_audio_player;

Paso 3 Agregue el siguiente código dentro de la acción de reproducción de su clase MainViewController .

 NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d-%d",C_CID, C_SID] ofType:@"mp3"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; H_audio_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil]; H_audio_player.delegate = self; H_audio_player.numberOfLoops = -1; 

Escriba esta línea para hacer plist para ejecutar en segundo plano …

 UIBackgroundModes  audio  

Escribe este código Donde quieras usar

 AVAudioPlayer* audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:self.urlForConevW error:&error]; audioPlayer.delegate = self; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; audioPlayer.numberOfLoops = 1; [audioPlayer play]; 

También es importante aquí si está utilizando MPMusicPlayerController : Debe usar:

 [MPMusicPlayerController iPodMusicPlayer] 

Y no

 [MPMusicPlayerController applicationMusicPlayer] 

Además, si no quieres que tu aplicación stop music que se estaba reproduciendo cuando se inicia la aplicación, mira aquí: AVAudioPlayer apaga el iPod: ¿cómo funciona?

Utilizo el siguiente código. Funciona para mí, e invoco el botón clic del método de la instancia del reproductor de audio.

 NSError *error; NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"]]; self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; [[AVAudioSession sharedInstance] setActive:YES error: &error]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self.player prepareToPlay]; 

De todas las respuestas falta este código para controlar al jugador cuando el usuario está despertando el dispositivo:

 - (BOOL)canBecomeFirstResponder { return YES; } - (void)remoteControlReceivedWithEvent:(UIEvent *)event { switch (event.subtype) { case UIEventSubtypeRemoteControlPlay: [_audioPlayer play]; break; case UIEventSubtypeRemoteControlPause: [_audioPlayer pause]; break; default: break; } } 

Y tienes todas estas opciones:

 UIEventSubtypeRemoteControlPlay = 100, UIEventSubtypeRemoteControlPause = 101, UIEventSubtypeRemoteControlStop = 102, UIEventSubtypeRemoteControlTogglePlayPause = 103, UIEventSubtypeRemoteControlNextTrack = 104, UIEventSubtypeRemoteControlPreviousTrack = 105, UIEventSubtypeRemoteControlBeginSeekingBackward = 106, UIEventSubtypeRemoteControlEndSeekingBackward = 107, UIEventSubtypeRemoteControlBeginSeekingForward = 108, UIEventSubtypeRemoteControlEndSeekingForward = 109, 

Si incluso después de configurar el audio como uno de sus UIBackgroundModes en la lista, el audio se detiene al ir al fondo, intente setting application's audio session para media playback .

Aquí está la referencia relacionada: https://developer.apple.com/library/ios/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Introduction/Introduction.html

Aquí te explicamos cómo se verá el código:

 NSError *activationError = nil; [[AVAudioSession sharedInstance] setActive: YES error: &activationError]; NSError*setCategoryError = nil; [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; 

Para reproducir tu audio en segundo plano

Paso 1: solo agrega tu info.plist haz una matriz enter image description here

paso 2 :

 - (void)applicationDidEnterBackground:(UIApplication *)application { __block UIBackgroundTaskIdentifier task = 0; task=[application beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"Expiration handler called %f",[application backgroundTimeRemaining]); [application endBackgroundTask:task]; task=UIBackgroundTaskInvalid; }]; } 

paso 3 :

 NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"iNamokar" ofType:@"mp3"]; NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath]; AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; [[AVAudioSession sharedInstance] setActive: YES error: nil]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [player prepareToPlay]; [self.player play]; 

Desde el código de muestra de Apple: Mezclador de audio (MixerHost)

 // If using a nonmixable audio session category, as this app does, you must activate reception of // remote-control events to allow reactivation of the audio session when running in the background. // Also, to receive remote-control events, the app must be eligible to become the first responder. - (void) viewDidAppear: (BOOL) animated { [super viewDidAppear: animated]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; } 

Creo que los eventos de control remoto no son necesarios para el siguiente caso:

 AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(value), &value);