iOS录制视频并压缩上传

李胖胖_L 2015-11-25 12:12:28
大家好,我是小白李胖胖,纯新手一名,哪位大神做过iOS录制视频并且压缩上传?帮帮忙,网上虽说是有录制视频了,目前我的项目也可以录制视频并且保存在手机相册了,但是怎么压缩上传啊?我们的拍照片倒是可以上传了,不过不用压缩,一般都2MB左右,可是视频不同,我们做的是10-15面的视频,要是不压缩上传太影响用户体验了,所以求哪位前辈大神帮帮忙,大概的思路和使用的方法名字倒是都知道了,但是具体不会实现操作,最好能给个demo或是详细点的讲解或有相关的视频学习资料也可以,然后我还得做完了视频压缩上传后,接着还得做用户自己录制出来的视频转成gif图片 并上传,所以这么着也得先把录制视频 压缩 上传先弄明白了才可以做gif!!!大哥大姐前辈大神好人一生平安啊!!
...全文
23586 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
2016-11-14
  • 打赏
  • 举报
回复
设置url的时候需要使用fileurl
轻斟浅醉17 2016-10-12
  • 打赏
  • 举报
回复
楼主问题解决了吗 ?
leimutian 2016-10-10
  • 打赏
  • 举报
回复
引用 1 楼 xxo1986cxm 的回复:


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
   // dismissViewController,判断是录制视频省略
   NSURL *sourceURL = [[info objectForKey:UIImagePickerControllerMediaURL];
   NSURL *newVideoUrl = ........; //一般.mp4
   [self convertVideoQuailtyWithInputURL:sourceURL outputURL:newVideoUrl completeHandler:^(AVAssetExportSession  *) {
       //...........
   }];
}

- (void) convertVideoQuailtyWithInputURL:(NSURL*)inputURL
                               outputURL:(NSURL*)outputURL
                         completeHandler:(void (^)(AVAssetExportSession*))handler
{
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL opti*****:nil];
    AVAssetExportSession *exportSession= [[AVAssetExportSession alloc] initWithAsset:asset     presetName:AVAssetExportPresetMediumQuality];
    exportSession.outputURL = outputURL;
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    [exportSessionexportAsynchronouslyWithCompletionHandler:^(void) {
           switch (exportSession.status)
               {
                     case AVAssetExportSessionStatusUnknown:                    
                          break;
                     case AVAssetExportSessionStatusWaiting:           
                          break;
                     case AVAssetExportSessionStatusExporting:        
                          break;
                     case AVAssetExportSessionStatusCompleted: {
                          handler(exportSession)
                          break;
                       }         
                     case AVAssetExportSessionStatusFailed:
                          break;
        }
     }];
}
差不多这样吧,LZ 自己完善吧
我用了convertVideoQuailtyWithInputURL 这个方法。 但是,总是失败。 具体过程时这样的: 我在app的Document下,放了一个test.wmv,然后希望在压缩生产一个.mp4 或者.mov的文件。 我构建了NSURL类型的input output的地址。 然后发现问题,switch (exportSession.status) 这个状态永远都是失败的。 文件也没有出现。请问是为什么?
leimutian 2016-10-10
  • 打赏
  • 举报
回复
我用了convertVideoQuailtyWithInputURL 这个方法。 但是,总是失败。 具体过程时这样的: 我在app的Document下,放了一个test.wmv,然后希望在压缩生产一个.mp4 或者.mov的文件。 我构建了NSURL类型的input output的地址。 然后发现问题,switch (exportSession.status) 这个状态永远都是失败的。 文件也没有出现。请问是为什么?
hslinux 2016-05-18
  • 打赏
  • 举报
回复
引用 12 楼 rightorwrong 的回复:
录制好视频保存成mp4格式后,视频编码应该是H264了,然后怎么在压缩上传呢?
H264已经是编码压缩过后的数据。再用zip什么的压缩意义不大。
zhao1zhihui 2016-05-11
  • 打赏
  • 举报
回复
大神 你做出来了吗?
rightorwrong 2016-01-11
  • 打赏
  • 举报
回复
录制好视频保存成mp4格式后,视频编码应该是H264了,然后怎么在压缩上传呢?
BlackBlackRing 2016-01-09
  • 打赏
  • 举报
回复
敢问LZ,有好用的录制视频,滤镜添加的第三方吗?
u014027346 2015-11-27
  • 打赏
  • 举报
回复
还有vitamio的官网上有iOS版本的qq群,一定要加一下,好多东西要咨询一下里面的工作人员,才能很好的使用。
u014027346 2015-11-27
  • 打赏
  • 举报
回复
秒拍开源的就是vitamio,可能由于一些商业原因吧,vitamio确实比较麻烦,试着去github上找找,应该会有收获。
李胖胖_L 2015-11-27
  • 打赏
  • 举报
回复
引用 7 楼 u014027346 的回复:
三方可以采用 vitamio,秒拍开源的sdk
vitamio这个已经试了 不能用 原因是bug多 而且真机测试老崩; 秒拍开源的sdk这个我试试 不懂的再问您吧 谢谢您啊 太麻烦您了 一直跟进 一直帮我解决问题 谢谢
  • 打赏
  • 举报
回复
引用 5 楼 lh308920501 的回复:
好吧 我试试 应该没啥问题 因为我跟您查的然后写出来之后跟您说的差不多 还得麻烦您问一下 您知道什么好用的三方录制视频(可以实现压缩,滤镜,回删,导入)的吗?因为老板又改需求了 不让使用系统自带的 得跟安卓一样的 我们安卓的就用的三方 他们就实现了自动压缩,滤镜,回删,导入 所以比较头疼 又得重新琢磨找三方 找了好多 不是不能用 就是用的时候 一真机测试就崩 各种原因汇总起来都是使不了 所以麻烦大神哥 能不能帮帮我 心里万分感激
这谁知道你们android 长的啥样?
李胖胖_L 2015-11-26
  • 打赏
  • 举报
回复
好吧 我试试 应该没啥问题 因为我跟您查的然后写出来之后跟您说的差不多 还得麻烦您问一下 您知道什么好用的三方录制视频(可以实现压缩,滤镜,回删,导入)的吗?因为老板又改需求了 不让使用系统自带的 得跟安卓一样的 我们安卓的就用的三方 他们就实现了自动压缩,滤镜,回删,导入 所以比较头疼 又得重新琢磨找三方 找了好多 不是不能用 就是用的时候 一真机测试就崩 各种原因汇总起来都是使不了 所以麻烦大神哥 能不能帮帮我 心里万分感激
  • 打赏
  • 举报
回复
NSURL *newVideoUrl = ........; //一般.mp4 你新建一个新的mp4的文件路径,调用转换函数,然后上传的时候用这个newVideoUrl 就可以了 你可以用outputURL 和 newVideoUrl 都输出下文件大小对比下就知道了
  • 打赏
  • 举报
回复
引用 2 楼 lh308920501 的回复:
@人中赤兔马中吕布这段代码我已经写进去了,您看看这个段代码是压缩使的吗?我现在已经可以录制 保存 但是不能压缩 上传已经有点思路差不多应该可以完成,但是现在主要就是压缩。。。 - (void) convertVideoQuailtyWithInputURL:(NSURL*)inputURL outputURL:(NSURL*)outputURL completeHandler:(void (^)(AVAssetExportSession*))handler { AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL opti*****:nil]; AVAssetExportSession *exportSession= [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality]; exportSession.outputURL = outputURL; exportSession.outputFileType = AVFileTypeQuickTimeMovie; [exportSessionexportAsynchronouslyWithCompletionHandler:^(void) { switch (exportSession.status) { case AVAssetExportSessionStatusUnknown: break; case AVAssetExportSessionStatusWaiting: break; case AVAssetExportSessionStatusExporting: break; case AVAssetExportSessionStatusCompleted: { handler(exportSession) break; } case AVAssetExportSessionStatusFailed: break; } }]; }
就是压缩的啊 其实就是转换格式而已 转成mp4
u014027346 2015-11-26
  • 打赏
  • 举报
回复
三方可以采用 vitamio,秒拍开源的sdk
  • 打赏
  • 举报
回复


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
   // dismissViewController,判断是录制视频省略
   NSURL *sourceURL = [[info objectForKey:UIImagePickerControllerMediaURL];
   NSURL *newVideoUrl = ........; //一般.mp4
   [self convertVideoQuailtyWithInputURL:sourceURL outputURL:newVideoUrl completeHandler:^(AVAssetExportSession  *) {
       //...........
   }];
}

- (void) convertVideoQuailtyWithInputURL:(NSURL*)inputURL
                               outputURL:(NSURL*)outputURL
                         completeHandler:(void (^)(AVAssetExportSession*))handler
{
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL opti*****:nil];
    AVAssetExportSession *exportSession= [[AVAssetExportSession alloc] initWithAsset:asset     presetName:AVAssetExportPresetMediumQuality];
    exportSession.outputURL = outputURL;
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    [exportSessionexportAsynchronouslyWithCompletionHandler:^(void) {
           switch (exportSession.status)
               {
                     case AVAssetExportSessionStatusUnknown:                    
                          break;
                     case AVAssetExportSessionStatusWaiting:           
                          break;
                     case AVAssetExportSessionStatusExporting:        
                          break;
                     case AVAssetExportSessionStatusCompleted: {
                          handler(exportSession)
                          break;
                       }         
                     case AVAssetExportSessionStatusFailed:
                          break;
        }
     }];
}
差不多这样吧,LZ 自己完善吧
李胖胖_L 2015-11-25
  • 打赏
  • 举报
回复
@人中赤兔马中吕布这段代码我已经写进去了,您看看这个段代码是压缩使的吗?我现在已经可以录制 保存 但是不能压缩 上传已经有点思路差不多应该可以完成,但是现在主要就是压缩。。。 - (void) convertVideoQuailtyWithInputURL:(NSURL*)inputURL outputURL:(NSURL*)outputURL completeHandler:(void (^)(AVAssetExportSession*))handler { AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL opti*****:nil]; AVAssetExportSession *exportSession= [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality]; exportSession.outputURL = outputURL; exportSession.outputFileType = AVFileTypeQuickTimeMovie; [exportSessionexportAsynchronouslyWithCompletionHandler:^(void) { switch (exportSession.status) { case AVAssetExportSessionStatusUnknown: break; case AVAssetExportSessionStatusWaiting: break; case AVAssetExportSessionStatusExporting: break; case AVAssetExportSessionStatusCompleted: { handler(exportSession) break; } case AVAssetExportSessionStatusFailed: break; } }]; }

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧