繁体   English   中英

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

[英]What is the best way to transcode a video in objective-c (iOS)?

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

我可以逐帧读取视频,调整大小并保存到光盘但这似乎不是很有效。 什么是最简单,最快速的方式来转换我可以提供给我的视频处理库的视频?

我已尝试在我的UIImagePickerController上使用videoQuality设置,但似乎它不起作用,即使我将其设置为UIImagePickerControllerQualityTypeIFrame960x540我的视频出现为720p(640x480正在工作,但我需要更细粒度)。

您可能希望查看AVAssetExportSession,这使得重新编码视频变得相当简单。 我认为它也可以像AVFoundation的其余部分一样支持硬件:

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

请注意,它永远不会使视频大于现有视频,因此无法保证获得您请求的输出大小。 假设您有一个ALAsset实例,以下代码可能是您想要的开头:

- (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的质量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM