9

私のiPhoneアプリケーションでは、アプリケーションがバックグラウンドモードに入ったときにビデオを再生し続けたいと思っています.

AVPlayer を使用していますが、バックグラウンドでビデオを再生する方法が見つかりません。誰かがこれで私を助けることができれば、私は非常に感謝しています. ありがとう

4

6 に答える 6

18

驚いたことに、これは達成できると言えます。

このメソッドは、すべての可能性をサポートしています。

  • ユーザーによって画面がロックされました。
  • ホームボタンが押されました。
  • 他のアプリケーションに切り替えます。

AVPlayeriOS を実行しているインスタンスがある限り、デバイスの自動ロックが防止されます。

最初に、要素を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];
}
于 2013-03-20T12:15:33.843 に答える
1

でこのコードを試してください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];

私はスタックのどこかでそれを見つけました

また、バックグラウンド オーディオを含むバックグラウンド モードをカバーするこのチュートリアルもチェックしてください。

于 2013-10-23T18:31:31.797 に答える
0

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
}

参考文献

バックグラウンドでのビデオ アセットからのオーディオの再生

AVオーディオセッション

于 2021-01-27T11:24:24.883 に答える
0

アプリケーションがバックグラウンドにあるときに、このバックグラウンド タスクを実行できます。

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はバックグラウンドでビデオを再生します

于 2013-03-15T11:15:40.037 に答える