MPMoviePlayerController 在后台播放音频流

Posted

技术标签:

【中文标题】MPMoviePlayerController 在后台播放音频流【英文标题】:MPMoviePlayerController playing audio stream in the background 【发布时间】:2012-02-25 16:05:19 【问题描述】:

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

我使用代码启动流:

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

完美运行。但是,尽管我在应用程序进入后台时在属性列表中设置了标志“应用程序播放音频”,但流停止播放。

如何让我的应用程序在后台播放音频流?

最好的问候,非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

我自己没有尝试过,但这看起来很有希望:ios Multitasking: Background Audio

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

打开数组并在第 0 项的右侧将其设置为音频。

编辑

您的 AVAudioSession 设置正确吗?

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

【讨论】:

是的,我这样做了,但是没有用。在本教程中,这个人正在使用 AVAudio 框架。我正在使用媒体播放器,因为 AV 框架由于某种原因不播放我的音频流...【参考方案2】:

此代码对我有用,首先您必须授予您的应用权限以继续在后台播放音乐(在您的 .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

【讨论】:

如果您能在代码中提供解释,将会有所帮助。突出显示不同之处以及如何使其发挥作用。仅代码的答案是不受欢迎的。

以上是关于MPMoviePlayerController 在后台播放音频流的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MPMoviePlayerController 上处理多个 SRT 文件

在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏

在 UITableViewCell 中嵌入 MPMoviePlayerController

MPMoviePlayerController 在影片结尾更改控件样式

后台的 MPMoviePlayerController / AVAudioSession 在来电后不会重新开始播放

MPMoviePlayerController 在启动前显示空白屏幕?