java上传视频到七牛_七牛云,上传视频

七牛

调起相机

// 跳转到相机

UIImagePickerController *ipc = [[UIImagePickerController alloc] init];

ipc.sourceType = UIImagePickerControllerSourceTypeCamera;//sourcetype有三种分别是camera,photoLibrary和photoAlbum

NSArray *availableMedia = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];//Camera所支持的Media格式都有哪些,共有两个分别是@"public.image",@"public.movie"

ipc.videoQuality = UIImagePickerControllerQualityTypeMedium;

ipc.mediaTypes = [NSArray arrayWithObject:availableMedia[1]];//设置媒体类型为public.movie

[self presentViewController:ipc animated:YES completion:nil];

ipc.videoMaximumDuration = [self.model.videoMaximumDuration floatValue] == 0 ? 30 : [self.model.videoMaximumDuration floatValue];//30秒 //视频最长时间

ipc.delegate = self;//设置委托

获取视频

UIImagePickerControllerDelegate

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

{

NSLog(@"---------------%@", info);

[picker dismissViewControllerAnimated:YES completion:^{}];

if ([[info objectForKey:@"UIImagePickerControllerMediaType"] isEqualToString:@"public.movie"]) {//选了视频

NSURL *sourceURL = [info objectForKey:UIImagePickerControllerMediaURL];

NSLog(@"完成视频录制----视频时间===%@",[NSString stringWithFormat:@"%f s", [self getVideoLength:sourceURL]]);

NSLog(@"完成视频录制----视频文件大小===%@", [NSString stringWithFormat:@"%.2f kb", [self getFileSize:[sourceURL path]]]);

NSURL *newVideoUrl ; //一般.mp4

NSDateFormatter *formater = [[NSDateFormatter alloc] init];//用时间给文件全名,以免重复,在测试的时候其实可以判断文件是否存在若存在,则删除,重新生成文件即可

[formater setDateFormat:@"yyyy-MM-dd-HH:mm:ss"];

NSString *file = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4", [formater stringFromDate:[NSDate date]]];

newVideoUrl = [NSURL fileURLWithPath:file] ;//这个是保存在app自己的沙盒路径里,后面可以选择是否在上传后删除掉。建议删除掉,免得占空间。

[picker dismissViewControllerAnimated:NO completion:nil];

//压缩视频文件

[self convertVideoQuailtyWithInputURL:sourceURL outputURL:newVideoUrl completeHandler:nil];

return;

}

}

#pragma mark --//此方法可以获取视频文件的时长。

- (CGFloat) getVideoLength:(NSURL *)URL

{

AVURLAsset *avUrl = [AVURLAsset assetWithURL:URL];

CMTime time = [avUrl duration];

int second = ceil(time.value/time.timescale);

return second;

}

#pragma mark --//此方法可以获取文件的大小,返回的是单位是KB。

- (CGFloat) getFileSize:(NSString *)path

{

NSFileManager *fileManager = [NSFileManager defaultManager];

float filesize = -1.0;

if ([fileManager fileExistsAtPath:path]) {

NSDictionary *fileDic = [fileManager attributesOfItemAtPath:path error:nil];//获取文件的属性

unsigned long long size = [[fileDic objectForKey:NSFileSize] longLongValue];

filesize = 1.0*size/1024;

}else{

NSLog(@"找不到文件");

}

return filesize;

}

处理视频质量 路径

#pragma mark --//完成视频录制,做 压缩 处理

- (void)convertVideoQuailtyWithInputURL:(NSURL*)inputURL outputURL:(NSURL*)outputURL completeHandler:(void (^)(AVAssetExportSession*))handler

{

// 通过文件的 url 获取到这个文件的资源

AVURLAsset *avAsset = [[AVURLAsset alloc] initWithURL:inputURL options:nil];

// 用 AVAssetExportSession 这个类来导出资源中的属性

NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];

// 压缩视频 //AVAssetExportPresetLowQuality //AVAssetExportPresetMediumQuality //AVAssetExportPresetHighestQuality

if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) { // 导出属性是否包含低分辨率

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality];

exportSession.outputURL = outputURL;

exportSession.outputFileType = AVFileTypeMPEG4;

exportSession.shouldOptimizeForNetworkUse= YES;

[exportSession exportAsynchronouslyWithCompletionHandler:^(void){

switch (exportSession.status) {

case AVAssetExportSessionStatusCancelled:

NSLog(@"AVAssetExportSessionStatusCancelled");

break;

case AVAssetExportSessionStatusUnknown:

NSLog(@"AVAssetExportSessionStatusUnknown");

break;

case AVAssetExportSessionStatusWaiting:

NSLog(@"AVAssetExportSessionStatusWaiting");

break;

case AVAssetExportSessionStatusExporting:

NSLog(@"AVAssetExportSessionStatusExporting");

break;

case AVAssetExportSessionStatusCompleted:

NSLog(@"AVAssetExportSessionStatusCompleted");

NSLog(@"保存视频===时间===%@",[NSString stringWithFormat:@"%f s", [self getVideoLength:outputURL]]);

NSLog(@"保存视频===文件大小===%@", [NSString stringWithFormat:@"%.2f kb", [self getFileSize:[outputURL path]]]);

//UISaveVideoAtPathToSavedPhotosAlbum([outputURL path], self, nil, NULL);//这个是保存到手机相册

// UISaveVideoAtPathToSavedPhotosAlbum([outputURL path], self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);

// NSLog(@"图片缩略图111======%@", [self getVideoThumbnailWithFilePath:[outputURL path]]);

// NSLog(@"图片缩略图222======%@", [self getImage:[outputURL path]]);

//上传视频文件 请求接口

[self uploadImageToQNFilePath:[outputURL path]];//传文件的方法 慢

break;

case AVAssetExportSessionStatusFailed:

NSLog(@"AVAssetExportSessionStatusFailed");

break;

default:

break;

}

}];

}

}

七牛上传视频(文件的形式)

pod "Qiniu", "~> 7.1"

#import

self.qiNiuToken = @"服务器请求接口获取";

//主动取消上传

self.isUploadCancel = YES;

#pragma mark -- 上传 根据路径上传视频 -- 请求接口

- (void)uploadImageToQNFilePath:(NSString *)filePath

{

__weak typeof(self) weakSelf = self;

NSLog(@"上传文件的请求数据-----现在是上传视频--路径========:%@", filePath);

QNUploadManager *upManager = [[QNUploadManager alloc] init];

QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {

NSLog(@"上传进度percent == %.2f", percent);

} params:nil checkCrc:NO cancellationSignal:^BOOL() {

//返回 上传视频中途取消时YES 否则NO

return weakSelf.isUploadCancel;

}];

//主动取消上传调用方法

// uploadOption.cancellationSignal();

//qiniu上传文件方法

[upManager putFile:filePath key:nil token:self.qiNiuToken complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {

weakSelf.progressView.hidden = YES;

NSLog(@"info ===== %@", info);

NSLog(@"resp ===== %@", resp);

dispatch_async(dispatch_get_main_queue(), ^{

});

} option:uploadOption];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值