私のiPhoneアプリケーションでは、アプリケーションがバックグラウンドモードに入ったときにビデオを再生し続けたいと思っています.
AVPlayer を使用していますが、バックグラウンドでビデオを再生する方法が見つかりません。誰かがこれで私を助けることができれば、私は非常に感謝しています. ありがとう
私のiPhoneアプリケーションでは、アプリケーションがバックグラウンドモードに入ったときにビデオを再生し続けたいと思っています.
AVPlayer を使用していますが、バックグラウンドでビデオを再生する方法が見つかりません。誰かがこれで私を助けることができれば、私は非常に感謝しています. ありがとう
驚いたことに、これは達成できると言えます。
このメソッドは、すべての可能性をサポートしています。
AVPlayer
iOS を実行しているインスタンスがある限り、デバイスの自動ロックが防止されます。
最初に、要素をUIBackgroundModes
配列に追加する Info.plist ファイルからオーディオ バックグラウンドをサポートするようにアプリケーションを構成する必要があります。audio
次に、AppDelegate.m を- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:
これらの方法
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
と#import <AVFoundation/AVFoundation.h>
次に、制御するView ControllerでAVPlayer
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
と
- (void)viewWillDisappear:(BOOL)animated
{
[mPlayer pause];
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
次に、
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
if([mPlayer rate] == 0){
[mPlayer play];
} else {
[mPlayer pause];
}
break;
case UIEventSubtypeRemoteControlPlay:
[mPlayer play];
break;
case UIEventSubtypeRemoteControlPause:
[mPlayer pause];
break;
default:
break;
}
}
ユーザーがホームボタンを押した場合に再生を再開するには、別のトリックが必要です (この場合、再生はフェードアウトで中断されます)。
ビデオの再生を制御する場合 (私が持っplay:
ているpause:
メソッド) を設定します
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];
と
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
タイマーを起動して再生を再開する対応するメソッドが呼び出されます。
- (void)applicationDidEnterBackground:(NSNotification *)notification
{
[mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}
でこのコードを試してくださいapplicationDidEnterBackground
:
UIApplication *app = [UIApplication sharedApplication];
bgTask = 0;
backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(backgroundTask) userInfo:nil repeats:YES];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
私はスタックのどこかでそれを見つけました
また、バックグラウンド オーディオを含むバックグラウンド モードをカバーするこのチュートリアルもチェックしてください。
viewDidLoad でAVAudioSessionカテゴリを.playbackモードに設定する
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.playback, mode: .moviePlayback, options: [])
} catch {
print("Failed to set audio session category.")
}
NotificationObserverを追加する
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
//App enter in forground.
@objc func applicationWillEnterForeground(_ notification: Notification) {
// Reconnect the AVPlayer to the presentation when returning to the foreground
// If presenting video with AVPlayerViewController
playerViewController.player = player
// If presenting video with AVPlayerLayer
playerLayer.player = player
}
//App enter in foreground.
@objc func applicationDidEnterBackground(_ notification: Notification) {
// Disconnect the AVPlayer from the presentation when entering background
// If presenting video with AVPlayerViewController
playerViewController.player = nil
// If presenting video with AVPlayerLayer
playerLayer.player = nil
}
参考文献
アプリケーションがバックグラウンドにあるときに、このバックグラウンド タスクを実行できます。
1> audio
2> location
3> voip
4> newsstand-content
5> external-accessory
6> bluetooth-central
7> bluetooth-peripheral
このリンクを参照してください。
http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html
http://www.rideitdown.com/2012/10/how-to-listen-youtube-videos-in.html
また、これはあなたを助けるかもしれません: AVPlayerはバックグラウンドでビデオを再生します