iPhone-避免在UIImagePickerController中进行视频压缩

时间:2013-01-04 10:17:55

标签: iphone objective-c ios uiimagepickercontroller

在我的应用中,我将视频上传到服务器。我使用原生UIImagePickercontroller从图库中挑选视频。

我的代表是;

imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

我的应用程序必须在后台工作,并且从图库中选择大型视频时,压缩时间非常高,用户可能会感到烦恼并退出应用程序。虽然发生了这种情况,但beginbackgroundTaskWithExpirationhandler给了我bgTask 10分钟。但如果压缩过程超过10分钟而应用程序处于后台,操作系统会暂停/杀死我的应用程序。

你知道我怎么能避免这种情况。??

2 个答案:

答案 0 :(得分:3)

可悲的是,没有办法完全避免压缩。将视频质量设置为高应该会有所帮助。

myController.videoQuality = UIImagePickerControllerQualityTypeHigh;

编辑:我没有对此进行测试,但听起来它会起作用。这是UIImagePickerController的翻版,声称可以对图像和视频进行原始访问。

GitHub:https://github.com/elc/ELCImagePickerController

有关它的更多信息:http://www.icodeblog.com/2010/10/07/cloning-uiimagepickercontroller-using-the-assets-library-framework/

答案 1 :(得分:0)

如果您知道如何获取PHAsset对象,请使用此代替第三方解决方案(更精细的控制,永远不必升级):

[[PHImageManager defaultManager] requestAVAssetForVideo:phAsset options:nil resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) {
    NSURL *url = (NSURL *)[[(AVURLAsset *)avAsset URL] fileReferenceURL];
    NSLog(@"url = %@", [url absoluteString]);
    NSLog(@"url = %@", [url relativePath]);
 }];

虽然phAsset是PHAsset对象,而avAsset是由PHImageManager生成的结果AVAsset对象,但从上面的代码输出到控制台将产生,例如:

2016-04-16 01:15:40.155 ChromaEpsilon[3423:933358] url = file:///.file/id=16777218.8262005
2016-04-16 01:15:40.155 ChromaEpsilon[3423:933358] url = /private/var/mobile/Media/DCIM/108APPLE/IMG_8421.MOV

我相信,不仅仅是这两个,而是从这里开始。