2011-10-20 26 views
0

アップルのカメラアプリは、写真アルバムに直接ビデオを保存するようです。その能力が単なる死の開発者によって達成できるかどうか私は疑問に思います。写真を動画に保存するアルバムが遅い

私が出会ってテストした2つの方法ビデオファイルを写真アルバムにコピーします。ファイルが大きいほど、保存に時間がかかります。 2分の作成は保存時間が変わる可能性があります。私が持っている2つのタイミングは、サイズが約150MBのファイルをコピーするためにコピーするのに45秒と1分12秒です。 Apple Cameraアプリと同様のサイズのファイルにはわずか6秒かかります。

私はAVCamのデモコードを見てきましたが、すでにテストした2つの方法のいずれかを使用しています。

ALAssetsLibraryインスタンスメソッドのwriteVideoAtPathToSavedPhotosAlbum:completionBlock:
UIKitの機能UISaveVideoAtPathToSavedPhotosAlbum

私はカメラに接続し、ファイルへのストリームを開くAVFoundationを使用しています。コンテキストの場合、次はそのファイルを開きます。 movieURLPathは、自分のアプリドキュメントディレクトリエリアのファイル参照です。

録音を停止してファイルを閉じると、最終的にこの行に移動します。

書き込みプロセスをスピードアップするオプションはありますか?明らかに、私の好みは、movieURLPathがPhotosAlbum内のファイルを指し示すことである。代わりに、そのフォルダ内のファイルを開くのが最適かもしれません。これはアップルがやったと思います。

答えて

0

これをバックグラウンドスレッドに移動するか、GCDを使用してUIがブロックされないようにすることができます。ここでGCDの使い方をチェックしてください。

http://developer.apple.com/library/mac/#featuredarticles/BlocksGCD/_index.html

+0

私は同じことを考えてきました。中断されたキャプチャを保存するための設定が既にあるので、これが役に立ちます。もちろん、ユーザーがPhotosAlbumに行くと、そのファイルはまだそこに存在していない可能性があります。 –

0

私はカメラのアプリケーションがどのように動作するかわからないんだけど、私は自分のアプリケーションで同じ問題を修正する方法を知っています。私は、次のようなものに変更するた何をしたか

- (NSURL *) tempFileURL 
{ 
    return [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), @"output.mov"]]; 
} 

- (NSURL *) tempFileURL 
{ 
    return [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@", [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"], @"output.mov"]]; 
} 

次のメッセージを見つけることができますAVCamCaptureManager下、WWDC 2010から同じAVCamコード例を使用して

すべてのカメラ出力をアプリケーションドキュメントフォルダにダンプします。今私がする必要があったのは、録音が終わって一時ファイルの名前がドキュメントフォルダ上の一意の名前に変わったときです。これはファイルサイズに依存しない非常に速いプロセスです。

私はユーザーにファイルをライブラリに保存するオプションを与えましたが、それでも非常に長いプロセスです。私はALAssetsLibraryを使ってより良い解決策を見つけることができませんでした。実際に動作するものについて聞くのが大好きです!

ps。もしあなたがIO5に開発しているのであれば、アップルはiCloudのためにこのフレームワークを完全に変更/置き換えたと確信しています。

ps2。私はAppleがカメラアプリケーションでも同じことをしたと本当に信じていますが、このAPIは利用できません。(ローガンが提案のように)

+0

保存されたファイルの一意の名前を思いついても問題はありませんが、実際には問題は解決しません。上記のコメントで言及したように、PhotosAlbumにまっすぐに行くと、ファイルがMIAだと思うことが懸念されます。私はローカルの保存されたファイルの再生インタフェースを提供していません。 WTF!私はこの文章のエディタで新しい段落の返答をタイプすることはできません。 –

+0

問題を単純化するために、ビデオファイルのコピープロセスを回避しようとしています。残念ながら、現在のALAssetsLibrary APIでは、(私が知ってテストしたものから)それは不可能です。再び、これはiOS 5には当てはまりません。 – EladG

+0

はい、私はPhotosAlbumやUnixのmvコマンドのようなもので直接ファイルパスを開くのが好きです。なぜiOS 5のコメントには該当しないと付け加えたのか分かりません。します。 –

0

は、バックグラウンドでそのコードを実行します。

#define ASYNC(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block) 

ASYNC(^{ 
    // save to photo album 
}); 
関連する問題