为什么通过UIImagePickerController高中设置选择的视频可以在结果上产生相同的质量属性?

Chr*_*kle 6 resolution uiimagepickercontroller ios videoquality

为什么使用UIImagePickerController选择高视频和中等视频质量设置的视频会产生完全相同的视频属性,至少在iPhone4和iPad3等设备上?

细节:

我们正在使用UIImagePickerController让我们的应用程序用户从照片库中选择图像或视频,然后将它们传输到服务器.我们让用户选择我们直接映射到UIImagePickerControllerQualityTypeHigh,UIImagePickerControllerQualityTypeMedium和UIImagePickerControllerQualityTypeLow videoQuality常量的高,中或低视频质量.

当我们使用相机在我们的应用程序外拍摄的10秒左右的视频被选中并在3GS(iOS 5.0)上发送时,我们会看到每个质量设置的明显差异,例如:

  • 低:226x,144x192,编解码器:AAC H.264
  • 中等:在360x480处为1.1MB,编解码器:AAC H.264
  • 高:480x640处5MB,编解码器:AAC H.264

当我们在iPhone4或iPad3上尝试相同时(我们碰巧有那些设备很方便;不确定它只发生在那些设备上)我们看到低设置产生等效的低分辨率结果,但高和中等设置给出我们相同的结果,像这样:

  • 低:194x,144x192,编解码器:AAC H.264
  • 中等:2.87MB,720x1280,编解码器:AAC H.264
  • 高:2.87MB,720x1280,编解码器:AAC H.264

(请注意,中高结果是相同的.)

该设备的原始版本为12.8 MB,720x1280,编解码器:AAC H.264,比特率更高.

可以解释一下这里发生了什么吗?我希望能够向我们的客户解释它,甚至更好地指出Apple的文档中涉及到这一点.

在此先感谢任何帮助......

was*_*faq 5

视频质量设置仅适用于捕获视频而不是从视频选择器中拾取视频.该设置清楚地列在下面的捕获设置部分下.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html

您可以使用以下代码以原始格式导出视频.只需传递所选视频的URL值,该函数将返回导出视频的路径.

+(NSString*) videoAssetURLToTempFile:(NSURL*)url
{
    NSString * surl = [url absoluteString];
    NSString * ext = [surl substringFromIndex:[surl rangeOfString:@"ext="].location + 4];
    NSTimeInterval ti = [[NSDate date]timeIntervalSinceReferenceDate];
    NSString * filename = [NSString stringWithFormat: @"%f.%@",ti,ext];
    NSString * tmpfile = [NSTemporaryDirectory() stringByAppendingPathComponent:filename];

    NSURL *outputURL = [NSURL fileURLWithPath:tmpfile];

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
    exportSession.outputURL = outputURL;
    exportSession.shouldOptimizeForNetworkUse = YES;
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
    {
        NSLog(@"Export Complete %d %@ %@", exportSession.status, exportSession.error, outputURL);
        [exportSession release];
    }];

    return tmpfile;
}
Run Code Online (Sandbox Code Playgroud)

  • videoQuality设置列在捕获设置下,但文档说:"每当选择录制的电影时也会使用它." (3认同)