将UIPickerViewController中的视频压缩到特定大小(MB),以便在Swift 2中联网

将UIPickerViewController中的视频压缩到特定大小(MB),以便在Swift 2中联网,swift,video,compression,avfoundation,uiimagepickercontroller,Swift,Video,Compression,Avfoundation,Uiimagepickercontroller,我正在尝试从UIPickerViewController中选择一个视频,将视频压缩到大约1.5MB,然后将其发布到服务器 我已经能够选择图像并成功发布。我也能够选择一个视频,并张贴它成功。问题在于,由于视频文件的大小约为27MB,一旦发送,就无法播放。因此,当尝试从服务器播放视频时,时间显示“-”。如果我选择一个较小的视频,它将发布和播放完美 我知道问题在于大小,因为我使用另一个应用程序压缩视频,然后使用我的应用程序将其发送到服务器。它工作得很好 我在这个问题上花了5个多小时,似乎自己也没办法解

我正在尝试从UIPickerViewController中选择一个视频,将视频压缩到大约1.5MB,然后将其发布到服务器

我已经能够选择图像并成功发布。我也能够选择一个视频,并张贴它成功。问题在于,由于视频文件的大小约为27MB,一旦发送,就无法播放。因此,当尝试从服务器播放视频时,时间显示“-”。如果我选择一个较小的视频,它将发布和播放完美

我知道问题在于大小,因为我使用另一个应用程序压缩视频,然后使用我的应用程序将其发送到服务器。它工作得很好

我在这个问题上花了5个多小时,似乎自己也没办法解决。(只是说我已经尝试去解决它,并且自己找到了答案)

我已尝试实施这些技术:

还有一些不在我的标签上了。其中一些是Objective-C,但我似乎无法很好地翻译它们

TL;DR
AVFoundation中是否有类似UIImageJPEG的视频表示功能?您能否发布一个从UIPicker拾取图像并将其文件大小更改为1.5MB的基本代码示例?

我在其中一个项目中有一个类似的任务,并使用AVAssetExportSession压缩视频:

    - (void)convertVideoToLowQuailtyWithInputURL:(NSURL*)inputURL
                               outputURL:(NSURL*)outputURL
                                 handler:(void (^)(AVAssetExportSession*))handler
{
[[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
exportSession.outputURL = outputURL;
exportSession.shouldOptimizeForNetworkUse = YES;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
[exportSession exportAsynchronouslyWithCompletionHandler:^(void)
 {
     handler(exportSession);
 }];}
您可以选择几种质量类型:

AVF_EXPORT NSString *const AVAssetExportPresetLowQuality        NS_AVAILABLE(10_11, 4_0);
AVF_EXPORT NSString *const AVAssetExportPresetMediumQuality     NS_AVAILABLE(10_11, 4_0);
AVF_EXPORT NSString *const AVAssetExportPresetHighestQuality    NS_AVAILABLE(10_11, 4_0);
然后用如下函数检查输出大小:

- (NSString *)sizeOfLocalURL:(NSURL *)url {
NSData *fileData = [[NSData alloc] initWithContentsOfURL:url];
return [NSString stringWithFormat:@"%.2f mb", fileData.length/1000000.00];
}

希望有帮助:)

我在其中一个项目中有一个类似的任务,并使用AVAssetExportSession压缩视频:

    - (void)convertVideoToLowQuailtyWithInputURL:(NSURL*)inputURL
                               outputURL:(NSURL*)outputURL
                                 handler:(void (^)(AVAssetExportSession*))handler
{
[[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality];
exportSession.outputURL = outputURL;
exportSession.shouldOptimizeForNetworkUse = YES;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
[exportSession exportAsynchronouslyWithCompletionHandler:^(void)
 {
     handler(exportSession);
 }];}
您可以选择几种质量类型:

AVF_EXPORT NSString *const AVAssetExportPresetLowQuality        NS_AVAILABLE(10_11, 4_0);
AVF_EXPORT NSString *const AVAssetExportPresetMediumQuality     NS_AVAILABLE(10_11, 4_0);
AVF_EXPORT NSString *const AVAssetExportPresetHighestQuality    NS_AVAILABLE(10_11, 4_0);
然后用如下函数检查输出大小:

- (NSString *)sizeOfLocalURL:(NSURL *)url {
NSData *fileData = [[NSData alloc] initWithContentsOfURL:url];
return [NSString stringWithFormat:@"%.2f mb", fileData.length/1000000.00];
}

希望有帮助:)

是的,在另一个问题中有与此完全相同的代码,我尝试过实现它,但由于我对objective c不太了解(我用swift编写代码),在翻译过程中一定会丢失一些东西。是的,在另一个问题中有与此完全相同的代码,我尝试过实现它,但由于我对objective c不太了解(我用swift编写代码),所以在翻译过程中一定会丢失一些东西。