画面ロック/アプリがバックグラウンドになった後、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のサンプルアプリです。これを使用すると、ストリームURLを決定し、MPMoviePlayerControllerを使用して再生するだけでYouTubeビデオを再生できます。上記の完全なコードはgithubにあります-これは変更されたLBYouTubeViewプロジェクトです。
オーディオ/ビデオは正常に再生されますが、アプリが最小化されると(何を試しても)、MPMoviePlayerControllerが一時停止します。
私は解決策についてドキュメントとSOを詳しく調べましたが、役に立ちませんでした。
注意:AppleのTechnote「[バックグラウンドでメディアを再生する](バックグラウンドでメディアを再生する)」は次のように述べています。
ビデオを再生するアプリケーションは、バックグラウンドでそのビデオを再生し続けることはできません。
しかし、続けて言います:
注:ムービーのビデオトラックを無効にするか、関連するAVPlayerからAVPlayerLayerを切り離すと、ムービーオーディオをバックグラウンドで再生し続けることができます。
だから-これがどのように可能になるかについて誰かが何かアイデアを持っていますか?抽出したYouTubeURLをMattGallagherのオーディオストリーマーのようなものにフィードして、再生/一時停止/電話ロックなどの完全なオーディオのみのサポートを取得できることは知っていますが、残念ながら、ビデオも必要です。ありがとう
ps繰り返しますが、私が機能させようとしているコードは、変更を加えたgithub上にあります。これは変更されたLBYouTubeViewプロジェクトであり、上記で詳しく説明したものを除いてほとんど変更されていません。
編集MattGallagherは、この問題についてCocoaWithLoveに投稿しました-アプリが最小化されたときにオーディオのみのストリームに切り替えることに決めたようですが、これは数秒の沈黙を引き起こすため、少し信頼性が低いことを認めています(最小化するとアプリを復元する)、新しいストリームをバッファリングします。理想的ではない:(