iOS8 の Photos フレームワークを使用して、ビデオ PHAsset をリクエストできます。ディスク上のファイルのサイズを知りたいです。それを決定する PHAsset のプロパティはないようです。誰にも解決策がありますか?(写真フレームワークを使用する必要はありません)
質問する
12384 次
3 に答える
30
編集
iOS 9.3 に関してrequestImageDataForAsset
は、ビデオ タイプで を使用すると、ビデオPHAsset
の最初のフレームである画像が生成されるため、機能しなくなりました。代わりに次のメソッドを使用してください。通常のビデオの場合、リクエスト オプションは にすることができますnil
が、スロー モーション ビデオの場合PHVideoRequestOptionsVersionOriginal
は、設定する必要があります。
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
AVURLAsset* urlAsset = (AVURLAsset*)asset;
NSNumber *size;
[urlAsset.URL getResourceValue:&size forKey:NSURLFileSizeKey error:nil];
NSLog(@"size is %f",[size floatValue]/(1024.0*1024.0)); //size is 43.703005
}
}];
//元の回答
PHAsset の場合は、次を使用します。
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
float imageSize = imageData.length;
//convert to Megabytes
imageSize = imageSize/(1024*1024);
NSLog(@"%f",imageSize);
}];
ALAsset の場合:
ALAssetRepresentation *rep = [asset defaultRepresentation];
float imageSize = rep.size/(1024.0*1024.0);
1 つのビデオ アセットでテストしたところ、PHAsset のサイズは 43.703125、ALAsset のサイズは 43.703005 でした。
編集
PHAsset の場合、ファイル サイズを取得する別の方法。ただし、@Alfie Hanssen が述べたように、通常のビデオで動作します。スロー モーション ビデオの場合、次のメソッドはブロック内の AVComposition アセットを返すため、そのタイプのチェックを追加しました。スロー モーション ビデオの場合は、requestImageDataForAsset
メソッドを使用します。
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
AVURLAsset* urlAsset = (AVURLAsset*)asset;
NSNumber *size;
[urlAsset.URL getResourceValue:&size forKey:NSURLFileSizeKey error:nil];
NSLog(@"size is %f",[size floatValue]/(1024.0*1024.0)); //size is 43.703005
NSData *data = [NSData dataWithContentsOfURL:urlAsset.URL];
NSLog(@"length %f",[data length]/(1024.0*1024.0)); // data size is 43.703005
}
}];
于 2014-10-24T16:16:24.723 に答える