5

Estoy usando xcode 4.2 y creando una aplicación para el iPhone, y tengo una vista que cuando se abre reproduce una transmisión de audio.
Lo que intento lograr es que la aplicación continúe reproduciéndose incluso si entra en segundo plano.
He intentado cualquier posible solución que encontré en stackoverflow o en otro lugar (y hay muchas disponibles), pero no puedo hacer que funcione. Cuando la aplicación ingresa en segundo plano, el audio se detiene, cuando abro la aplicación nuevamente, el audio continúa.iphone - reproducir transmisión de audio en el fondo

En mis ia Info.plist han establecido 2 filas:
Required Background Modes -> App plays audio &
Application does not run in background -> NO

¿Qué me falta? ¿Qué más se necesita para seguir reproduciendo el audio en el fondo?
Gracias de antemano.

EDIT: Veo muchas respuestas sobre el tema, sugiero el uso de AVAudio Framework. ¿Hay alguna posibilidad de que MPMoviePlayerController no pueda reproducir la transmisión en segundo plano? ¿Debo cambiar a AVAudio?

EDIT 2:
Ok, parece que es demasiado complejo para mí lograrlo. Le doy el código exacto, espero que esto ayude.

RadioStreamer.h

#import <UIKit/UIKit.h> 
#import "MediaPlayer/MediaPlayer.h" 
@interface RadioStreamer : UIViewController { 
    MPMoviePlayerController *player; 
    IBOutlet UIButton *playButton; 
    IBOutlet UIButton *pauseButton; 
} 
@property (nonatomic, retain) MPMoviePlayerController *player; 
@property (nonatomic, retain) IBOutlet UIButton *playButton; 
@property (nonatomic, retain) IBOutlet UIButton *pauseButton; 

- (IBAction)playButtonPressed:(id)button; 
- (IBAction)pauseButtonPressed:(id)button; 
- (void) playAudio; 
- (void) pauseAudio; 
@end 

RadioStreamer.m

#import "RadioStreamer.h" 
#import "tabbartestAppDelegate.h" 

@implementation RadioStreamer 
@synthesize player; 
@synthesize playButton; 
@synthesize pauseButton; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    return self; 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [email protected]""; 
    // Do any additional setup after loading the view from its nib. 

    if (!self.player) { 
     player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://s6.onweb.gr:8006/listen.pls"]]; 
     player.movieSourceType = MPMovieSourceTypeStreaming; 
     player.view.frame = CGRectMake(55, 180, 200, 30); 
     player.backgroundView.backgroundColor = [UIColor clearColor]; 
     player.view.backgroundColor = [UIColor clearColor]; 
     [self.view addSubview:player.view]; 
     [player play]; 
    } 
} 

- (void) playAudio { 
    if (player.playbackState != MPMoviePlaybackStatePlaying){ 
     [player play]; 
    } 
} 

- (void) pauseAudio { 
    if (player.playbackState == MPMoviePlaybackStatePlaying) { 
     [player pause]; 
    } 
} 

- (IBAction)playButtonPressed:(id)button { 
    [self playAudio]; 
} 

- (IBAction)pauseButtonPressed:(id)button { 
    [self pauseAudio]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 


- (void)dealloc { 
    [self.player release]; 
    [self.playButton release]; 
    [self.pauseButton release]; 
    self.player = nil; 
    self.playButton = nil; 
    self.pauseButton = nil; 
} 

@end 
+0

posible duplicado de [iOS 5 - reproducir el archivo de audio en el fondo cuando se inicia la aplicación] (http://stackoverflow.com/questions/9199095/ios-5-play-audio-file-in-the-background -cuando-la-aplicación-se-lanzó) –

+0

Gracias Parth. En este Q se usa AVAudioPlayer, no MPMoviePlayerController. ¿Crees que no hay diferencia? – CrisDeBlonde

+0

La pregunta es la misma .. El único enfoque es diferente. Puedes cambiar tu enfoque, si eso funciona para ti. –

Respuesta

6

Compruebe su configuración de sesión de audio que podría necesitar un poco de atención adicional.

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback 
             error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES 
            error:nil]; 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
+0

Hola, gracias por molestarme con mi pregunta. ¿Qué tiene que ver AVAudioSession con MPMoviePlayerController? ¿Puedes explicar por favor? De todos modos, agregar tu código no hizo ninguna diferencia. – CrisDeBlonde

+0

@CrisDeBlonde, debería verificar la documentación de AudioSession. – Till

+1

Finalmente parece ser la solución, pero por alguna razón, en el simulador no se reproduce en segundo plano. Sin embargo, probarlo en un dispositivo funciona como un encanto. – CrisDeBlonde

Cuestiones relacionadas