ios - 如何确定 iOS8 中视频 PHAsset 磁盘上的文件大小

标签 ios video photokit photosframework

我可以使用 iOS8 中的照片框架请求视频 PHAsset。我想知道磁盘上的文件有多大。似乎没有 PHAsset 的属性来确定这一点。有没有人有办法解决吗? (不需要使用照片框架)

最佳答案

编辑

对于 iOS 9.3,在视频类型 PHAsset 上使用 requestImageDataForAsset 会产生一个图像,这是视频的第一帧,所以它不起作用了。改用下面的方法,对于普通视频,请求选项可以是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);

我测试了一个视频资源,PHAsset 显示大小为 43.703125,ALAsset 显示大小为 43.703005。

编辑 对于 PHAsset,另一种获取文件大小的方法。但正如@Alfie Hanssen 提到的,它适用于普通视频,对于慢动作视频,以下方法将返回 block 中的 AVComposition Assets ,因此我添加了对其类型的检查。对于慢动作视频,使用 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
    }
}];

关于ios - 如何确定 iOS8 中视频 PHAsset 磁盘上的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26549938/

相关文章:

swift - MacOS PhotoKit - 列出所有用户创建的智能相册?

ios - 未找到 PHImageResultIsDegradedKey/PHImageFileURLKey

ios - 如何在 Cocos2D v3.x iOS 的启动图像中播放音频?

javascript - 在视口(viewport)中暂停和播放视频

iphone - 将音频/视频流传输到HTTP服务器以外的iPhone

ios - Swift - 从视频中获取所有帧

objective-c - NSPredicate 键路径在右侧

ios - 无法在 swift 中导入桥接头文件

ios - 你如何隐藏 React Native iOS 模拟器中的警告?

ios - 如何解决 PhotoKit 错误 "Original resource choice is only valid for an unadjusted base version"?