2010-07-01 109 views
17

我正在使用UIImagePickerController来允许我的用户从资产库中选择一个视频。使用UIImagePickerController选择电影时避免视频压缩?

当用户在第二个屏幕上选择“选择”按钮时,视图显示进度条和“压缩视频...”消息。

这是怎么发生的?

有没有办法可以避免这种压缩操作?

+0

至今还没有找到一个解决这个。有人有主意吗? – Avalanchis 2010-07-08 13:47:24

+0

看看下面的答案。它看起来不像开发人员可以影响压缩。 – memmons 2011-05-05 05:31:29

+1

Avalanchis - 这是2年前回答的。可能获得接受? – memmons 2013-05-02 14:28:30

回答

16

答:目前还没有办法控制的UIImagePickerController如何压缩挑视频。

我刚做了一些快速测试。使用我创建的测试应用程序,我选取了两次相同的视频 - 一次将videoQuality属性设置为UIImagePickerControllerQualityTypeHigh,一次将其设置为UIImagePickerControllerQualityTypeLow。复制的结果文件大小完全相同,大小为15.1MB,帧大小为360x480。原始大小为72.5MB,帧大小为480x640。显然这个属性不会影响所使用的压缩。

+0

有没有关于这方面的消息?真的很感谢用户在选择要上传的视频时不必等待“压缩”对话框。 – 2011-09-05 11:45:27

+0

我同意。你最好的选择是向苹果公司提供一个雷达。 – memmons 2011-09-05 15:45:35

+0

那么现在一年后,没有什么变化 - iOS 6仍然不允许直接导入媒体网址:( – KPK 2012-10-20 18:14:48

4

设置的UIImagePickerController视频质量属性设置为“高”(UIImagePickerControllerQualityTypeHigh = 0)

从SDK文档: “如果显示在图像选择器中录制的电影,指定你不想要降低电影的视频质量。“

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html#//apple_ref/doc/c_ref/UIImagePickerControllerQualityType

+0

看起来像在iPhone 4上,即使设置为“高”,它仍然会压缩,但质量比默认好得多。由于原始720p视频编码速度超过10 Mbit/sec,因此我可以看到它们为什么会以“高”压缩! – CDeutsch 2010-08-03 20:35:10

+0

我有类似的发现,甚至在某些压缩中将其设置为高结果(和“压缩视频”对话框)。 – Shizam 2010-09-07 00:16:30

+0

在'UIImagePickerControllerQualityTypeHigh'的文档中,最后一行说:“**如果在图像选择器中显示录制的影片,则指定您不想降低影片的视频质量。这似乎表明,对于选择视频(而不是记录),此属性会影响它们在图像选择器的编辑屏幕中的显示方式。 – memmons 2011-05-05 04:46:52

0

对于那些给出使用videoQuality属性的建议,文档明确指出它是视频捕获选项,而不是选择器选项。

由于杰克在下面提到它,它也用于转码。看起来我太快阅读文档,因为我没有注意到转码提及。

+1

该文件称“视频录制**和转码质量**”。 – 2014-11-19 07:30:27

3

由于目前还没有办法避免使用UIImagePickerController进行压缩,所以我想包含一些关于如何创建自己的图像选择器以免压缩的想法。

这将允许访问原始视频文件:

的iOS 8

PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil]; 
for (PHAsset *asset in assetsFetchResult) { 
    PHVideoRequestOptions *videoRequestOptions = [[PHVideoRequestOptions alloc] init]; 
    videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal; 

    [[PHImageManager defaultManager] requestAVAssetForVideo:asset options:videoRequestOptions resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { 
     // the AVAsset object represents the original video file 
    }]; 
} 

看看访问集合(时刻)和其他选项的PhotoKit文档。

这里是苹果公司使用PhotoKit一个示例应用程序可能被修改为照片选择器:https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html

这里是在GitHub上照片选择器库,它使用PhotoKit看起来有前途的,因为它可以让你的PHAsset对象所有选择的图像/视频:https://github.com/guillermomuntaner/GMImagePicker

的iOS 7和下面

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    if (group) { 
     // If you want, you can filter just pictures or videos 
     // I just need videos so I do this: 
     [group setAssetsFilter:[ALAssetsFilter allVideos]]; 

     [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){ 
      if (asset){ 
       // You can now add this ALAsset in your own video picker. 
       // Note that you can only access the ALAsset as long as 
       // you maintain a reference to the ALAssetsLibrary 

       // Or if you want to process the video, you can create an AVAsset: 
       NSURL *url = asset.defaultRepresentation.url; 
       AVAsset *videoAsset = [AVAsset assetWithURL:url]; 
      } 
     }]; 
    } 
} failureBlock:^(NSError *error) { 
    NSLog(@"error enumerating AssetLibrary groups %@\n", error); 
}];