10

iOS8 の Photos フレームワークを使用して、ビデオ PHAsset をリクエストできます。ディスク上のファイルのサイズを知りたいです。それを決定する PHAsset のプロパティはないようです。誰にも解決策がありますか?(写真フレームワークを使用する必要はありません)

4

3 に答える 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 に答える