ALAssetsLibraryからすべてのビデオアセットを取得しています(基本的に、ネイティブカメラアプリから記録されているすべてのもの)。次に、各ビデオに対してこれを行う各ビデオアセットで列挙を実行しています。
// The end of the enumeration is signaled by asset == nil.
if (alAsset) {
//Get the URL location of the video
ALAssetRepresentation *representation = [alAsset defaultRepresentation];
NSURL *url = [representation url];
//Create an AVAsset from the given URL
NSDictionary *asset_options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
AVAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:asset_options];//[AVURLAsset URLAssetWithURL:url options:asset_options];
//Here is the problem
NSLog([NSString stringWithFormat:@"%i", [avAsset.tracks count]]);
NSLog([NSString stringWithFormat:@"%f", CMTimeGetSeconds(avAsset.duration)]);
}
NSLogは、ALAssetから取得したAVAssetのトラック数が0で、継続時間が0.0秒であることを報告しています。URLを確認したところ、「assets-library://asset/asset.MOV?id = 9F482CF8-B4F6-40C2-A687-0D05F5F25529&ext=MOV」で正しいようです。alAsset.thumbnailを表示し、ビデオの正しいサムネイルが表示されているので、alAssetは実際にはビデオであり、正しいビデオであることがわかります。
これらすべてにより、avAssetの初期化に問題があると私は信じますが、私の人生では、何が問題になっているのか理解できません。誰か助けてもらえますか?
アップデート:
ALAssetRepresentationから提供されたURLに誤りがあることを確認したと思います。これは、正しいサムネイルが表示されるため、奇妙なことです。私はこのコードを次の場所に追加しました:
NSLog([NSString stringWithFormat:@"%i", [url checkResourceIsReachableAndReturnError:&error]]);
NSLog([NSString stringWithFormat:@"%@", error]);
それは私にこれを与えます:
0
Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn’t be completed. (Cocoa error 4.)" UserInfo=0x19df60 {}
何が原因なのかはまだわかりません。私が気付いているのはURLだけです。これは、「assets-library://asset/asset.MOV?id = 9F482CF8-B4F6-40C2-A687-0D05F5F25529&ext = MOV」で、私が見たものとは異なります。これを探し回っています。他の場所で見たものは、「assets-library://asset/asset.MOV?id = 1000000394&ext = MOV」のように見え、英数字の代わりに数字がダッシュで区切られた名前になっています。
それが役に立ったら、私はXCode4.2BetaとiOS5を使用しています。何か考えられたら教えてください。ありがとう。