18

Avplayer を使用してビデオ クリップを表示していますが、戻ると (アプリがバックグラウンドで) ビデオが停止します。どうすればビデオを再生し続けることができますか?

バックグラウンドタスクとバックグラウンドスレッドについて検索しました.IOSはバックグラウンドで音楽のみをサポートしています(ビデオではありません) http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

これは、バックグラウンドでのビデオの再生に関するいくつかの議論です

1) https://discussions.apple.com/thread/2799090?start=0&tstart=0

2) http://www.cocoawithlove.com/2011/04/background-audio-through-ios-movie.html

しかし、AppStoreには、バックグラウンドでビデオを再生するアプリがたくさんあります

スウィフト プレーヤー : https://itunes.apple.com/us/app/swift-player-speed-up-video/id545216639?mt=8&ign-mpt=uo%3D2

SpeedUpTV : https://itunes.apple.com/ua/app/speeduptv/id386986953?mt=8

4

8 に答える 8

13

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

  • ユーザーによって画面がロックされました。
  • リスト項目
  • ホームボタンが押されました。

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

最初に、UIBackgroundModes 配列に audio 要素を追加して、Info.plist ファイルからオーディオ バックグラウンドをサポートするようにアプリケーションを構成する必要があります。

次に、AppDelegate.m を

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:

これらの方法

[[AVAudioSession sharedInstance] setDelegate: self];    
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

および#import < AVFoundation/AVFoundation.h >

次に、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;
        }
    }

ユーザーがホームボタンを押した場合に再生を再開するには、別のトリックが必要です (この場合、再生はフェードアウトで中断されます)。

ビデオの再生を制御する場合 (私は再生方法を持っています) セット

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];

タイマーを起動して再生を再開する対応するメソッドが呼び出されます。

- (void)applicationDidEnterBackground:(NSNotification *)notification
{
    [mPlayer performSelector:@selector(play) withObject:nil afterDelay:0.01];
}

Backgorundでビデオを再生するのはうまくいきます。ありがとうございます。

于 2013-03-22T06:53:16.367 に答える
3

バックグラウンド モードを変更しようとすると: 申し訳ありませんが、App Store では承認されません。YouTubeのバックグラウンドに移動した後のMPMoviePlayerViewController再生ビデオ

私の研究では、ビデオが一時停止し、フォアグラウンドになったときに再生を再開するための再生時間を取得するため、バックグラウンドになったときに誰かがサウンドトラックを取り出してバックグラウンドで再生します。

于 2013-03-18T05:56:06.797 に答える
2

Avplayer を使用して BGM/ビデオを再生することはできません。しかし、それを使用することは可能です

MPMoviePlayerViewController. このプレーヤーとこのアプリを使用して、アプリの1つでこれを行いました

アプリストアに正常に実行されます。

于 2013-03-22T05:42:47.123 に答える
2

このスニペットを試してみてください。すでにこれをアプリに統合しており、私にとって便利です..これがうまくいくことを願っています!!

以下の手順に従ってください。

  • APPNAME-Info.plist に UIBackgroundModes を追加し、[アプリがオーディオを再生] を選択します。
  • 次に、AudioToolBox フレームワークをフォルダー フレームワークに追加します。
  • APPNAMEAppDelegate.h に次を追加します。

    --#import < AVFoundation/AVFoundation.h>

    --#import < AudioToolbox/AudioToolbox.h>

  • APPNAMEAppDelegate.m に以下を追加します。

    // AudioSession を設定

     NSError *sessionError = nil;
    
        [[AVAudioSession sharedInstance] setDelegate:self];
    
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
    
  • /* いずれかを選択 */

  • // 1. 出力オーディオ ルートのオーバーライド

//UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; //AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);

================================================== ======================

// 2. デフォルトの出力オーディオ ルートの変更

UInt32 doChangeDefaultRoute = 1;

AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  • しかし、2 行の前に:

    [self.window addSubview:viewController.view];

    [self.window makeKeyAndVisible];

プログラミングを楽しもう!!

于 2013-03-23T07:57:00.217 に答える
2

受け入れられた回答のSwiftバージョン。

デリゲートで:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)

AVPlayer を制御するビュー コントローラーで

override func viewDidAppear(animated: Bool) {
    UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
    self.becomeFirstResponder()
}

override func viewWillDisappear(animated: Bool) {
    mPlayer.pause()
    UIApplication.sharedApplication().endReceivingRemoteControlEvents()
    self.resignFirstResponder()
}

「AVFoundationをインポートする」ことを忘れないでください

于 2015-06-15T04:56:47.480 に答える
1

fattomhkの応答に加えて、アプリケーションがフォアグラウンドになった後のあるべき時間までのビデオ転送を実現するためにできることは次のとおりです。

  • currentPlaybackTimeバックグラウンドに移動して保存するときにビデオを再生するlastPlayBackTime
  • アプリケーションがバックグラウンドに移行する時間を保存します(userDefaultおそらく)
  • アプリケーションがフォアグラウンドになったら、もう一度時間を取得します
  • durationバックグラウンド時間とフォアグラウンド時間の間を計算します
  • ビデオの現在の再生時間をlastPlayBackTime+に設定しますduration
于 2013-03-20T07:06:32.287 に答える