我正在使用UIImagePickerController从图片库选择视频,它压缩视频,我想禁用压缩,但我找不到办法做到这一点。我也尝试了ELCImagePickerController,它显示视频,但它看起来像一个图像,只有没有视频图标或持续时间,就像它在UIImagePickercontroller.How中显示的那样,我能做到吗?
谢谢。
发布于 2018-02-06 13:15:12
使用iOS 11,您可以将属性videoExportPreset
设置为AVAssetExportPresetPassthrough
以获得原始的:
if #available(iOS 11.0, *) {
picker.videoExportPreset = AVAssetExportPresetPassthrough
}
“视频压缩”标签只闪烁几毫秒,然后导出就完成了。
@Diego Renau几乎得到了正确的答案。
发布于 2014-03-08 20:04:53
看起来不可能避免使用UIImagePickerController进行压缩。见这个答案:
https://stackoverflow.com/a/5893066/406152
我尝试过使用imagePicker.videoQuality = UIImagePickerControllerQualityTypeHigh;
,但它仍然可以进行压缩。呃。
编辑:
然而,你可以自己滚。这将允许访问原始视频文件:
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);
}];
发布于 2016-09-01 07:47:59
实际上,您可以通过以下代码获得原始视频URL,非压缩版本:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = info[UIImagePickerControllerMediaType];
NSString *videoString = (NSString *)kUTTypeVideo;
NSString *movieString = (NSString *)kUTTypeMovie;
if ([mediaType isEqualToString:videoString] || [mediaType isEqualToString:movieString]) {
NSURL *videoRef = info[UIImagePickerControllerReferenceURL];
PHFetchResult *refResult = [PHAsset fetchAssetsWithALAssetURLs:@[videoRef] options:nil];
PHVideoRequestOptions *videoRequestOptions = [[PHVideoRequestOptions alloc] init];
videoRequestOptions.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestAVAssetForVideo:[refResult firstObject] options:videoRequestOptions resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
NSURL *originURL = [(AVURLAsset *)asset URL];
// Now you have the URL of the original video.
}
}];
}
}
提醒您,requestAVAssetForVideo调用是异步的,因此,当您想要在方法调用块之外存储带有阻塞变量的url时,请小心。
https://stackoverflow.com/questions/20190485
复制相似问题