2012-02-25 222 views
5

當應用程序進入後臺播放音頻流時遇到麻煩。在後臺播放音頻流的MPMoviePlayerController

我用代碼來開始流:

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]; 

它可以完美運行。但是,儘管我在應用程序進入後臺時停止了播放,但在屬性列表中設置了「應用程序播放音頻」標誌。

如何讓我的應用程序在後臺播放音頻流?

最好的問候和非常感謝幫助!

回答

9

我沒有嘗試過自己,但這個看起來很有希望:iOS Multitasking: Background Audio

一旦項目已創建轉到APP-Info.plist中,並添加 UIBackgroundModes作爲新行。它應該創建數組。

打開數組,並在項目0的右側將其設置爲音頻。

編輯

是您的AVAudioSession設置是否正確?

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; 
[audioSession setActive:YES error:nil]; 
+1

是的,我這樣做,但沒有奏效。在本教程中,這個人正在使用AVAudio Framework。我使用的是媒體播放器,因爲AV框架由於某種原因不播放我的音頻流... – MrBr 2012-02-25 16:18:49

+0

看看我的編輯。 – dom 2012-02-25 16:30:44

+1

謝謝你!這樣做的技巧:-) – MrBr 2012-02-25 16:50:53

0

此代碼工作對我來說,首先你必須給你的應用程序的權限,以保持在後臺播放音樂(在你.plis),之後去到所希望的類並實現這個問題,首先進口以及播放音樂的方法。

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

---- ----Ø

-(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 
+0

這將有助於如果你提供你的代碼的解釋。突出顯示不同之處以及如何使其發揮作用。只有代碼答案是不被接受的。 – 2015-06-22 16:18:11