iphone - воспроизведение аудиопотока в фоновом режиме

Я использую xcode 4.2 и создаю приложение для iphone, и у меня есть представление, что при открытии воспроизводится аудиопоток.
Я пытаюсь добиться того, чтобы приложение продолжало играть, даже если оно переходит в фоновый режим.
Я пробовал любое возможное решение, которое я нашел в stackoverflow или где-либо еще (и их много), но не могу заставить его работать. Когда приложение переходит в фоновый режим, звук останавливается, когда я снова открываю приложение, звук продолжается.

В моем Info.plist я установил 2 строки:
Требуемые фоновые режимы -> Приложение воспроизводит звук и
Приложение не работает в фоновом режиме -> НЕТ

Что я упустил? Что еще нужно, чтобы продолжать воспроизводить звук в фоновом режиме?
Заранее спасибо.

РЕДАКТИРОВАТЬ: Я вижу много ответов на этот вопрос, предлагающих использовать AVAudio Framework. Есть ли шанс, что MPMoviePlayerController не сможет воспроизводить поток в фоновом режиме? Должен ли я перейти на AVAudio?

РЕДАКТИРОВАТЬ 2:
Хорошо, кажется, это слишком сложно для меня. Я даю точный код, надеюсь, это поможет.

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];
    self.navigationItem.title=@"";
    // 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
5
задан CdB 26 March 2012 в 22:20
поделиться