iOS 錄製視頻MOV格式轉MP4

來源:互聯網
上載者:User

標籤:ace   col   開始   mp4   animate   media   action   output   nsurl   

使用UIImagePickerController系統控制器錄製視頻時,預設產生的格式是MOV,如果要轉成MP4格式的,我們需要使用AVAssetExportSession;

支援轉換的視頻品質:低,中,高,640*480,720p,1080p等

如下程式碼片段轉換

- (void)mov2mp4:(NSURL *)movUrl{    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movUrl options:nil];    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];    /**     AVAssetExportPresetMediumQuality 表示視頻的轉換品質,     */    if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) {        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality];                //轉換完成儲存的檔案路徑        NSString * resultPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4",@"cvt"];                exportSession.outputURL = [NSURL fileURLWithPath:resultPath];                //要轉換的格式,這裡使用 MP4        exportSession.outputFileType = AVFileTypeMPEG4;                //轉換的資料是否對網路使用最佳化        exportSession.shouldOptimizeForNetworkUse = YES;                //非同步處理開始轉換        [exportSession exportAsynchronouslyWithCompletionHandler:^(void)                  {             //轉換狀態監控             switch (exportSession.status) {                 case AVAssetExportSessionStatusUnknown:                     NSLog(@"AVAssetExportSessionStatusUnknown");                     break;                                      case AVAssetExportSessionStatusWaiting:                     NSLog(@"AVAssetExportSessionStatusWaiting");                     break;                                      case AVAssetExportSessionStatusExporting:                     NSLog(@"AVAssetExportSessionStatusExporting");                     break;                 case AVAssetExportSessionStatusFailed:                     NSLog(@"AVAssetExportSessionStatusFailed");                       break;                 case AVAssetExportSessionStatusCancelled:                     NSLog(@"AVAssetExportSessionStatusCancelled");                     break;                                   case AVAssetExportSessionStatusCompleted:                 {                     //轉換完成                     NSLog(@"AVAssetExportSessionStatusCompleted");                                          //測試使用,儲存在手機相簿裡面                     ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];                     [assetLibrary writeVideoAtPathToSavedPhotosAlbum:exportSession.outputURL completionBlock:^(NSURL *assetURL, NSError *error){                         if (error) {                             NSLog(@"%@",error);                         }                     }];                     break;                 }             }                      }];              }  }

 

完整的調用以及轉碼

#import <AssetsLibrary/AssetsLibrary.h>#import <MobileCoreServices/MobileCoreServices.h>#import <AVFoundation/AVFoundation.h>@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    }- (IBAction)startCampVD:(id)sender {     UIImagePickerController *pickerCon = [[UIImagePickerController alloc]init];    pickerCon.sourceType = UIImagePickerControllerSourceTypeCamera;    pickerCon.mediaTypes = @[(NSString *)kUTTypeMovie];//設定相機為視頻    pickerCon.cameraDevice = UIImagePickerControllerCameraDeviceFront;//設定相機後網路攝影機    pickerCon.videoMaximumDuration = 6;//最長拍攝時間    pickerCon.videoQuality = UIImagePickerControllerQualityType640x480;//拍攝品質    pickerCon.allowsEditing = NO;//是否可編輯    pickerCon.delegate = self;            [self presentViewController:pickerCon animated:YES completion:nil];}- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {        NSLog(@"視頻錄製完成...");    NSLog(@"%@",info);    [self mov2mp4:[info objectForKey:UIImagePickerControllerMediaURL]];        [self dismissViewControllerAnimated:YES completion:nil];        }- (void)mov2mp4:(NSURL *)movUrl{    AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movUrl options:nil];    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];    /**     AVAssetExportPresetMediumQuality 表示視頻的轉換品質,     */    if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) {        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality];                //轉換完成儲存的檔案路徑        NSString * resultPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/output-%@.mp4",@"cvt"];                exportSession.outputURL = [NSURL fileURLWithPath:resultPath];                //要轉換的格式,這裡使用 MP4        exportSession.outputFileType = AVFileTypeMPEG4;                //轉換的資料是否對網路使用最佳化        exportSession.shouldOptimizeForNetworkUse = YES;                //非同步處理開始轉換        [exportSession exportAsynchronouslyWithCompletionHandler:^(void)                  {             //轉換狀態監控             switch (exportSession.status) {                 case AVAssetExportSessionStatusUnknown:                     NSLog(@"AVAssetExportSessionStatusUnknown");                     break;                                      case AVAssetExportSessionStatusWaiting:                     NSLog(@"AVAssetExportSessionStatusWaiting");                     break;                                      case AVAssetExportSessionStatusExporting:                     NSLog(@"AVAssetExportSessionStatusExporting");                     break;                 case AVAssetExportSessionStatusFailed:                     NSLog(@"AVAssetExportSessionStatusFailed");                       break;                 case AVAssetExportSessionStatusCancelled:                     NSLog(@"AVAssetExportSessionStatusCancelled");                     break;                                   case AVAssetExportSessionStatusCompleted:                 {                     //轉換完成                     NSLog(@"AVAssetExportSessionStatusCompleted");                                          //測試使用,儲存在手機相簿裡面                     ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];                     [assetLibrary writeVideoAtPathToSavedPhotosAlbum:exportSession.outputURL completionBlock:^(NSURL *assetURL, NSError *error){                         if (error) {                             NSLog(@"%@",error);                         }                     }];                     break;                 }             }                      }];              }  }- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {    [picker dismissViewControllerAnimated:YES completion:^{}];        NSLog(@"視頻錄製取消了...");    }

 

 

iOS 錄製視頻MOV格式轉MP4

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.