6

UIImagePickerControllerの高および中ビデオ品質設定でビデオが選択され、少なくともiPhone4やiPad3などのデバイスで、まったく同じビデオ属性が得られるのはなぜですか?

詳細:

UIImagePickerControllerを使用して、アプリユーザーがフォトライブラリから画像や動画を選択し、サーバーに転送できるようにしています。UIImagePickerControllerQualityTypeHigh、UIImagePickerControllerQualityTypeMedium、およびUIImagePickerControllerQualityTypeLow videoQuality定数に直接マップする、高、中、低のビデオ品質をユーザーが選択できるようにします。

アプリの外部でカメラを使用して撮影された10秒程度のビデオが選択され、3GS(iOS 5.0)で送信されると、それぞれの品質設定に明確な違いが見られます。たとえば、次のようになります。

  • 低:144x192で226KB、コーデック:AAC H.264
  • 中:360x480で1.1MB、コーデック:AAC H.264
  • 高:480x640で5MB、コーデック:AAC H.264

iPhone4またはiPad3で同じことを試してみると(これらのデバイスが便利です。これらのデバイスでのみ発生するかどうかはわかりません)、低設定で同等の低解像度の結果が生成されることがわかりますが、高および中設定では次のようになります。同じ結果、次のようなものです。

  • 低:144x192で194KB、コーデック:AAC H.264
  • 中:720x1280で2.87MB、コーデック:AAC H.264
  • 高:720x1280で2.87MB、コーデック:AAC H.264

(中程度の結果と高い結果は同じであることに注意してください。)

デバイスからのオリジナルは720x1280で12.8MB、コーデック:より高いビットレートのAACH.264です。

ここで何が起こっているのか説明できますか?私はそれを私たちの顧客に説明できるようにしたいと思います。これをカバーしているAppleのドキュメントの何かをさらによく指摘します。

助けてくれてありがとう...

4

1 に答える 1

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;
}
于 2012-06-28T06:58:00.423 に答える