iphone - ホームビデオ - swift4 動画再生




バックグラウンドでAvplayerを使用してビデオを再生することは可能ですか? (6)

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

MPMoviePlayerViewController。 私はこのプレイヤーとこのアプリを使用して私のアプリの一つでこれをしている

appstoreに正常に実行されます。

私は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 : 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 ://itunes.apple.com/ua/app/speeduptv/id386986953?mt https://itunes.apple.com/ua/app/speeduptv/id386986953?mt=8


fattomhkのレスポンスに加えて、アプリケーションをフォアグラウンドにした後にビデオフォワーディングを達成するためにできることは次のとおりです。

  • バックグラウンドに移動してlastPlayBackTime保存すると、再生中のビデオのcurrentPlaybackTimeを取得しlastPlayBackTime
  • アプリケーションがバックグラウンドになる時刻を格納する(おそらくuserDefault
  • アプリケーションがフォアグラウンドになると再び時間を得る
  • 背景と前景のduration間隔を計算する
  • ビデオの現在の再生時間をlastPlayBackTime + duration

このスニペットで試してみてください。私はすでにこれを私のアプリと統合しています。それは私にとっては有益です。

次の手順を実行します。

  • AppNAME-Info.plistにUIBackgroundModesを追加し、アプリケーションでオーディオを再生します
  • その後、AudioToolBoxフレームワークをフォルダフレームワークに追加します。
  • APPNAMEAppDelegate.hのadd:

    - #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];

プログラミングをお楽しみください!


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

  • ユーザーが画面をロックしました。
  • リストアイテム
  • ホームボタンが押された。

iOSを実行しているAVPlayerのインスタンスを持っている限り、デバイスの自動ロックはできません。

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

その後、あなたのAppDelegate.mを

- (BOOL)アプリケーション:(UIApplication *)アプリケーション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でビデオを再生するための作品。 ありがとうございます。


受け入れられた答えのスウィフト版。

デリゲートで:

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をインポートする」ことを忘れないでください。


私は何らかの理由で私の犯人になってしまったことを追加したいと思います。 私はAVPlayerとバックグラウンドを問題なく使用していましたが、これは一度だけ動作させることができませんでした。

私があなたがバックグラウンドに行くとき、 AVPlayer rateプロパティが時々0.0(すなわち一時停止)にAVPlayerいるように見えます。そのため、KVOには常にレートプロパティをチェックする必要があります。バックグラウンド。 レートが0.0未満になると、ユーザーが再生したいと思う(つまり、ユーザーがリモートコントロールで故意に一時停止をタップしていない、ムービーが終了したなど)、 .play()を再度呼び出す必要がある。

AFAIKは、アプリがバックグラウンドになったときに一時停止しないように、AVPlayerに他のトグルはありません。