objective-c - seguir - reproducir youtube en segundo plano
Reproduzca música en segundo plano con AVAudioplayer (12)
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,
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];
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);
Escriba esta línea para hacer plist para ejecutar en segundo plano ...
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
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];
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
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];
}
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];
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.
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];
Para reproducir tu audio en segundo plano
Paso 1: solo agrega tu info.plist haz una matriz
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];
Paso 1
Realice los siguientes cambios en info.plist
La aplicación no se ejecuta en segundo plano: NO
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
-
#import <''AVFoundation/AVAudioPlayer.h>
@interface MainViewController:<''AVAudioPlayerDelegate>
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;