MPMoviePlayerController,与音频和视频背景播放(分离视频层?)
我有一些问题让MPMoviePlayerController播放音频和视频继续屏幕锁/应用程序后台。MPMoviePlayerController,与音频和视频背景播放(分离视频层?)
这是我已经试过:
“所需的背景模式”是与第一项的数组:[项目0:应用程序播放音频。
而且,我的视图控制器具有:
-(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,它允许您通过确定播放YouTube视频流URL,并使用MPMoviePlayerController播放它。上面的完整代码是on github - 它是一个修改的LBYouTubeView项目。
音频/视频播放正常,但是当应用程序最小化时(无论我尝试什么),MPMoviePlayerController都会暂停。
我已经钻研了文档& SO的解决方案,但无济于事。
注:苹果公司的技术说明“[在后台播放媒体(在后台播放媒体)”指出:
应用播放视频的不能继续播放该视频,同时在后台运行。
,但接着说:
注:如果您在电影中禁用视频轨道,或将其从相关AVPlayer卸下AVPlayerLayer它将使电影中的音频继续在后台播放。
所以 - 有没有人有任何想法如何这可能?我知道我可以将提取的YouTube网址提供给像Matt Gallagher's Audio Streamer之类的东西,并且只能完成音频支持播放/暂停/电话锁定等,但不幸的是,我仍然需要该视频。谢谢
p.s.只需重复一遍:我试图使用的代码是on github伴随着我的更改 - 它只是一个修改过的LBYouTubeView项目,除了我上面详细介绍的以外,几乎没有什么变化。
编辑马特·加拉格尔有written a post on CocoaWithLove这个问题 - 似乎他看中切换到该应用程序最小化时,虽然他承认这是一个有点靠不住,因为它会导致沉默了几秒钟,仅音频流,(当最小化和恢复应用程序),同时它缓冲新的流。不理想:(
端起来解决它,如下所示(写在RubyMotion但语义相同的OBJ-C):
这些添加到您的init方法:
NSNotificationCenter.defaultCenter.addObserver(self, selector:'will_enter_foreground', name:UIApplicationWillEnterForegroundNotification, object:nil)
NSNotificationCenter.defaultCenter.addObserver(self, selector:'did_enter_background', name:UIApplicationDidEnterBackgroundNotification, object:nil)
,然后:
def will_enter_foreground
unless @player.nil?
@player.currentItem.tracks.each do |track|
track.enabled = true if track.assetTrack.mediaType.eql?AVMediaTypeVideo
end
end
end
def did_enter_background
unless @player.nil?
@player.currentItem.tracks.each do |track|
track.enabled = false if track.assetTrack.mediaType.eql?AVMediaTypeVideo
end
end
end
该死的在这里看到一些东西(试图在背景中使用rubymotion进行视频音频)......但是有一个MPMoviePlayerViewController的实例,我相信这个实例必须在这里被控制,我没有得到你的位置得到这个'currentItem',因此'跟踪' – Ben 2014-03-22 23:53:07
'凯,'App.run_after(0.2){@ player.play}'与泡沫包装。必须推迟。 – Ben 2014-03-23 00:39:14