MPMoviePlayerController, воспроизводящий аудиопоток в фоновом режиме - PullRequest
5 голосов
/ 25 февраля 2012

У меня проблемы с воспроизведением аудиопотока, когда приложение переходит в фоновый режим.

Я использую код для запуска потока:

NSURL *mediaURL = [NSURL URLWithString:@"http://url.to.my.stream"];

MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:mediaURL];

[[NSNotificationCenter defaultCenter] addObserver:self 

                                         selector:@selector(moviePlayBackDidFinish:) 

                                             name:MPMoviePlayerPlaybackDidFinishNotification 

                                           object:nil]; 



[mp setControlStyle:MPMovieControlStyleFullscreen];

[mp setMovieSourceType:MPMovieSourceTypeStreaming];

[mp setFullscreen:YES];



[self.view addSubview:[mp view]];



[mp prepareToPlay];

[mp play];

Работает отлично. Но несмотря на то, что я установил флаг «Приложение воспроизводит звук» в списке свойств, когда приложение входит в фоновый режим, поток перестает воспроизводиться.

Как заставить мое приложение воспроизводить аудиопоток в фоновом режиме?

С наилучшими пожеланиями и большое спасибо за помощь!

Ответы [ 2 ]

9 голосов
/ 25 февраля 2012

Я сам не пробовал, но это выглядит многообещающе: Многозадачность iOS: Фоновое аудио

После создания проекта перейдите в APP-Info.plist и добавьте UIBackgroundModes как новая строка. Затем следует создать массив.

Откройте массив и справа от элемента 0 установите его в аудио.

EDIT

Правильно ли настроена ваша AVAudioSession?

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:YES error:nil];
0 голосов
/ 22 июня 2015

Этот код работал для меня, сначала вы должны дать приложению разрешения на воспроизведение музыки в фоновом режиме (в вашем .plis), после этого перейдите к желаемому классу и реализуйте этот код, сначала импортируйте и методдля воспроизведения музыки.

#import <MediaPlayer/MPNowPlayingInfoCenter.h>
#import <MediaPlayer/MPMediaItem.h>
#import <AVFoundation/AVFoundation.h>

---- o ----

-(void) playMusic{

     [[AVAudioSession sharedInstance] setDelegate: self];

     NSError *myErr;

     // Initialize the AVAudioSession here.
    if (![[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&myErr]) {
       // Handle the error here.
       NSLog(@"Audio Session error %@, %@", myErr, [myErr userInfo]);
    }else{
       // Since there were no errors initializing the session, we'll allow       begin receiving remote control events
       [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    }

    //initialize our audio player
    audioPlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://www.cocoanetics.com/files/Cocoanetics_031.mp3"]];

    [audioPlayer setShouldAutoplay:NO];
    [audioPlayer setControlStyle: MPMovieControlStyleEmbedded];
    audioPlayer.view.hidden = YES;

    [audioPlayer prepareToPlay];

    [audioPlayer play];
}//end playmusic
...