MPMoviePlayerController在后台播放音频流

5

我遇到了一个问题,当应用程序进入后台时,无法播放音频流。

我使用以下代码启动流:

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
我自己没有试过,但这看起来很有前途:iOS多任务:后台音频

创建项目后,进入APP-Info.plist并添加UIBackgroundModes作为新行。然后应该会创建数组。

打开数组,在Item 0的右侧将其设置为音频。

编辑

你的AVAudioSession设置正确吗?

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

1
是的,我试过了,但没有成功。在这个教程中,那个人使用的是AVAudio框架。我正在使用媒体播放器,因为AV框架由于某些原因无法播放我的音频流... - MrBr

0

这段代码对我很有效,首先你必须在你的 .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

如果您能在代码中提供解释,那将会很有帮助。请强调不同之处以及您是如何使其工作的。仅仅给出代码答案是不被赞同的。 - Gary Storey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接