无法在 UIImagePickerController didFinishPickingMediaWithInfo 中获取开始和结束编辑时间:
Cant get start and end editing time in UIImagePickerController didFinishPickingMediaWithInfo:
我使用 UIImagePickerController 来剪辑视频,
我这样创建它:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
[imagePicker setVideoQuality:UIImagePickerControllerQualityType640x480];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = @[(__bridge NSString *)kUTTypeMovie, (__bridge NSString *)kUTTypeVideo, (__bridge NSString *)kUTTypeMPEG4];
imagePicker.allowsEditing = YES;
[self.navigationController presentViewController:imagePicker animated:YES completion:nil];
但不幸的是,在调用的委托方法中,我无法获取开始和结束编辑时间 - 以保存编辑后的视频:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
[picker dismissViewControllerAnimated:YES completion:^{
}];
NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
if ([type isEqualToString:(NSString *)kUTTypeVideo] ||
[type isEqualToString:(NSString *)kUTTypeMovie]) { // movie != video
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSNumber *start = [info objectForKey:@"_UIImagePickerControllerVideoEditingStart"];
NSNumber *end = [info objectForKey:@"_UIImagePickerControllerVideoEditingEnd"];
}
在我的例子中,开始和结束是零。我不知道如何获得这些信息。你能告诉我如何得到它吗?
预先感谢您的帮助。
我刚刚检查了你的代码 运行 我发现 _UIImagePickerControllerVideoEditingStart
和 _UIImagePickerControllerVideoEditingEnd
return 只从相机捕获视频但是如果你是 select来自您 PhotoLibrary
的视频您没有在信息字典中获得这两个键:
如果您正在使用 imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
那么您将获得以下信息字典日志:
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file:///private/var/mobile/Containers/Data/Application/BCBE6A30-1A92-41BB-8734-BFF052E416DE/tmp/trim.59737F15-FC2A-4EB7-89AE-DF3831089657.MOV";
UIImagePickerControllerReferenceURL = "assets-library://asset/asset.MOV?id=87E3E50A-1DBF-449F-8BE3-AB36E718D82C&ext=MOV";
如果您正在使用 imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
那么您将获得以下信息字典日志:
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file:///private/var/mobile/Containers/Data/Application/611D33A4-61F4-4CD0-934D-C0EFF82B75AC/tmp/capture/capturedvideo.MOV";
"_UIImagePickerControllerVideoEditingEnd" = "2.360877976190476";
"_UIImagePickerControllerVideoEditingStart" = "1.360505952380952";
所以最后 UIImagePickerControllerSourceTypePhotoLibrary
UIImagePickerController 不会提供 _UIImagePickerControllerVideoEditingStart
和 _UIImagePickerControllerVideoEditingEnd
键。所以你可以通过使用 AVURLAsset
来获得它的持续时间,就像下面的代码假设开始时间是 0 并且结束时间是完整的持续时间。
AVURLAsset *Asset = [AVURLAsset assetWithURL:videoURL];
CMTime duration = [Asset duration];
int fullduration = ceil(duration.value/duration.timescale);
我使用 UIImagePickerController 来剪辑视频, 我这样创建它:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
[imagePicker setVideoQuality:UIImagePickerControllerQualityType640x480];
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = @[(__bridge NSString *)kUTTypeMovie, (__bridge NSString *)kUTTypeVideo, (__bridge NSString *)kUTTypeMPEG4];
imagePicker.allowsEditing = YES;
[self.navigationController presentViewController:imagePicker animated:YES completion:nil];
但不幸的是,在调用的委托方法中,我无法获取开始和结束编辑时间 - 以保存编辑后的视频:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
[picker dismissViewControllerAnimated:YES completion:^{
}];
NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
if ([type isEqualToString:(NSString *)kUTTypeVideo] ||
[type isEqualToString:(NSString *)kUTTypeMovie]) { // movie != video
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSNumber *start = [info objectForKey:@"_UIImagePickerControllerVideoEditingStart"];
NSNumber *end = [info objectForKey:@"_UIImagePickerControllerVideoEditingEnd"];
}
在我的例子中,开始和结束是零。我不知道如何获得这些信息。你能告诉我如何得到它吗? 预先感谢您的帮助。
我刚刚检查了你的代码 运行 我发现 _UIImagePickerControllerVideoEditingStart
和 _UIImagePickerControllerVideoEditingEnd
return 只从相机捕获视频但是如果你是 select来自您 PhotoLibrary
的视频您没有在信息字典中获得这两个键:
如果您正在使用 imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
那么您将获得以下信息字典日志:
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file:///private/var/mobile/Containers/Data/Application/BCBE6A30-1A92-41BB-8734-BFF052E416DE/tmp/trim.59737F15-FC2A-4EB7-89AE-DF3831089657.MOV";
UIImagePickerControllerReferenceURL = "assets-library://asset/asset.MOV?id=87E3E50A-1DBF-449F-8BE3-AB36E718D82C&ext=MOV";
如果您正在使用 imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
那么您将获得以下信息字典日志:
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file:///private/var/mobile/Containers/Data/Application/611D33A4-61F4-4CD0-934D-C0EFF82B75AC/tmp/capture/capturedvideo.MOV";
"_UIImagePickerControllerVideoEditingEnd" = "2.360877976190476";
"_UIImagePickerControllerVideoEditingStart" = "1.360505952380952";
所以最后 UIImagePickerControllerSourceTypePhotoLibrary
UIImagePickerController 不会提供 _UIImagePickerControllerVideoEditingStart
和 _UIImagePickerControllerVideoEditingEnd
键。所以你可以通过使用 AVURLAsset
来获得它的持续时间,就像下面的代码假设开始时间是 0 并且结束时间是完整的持续时间。
AVURLAsset *Asset = [AVURLAsset assetWithURL:videoURL];
CMTime duration = [Asset duration];
int fullduration = ceil(duration.value/duration.timescale);