一旦屏幕锁定/应用程序进入后台,我在让 MPMoviePlayerController 播放音频和视频以继续播放时遇到一些问题。
这是我尝试过的:
“必需的背景模式”是第一个条目的数组:[Item 0: App Plays Audio]。
另外,我的视图控制器有:
-(void)viewDidLoad {
[super viewDidLoad];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
BOOL success = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
if (!success) {
NSLog(@"DOH Could not set Category!");
}
NSError *activationError = nil;
success = [audioSession setActive:YES error:&activationError];
if (!success) {
NSLog(@"DOH Could not set Active!");
}
…
}
- (void)viewWillAppear:(BOOL)animated {
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
switch (event.subtype) {
case UIEventSubtypeRemoteControlPlay:
NSLog(@"Play");
break;
case UIEventSubtypeRemoteControlPause:
NSLog(@"Pause");
break;
default:
break;
}
}
- (BOOL)canBecomeFirstResponder{
return YES;
}
我尝试修改的应用程序是(出于所有意图和目的)LBYouTubeView 的示例应用程序,它允许您通过确定流 URL 并仅使用 MPMoviePlayerController 播放它来播放 YouTube 视频。上面的完整代码在 github 上——它是一个修改后的 LBYouTubeView 项目。
音频/视频播放正常,但是当应用程序最小化时(无论我尝试什么)MPMoviePlayerController 都会暂停。
我已经仔细研究了文档和 SO 以寻求解决方案,但无济于事。
注意:Apple 的技术说明“[在后台播放媒体](在后台播放媒体)”指出:
播放视频的应用程序无法在后台继续播放该视频。
但接着说:
注意:如果您禁用电影中的视频轨道,或将 AVPlayerLayer 与其关联的 AVPlayer 分离,它将允许电影音频继续在后台播放。
那么 - 有没有人对这如何可能有任何想法?我知道我可以将提取的 YouTube URL 输入到诸如Matt Gallagher 的音频流媒体之类的东西中,并获得仅支持播放/暂停/电话锁定等的完整音频,但不幸的是我仍然需要视频。谢谢
ps 只是重复一遍:我正在尝试使用的代码在 github上进行了更改 - 它只是一个修改后的 LBYouTubeView 项目,除了我上面详述的内容外,几乎没有什么变化。
编辑Matt Gallagher在 CocoaWithLove 上写了一篇关于这个问题的帖子 - 似乎他决定在应用程序最小化时切换到纯音频流,尽管他承认这有点不可靠,因为它会导致几秒钟的沉默(当最小化和恢复应用程序)同时缓冲新流。不理想:(