視頻壓縮

最近遇到一個頭疼的問題梯码,錄制高清視頻讶踪,上傳服務器罕偎,但是太大硬毕,上傳緩慢,經(jīng)過幾天的周折考蕾,最后實現(xiàn)了6:1的壓縮率祸憋,如果您有更好的辦法請聯(lián)系我。

#import "ViewController.h"

#import<AssetsLibrary/AssetsLibrary.h>

#import<AVKit/AVKit.h>

#import<AVFoundation/Foundation.h>

@interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>

@end

@implementation ViewController{

UIImagePickerController *imagePickerController;

}

- (void)viewDidLoad { ? ?[super viewDidLoad];}

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{ ? ? ?

?[self showImagePickerForSourceType:UIImagePickerControllerSourceTypeCamera andCameraCaptureMode:UIImagePickerControllerCameraCaptureModeVideo];

}

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType andCameraCaptureMode:(UIImagePickerControllerCameraCaptureMode)mode{ ? ? ? ? ? ? ? ?imagePickerController = [[UIImagePickerController alloc] init]; ? ?//這是 VC 的各種 modal 形式 ? ?imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen; ? ?imagePickerController.sourceType = sourceType; ? ?//支持的攝制類型,拍照或攝影,此處將本設備支持的所有類型全部獲取,并且同時賦值給imagePickerController的話,則可左右切換攝制模式 ? ?imagePickerController.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera]; ? ?imagePickerController.delegate = self; ? ?imagePickerController.videoQuality = UIImagePickerControllerQualityTypeIFrame960x540; ? ?//允許拍照后編輯 ? ?imagePickerController.allowsEditing = YES; ? ? ?

?if (sourceType == UIImagePickerControllerSourceTypeCamera) { ? ? ? ?//設置模式-->拍照/攝像 ? ? ? ?imagePickerController.cameraCaptureMode = mode; ? ? ? ?//開啟默認攝像頭-->前置/后置 ? ? ? ?imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear; ? ? ? ?//設置默認的閃光燈模式-->開/關(guān)/自動 ? ? ? ?imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto; ?

} ?

[self presentViewController:imagePickerController animated:YES completion:NULL];

}

#pragma mark delegate

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

NSString *mediaType = info[UIImagePickerControllerMediaType];

if ([mediaType isEqualToString:@"public.image"]) {

NSLog(@"image...");

/*

//獲取照片的原圖

UIImage* original = [info objectForKey:UIImagePickerControllerOriginalImage];

//獲取圖片裁剪后肖卧,剩下的圖

UIImage* crop = [info objectForKey:UIImagePickerControllerCropRect];

//獲取圖片的url

NSURL* url = [info objectForKey:UIImagePickerControllerMediaURL];

//獲取圖片的metadata數(shù)據(jù)信息

NSDictionary* metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];

*/

//獲取圖片裁剪的圖

UIImage* edit = [info objectForKey:UIImagePickerControllerEditedImage];

[self saveImage:edit];

}else{ ?// public.movie

NSLog(@"video...");

NSURL *url=[info objectForKey:UIImagePickerControllerMediaURL];//視頻路徑

// ? ? ? ?NSString *urlStr=[url path];

//

NSLog(@"開始壓縮,壓縮前大小 %f MB",[self fileSize:url]);

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

NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];

if ([compatiblePresets containsObject:AVAssetExportPresetHighestQuality]) {

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

exportSession.outputURL = [self compressedURL];

//優(yōu)化網(wǎng)絡

exportSession.shouldOptimizeForNetworkUse = true;

//轉(zhuǎn)換后的格式

exportSession.outputFileType = AVFileTypeMPEG4;

//異步導出

[exportSession exportAsynchronouslyWithCompletionHandler:^{

// 如果導出的狀態(tài)為完成

NSLog(@"%@",exportSession);

if (exportSession.status == AVAssetExportSessionStatusCompleted) {

NSLog(@"壓縮完畢,壓縮后大小 %f MB",[self fileSize:[self compressedURL]]);

[self saveVideo:[self compressedURL]];

}else{

NSLog(@"當前壓縮進度:%f",exportSession.progress);

}

}];

}

// ? ? ? ?[self saveVideo:url];

}

[picker dismissViewControllerAnimated:YES completion:nil];

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

NSLog(@"取消");

[picker dismissViewControllerAnimated:YES completion:nil];

}

//取消屏幕旋轉(zhuǎn)

- (BOOL)shouldAutorotate {

return YES;

}

#pragma mark save

- (void)saveImage:(UIImage *)img

{

// ? ?//如果是拍照的照片蚯窥,則需要手動保存到本地,系統(tǒng)不會自動保存拍照成功后的照片

// ? ?UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

[[[ALAssetsLibrary alloc]init] writeImageToSavedPhotosAlbum:[img CGImage] orientation:(ALAssetOrientation)img.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error) {

if (error) {

NSLog(@"Save image fail:%@",error);

}else{

NSLog(@"Save image succeed.");

}

}];

}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{

if (error) {

NSLog(@"保存照片過程中發(fā)生錯誤塞帐,錯誤信息:%@",error.localizedDescription);

}else{

NSLog(@"照片保存成功.");

}

}

- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo

{

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

if (error) {

NSLog(@"保存視頻過程中發(fā)生錯誤拦赠,錯誤信息:%@",error.localizedDescription);

}else{

NSLog(@"視頻保存成功.");

}

}

#pragma mark 保存壓縮

- (NSURL *)compressedURL

{

return [NSURL fileURLWithPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"cgq.mp4"]]];

}

- (CGFloat)fileSize:(NSURL *)path

{

return [[NSData dataWithContentsOfURL:path] length]/1024.00 /1024.00;

}

- (void)saveVideo:(NSURL *)outputFileURL

{

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

[library writeVideoAtPathToSavedPhotosAlbum:outputFileURL

completionBlock:^(NSURL *assetURL, NSError *error) {

if (error) {

NSLog(@"保存視頻失敗:%@",error);

} else {

NSLog(@"保存視頻到相冊成功");

}

}];

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壁榕,隨后出現(xiàn)的幾起案子矛紫,更是在濱河造成了極大的恐慌,老刑警劉巖牌里,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颊咬,死亡現(xiàn)場離奇詭異务甥,居然都是意外死亡,警方通過查閱死者的電腦和手機喳篇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門敞临,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人麸澜,你說我怎么就攤上這事挺尿。” “怎么了炊邦?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵编矾,是天一觀的道長。 經(jīng)常有香客問我馁害,道長窄俏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任碘菜,我火速辦了婚禮凹蜈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忍啸。我一直安慰自己仰坦,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布计雌。 她就那樣靜靜地躺著悄晃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪白粉。 梳的紋絲不亂的頭發(fā)上传泊,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天鼠渺,我揣著相機與錄音鸭巴,去河邊找鬼。 笑死拦盹,一個胖子當著我的面吹牛鹃祖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播普舆,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恬口,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沼侣?” 一聲冷哼從身側(cè)響起祖能,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛾洛,沒想到半個月后养铸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雁芙,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年钞螟,在試婚紗的時候發(fā)現(xiàn)自己被綠了兔甘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鳞滨,死狀恐怖洞焙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拯啦,我是刑警寧澤澡匪,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站褒链,受9級特大地震影響仙蛉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碱蒙,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一荠瘪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赛惩,春花似錦哀墓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至季惯,卻和暖如春吠各,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勉抓。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工贾漏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人藕筋。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓纵散,卻偏偏與公主長得像,于是被迫代替她去往敵國和親隐圾。 傳聞我的和親對象是個殘疾皇子伍掀,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容