首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在objective-c (iOS)中转码视频的最佳方法是什么?

在objective-c (iOS)中转码视频的最佳方法是什么?
EN

Stack Overflow用户
提问于 2012-02-19 20:12:02
回答 1查看 6.5K关注 0票数 6

我想根据设备和应用程序中的设置,将视频转码为特定的视频格式。例如,如果用户使用iPhone 4S并在我的应用程序中选择了中等设置,我希望在开始处理之前将视频转换为540p。如果他选择高,那么我想转码到720p。

我可以一帧一帧地读取视频,调整大小并保存到光盘,但这似乎不是很有效。我可以将视频转码到我的视频处理库中,最简单、最快的方法是什么?

我试过在我的UIImagePickerController上使用videoQuality设置,但似乎不起作用,因为即使我将其设置为UIImagePickerControllerQualityTypeIFrame960x540,我的视频也会显示为720p (640x480可以工作,但我需要更精细)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-14 22:22:51

您可能想看看AVAssetExportSession,它使重新编码视频变得相当简单。我认为它在可能的情况下也是硬件支持的,就像AVFoundation的其余部分一样:

https://developer.apple.com/library/ios/#DOCUMENTATION/AudioVideo/Conceptual/AVFoundationPG/Articles/01_UsingAssets.html

请注意,它永远不会使视频变得更大,因此不能保证您能获得所需的输出大小。假设您有一个ALAsset实例,下面的代码可能是您想要的东西的起点:

代码语言:javascript
复制
- (void)transcodeLibraryVideo:(ALAsset *)libraryAsset 
        toURL:(NSURL *)fileURL 
        withQuality:(NSString *quality) {
  // get a video asset for the original video file
  AVAsset *asset = [AVAsset assetWithURL:
    [NSURL URLWithString:
      [NSString stringWithFormat:@"%@", 
        [[libraryAsset defaultRepresentation] url]]]];
  // see if it's possible to export at the requested quality
  NSArray *compatiblePresets = [AVAssetExportSession 
    exportPresetsCompatibleWithAsset:asset];
  if ([compatiblePresets containsObject:quality]) {
    // set up the export
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
      initWithAsset:asset presetName:quality];
    exportSession.outputURL = fileURL;
    exportSession.outputFileType = AVFileTypeQuickTimeMovie;
    // run the export
    [exportSession exportAsynchronouslyWithCompletionHandler:^{
      switch ([exportSession status]) {
        case AVAssetExportSessionStatusFailed:
            //TODO: warn of failure
            break;
        case AVAssetExportSessionStatusCancelled:
            //TODO: warn of cancellation
            break;
        default:
            //TODO: do whatever is next
            break;
      }
      [exportSession release];
    }];
  }
  else {
    //TODO: warn that the requested quality is not available
  }
}

例如,您可能希望为540p传递AVAssetExportPreset960x540质量,为720p传递AVAssetExportPreset1280x720质量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9349022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档