2016-03-23 15 views
2

アプリケーションがバックグラウンドのときにAVAssetExportSessionを動作させることができません。AVAssetExportSessionをバックグラウンドで実行する

私のアプリケーションでは、バックグラウンドモードの「バックグラウンドフェッチ」が有効になっています。

exportAsynchronouslyWithCompletionHandler

私は、このエラーが表示されます:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x147dae560 {Error Domain=NSOSStatusErrorDomain Code=-16980 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16980), NSLocalizedDescription=The operation could not be completed} 
このUIApplicationDelegate方法が

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 

が、私はこの方法を使用して、AVAssetをエクスポートするAVAssetExportSessionを使用すると呼ばれると呼ばれる

Howeve r、私はバックグラウンドモード "オーディオ、Airplayとピクチャインピクチャ"を持って、エクスポートが動作します。

これは素晴らしいですが、バックグラウンドで音声を再生しないため、投稿が拒否されています。

ビデオをバックグラウンドでエクスポートする方法はありますか?私はこの問題を表示するサンプルプロジェクトを作成した を再現するために

乾杯、レッド

STEPS。

ダウンロード:デバイス

  • 上のアプリがデバッグに行き、権限
  • 押しXcodeでホームボタン
  • を受け入れhttp://up.red.to/WKo1MMstzD

    • ランは - >
    • 背景の更新をシミュレートエラーが表示されます(コンソールに表示され、ローカル通知として表示されます)
  • +0

    こんにちは@Redあなたの問題の解決策を見つけましたか? – Manish

    +0

    こんにちは@Red、彼またはその根本原因の解決策を見つけましたか?私たちのアプリもこれにより拒否されています。 – DennisA

    +0

    @DennisAねえ!残念ながら、私はしませんでした。私たちは、アプリが再び開いたときにエクスポートを実行することにしました。 「Audio、Airplay、Picture in Picture」権限を使用する理由を与える機能を追加することを考えましたが、それをやり遂げなかったのです。 –

    答えて

    1

    あなたの質問:

    is there any other way to export video in the background?

    絶対に、いくつかの制限付き。

    NSProcessInfoには、アプリケーションがバックグラウンドにあるときにタスクを終了するまでに多くの時間を要求するための一連のAPIがあります。たとえば、

    id activity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityAutomaticTerminationDisabled reason:@"Good Reason"]; 
    [exportSession exportAsynchronouslyWithCompletionHandler:^{ 
        [[NSProcessInfo processInfo] endActivity:activity]; 
    }]; 
    

    これで時間が長くなります。同期操作を目的とした他のAPIもありますが、いずれの場合も、システムはではなく、にシステムを準備する必要があります。これは、WWDC 2015でのセッションで広く扱われました。

    また、バックグラウンドアクティビティがファイルシステムの保護された部分に書き込まれていないことを確認する必要があります。デバイスがロックされている場合でも、出力場所に正しいNSFileProtection属性がアクセスできるように設定されていることを確認してください。

    特に、バックグラウンドフェッチでは、作業を完了してバックグラウンドフェッチ完了ハンドラを呼び出す時間が非常に限られています。バックグラウンドフェッチAPIは、NSURLSessionと共に使用して、アプリケーションプロセスから実行されるバックグラウンドダウンロードをスケジュールすることを目的としています。 NSProcessInfo APIを使用すると、ここでもう時間がかかりません。バックグラウンドフェッチAPIは、メディアのエンコード/エクスポートに適していません。小さなメディアファイルでさえ完了するのに必要な時間は、バックグラウンドフェッチハンドラの時間制限を超えます。

    +0

    ねえ!お返事をありがとうございます。私はあなたのNSProcessInfoのアイデアを与えます。問題が私が必要とする時間に起因するのかどうか不明ではありますが、私たちは約5分かかるバックグラウンドプロセスを起動するための静かな通知も送信します。 –

    +0

    ねえ!私はあなたの解決策を試しましたが、残念ながら私はオーディオ許可が有効になっていない場合、同じエラーが表示されます。エクスポートをトリガーするもう1つの方法は、サイレントプッシュ通知によるものですが、そのエラーも表示されます。 –

    関連する問題