文档首页 > > 短视频解决方案> 短视频SDK> iOS SDK> 采集录制

采集录制

分享
更新时间: 2019/08/02 10:28

SDK中录制的相关接口是在NvsStreamingContext类里,提供“系统录制”和“带特效录制”两种方式,用户可根据需要选择使用任意一种。

SDK提供断点录制功能,可以在独立文件之间加入各种转场特技。

表1 采集录制说明

方式

特征

优点

缺点

系统录制

录制的视频不带特效,且其横纵比也不是预设的横纵比值

不会出现丢帧

录制完毕,无法得到期望横纵比的视频(比如想录制1:1视频,结果会得到9:16的视频)。

要生成带美颜,特效以及期望横纵比的视频,则需要设置包括图像宽高, 像素比等相关参数(如生成1:1视频,则图像宽高设为同一值)来创建时间线,然后添加轨道,片段,及相应的特效,最后生成预期的视频。

带特效录制

录制完成,会得到预设的横纵比的视频,同时特效也会写进录制的视频中

在录制过程中就会加上美颜,视频特效等素材,录制完成后,就可以得到预期横纵比的视频

录制效果与当前用户手机配置强相关。手机性能配置不同,带特效录制时可能会出现不一样的效果。对于一个低性能的手机,如果添加的特效过多,处理起来过于复杂,可能会导致录制的视频卡顿,丢帧。 对于android手机来说,android本身可能存在某些问题,导致在录制时可能还会出现花屏,重影等不可预知的问题。

断点录制

循环调用开始录制(startRecording())和结束录制(stopRecording())

独立文件之间可以加入各种转场特技,避免了因转换场景而造成的视频画面生硬的切换

录制产生了多个文件,需要用户自己维护和删除视频数据, 并需要通过后续的编辑操作将断点录制的文件生成一个完整的新文件。

录制流程

录制功能需要获取摄像头和麦克风权限,否则无法录制。视频录制的流程如下图。

初始化NvsStreamingContext

  1. 初始化NvsStreamingContext类,然后在其它地方使用时获取NvsStreamingContext的对象,NvsStreamingContext是单例类。

    NvsStreamingContext初始化代码如下:
    _context = [NvsStreamingContext sharedInstance];

  2. 不再使用SDK或者程序退出前销毁NvsStreamingContext类的对象。代码如下:

    _context = nil;         
    [NvsStreamingContext destroyInstance];
    说明:
    • 请务必保证不要中途销毁NvsStreamingContext 类的对象。
    • NvsStreamingContext类的第二个参数为授权文件的路径,没有授权文件时给空字符串。

开启预览

  1. 设置NvsLiveWindow控件。NvsLiveWindow类是用来录制预览或者编辑预览。NvsLiveWindow的宽高比应该是1:1,4:3,16:9,9:16等,最好与采集预览startCapturePreview()的参数aspectRatio值保持一致。否则,预览的图像是录制完的视频被裁剪后的图像。 NvsLiveWindow的填充模式如下。
     typedef enum {             
    //图像按比例均匀填充,必要时进行裁剪(默认模式)             
    NvsLiveWindowFillModePreserveAspectCrop = 0,             
    //图像均匀地缩放来适合窗口,没有裁剪             
    NvsLiveWindowFillModePreserveAspectFit,             
    //图像被缩放来适合窗口             
    NvsLiveWindowFillModeStretch         
    } 
    NvsLiveWindowFillMode;
  2. 设置预览参数。
    // 可用采集设备的数量         
    if ([_context captureDeviceCount] == 0) {             
    NSLog(@"没有可用于采集的设备");             
    return;         
    }          
    // 将采集预览输出连接到NvsLiveWindow控件         
    if (![_context connectCapturePreviewWithLiveWindow:self.liveWindow]) {             
    NSLog(@"连接预览窗口失败");             
    return;         
    }        
    // 给NvsStreamingContext设置代理(必须要设置)        
     _context.delegate = self;
  3. 启动预览。
    //启动采集预览,使用高质量、横纵比为1:1的设置启动采集预览,最好与LiveWindow适配         
    _aspectRatio.den = 1;         
    _aspectRatio.num = 1;         
    if (![_context startCapturePreview:0 videoResGrade:NvsVideoCaptureResolutionGradeHigh flags:0 aspectRatio:&m_aspectRatio]) 
    {             
        ......        
     }

录制设置

//自动聚焦的目标点,坐标为实时预览窗口的自身坐标系  
- (void)startAutoFocus:(CGPoint)focusPointOfInterest;
//取消自动聚焦        
- (void)cancelAutoFocus;   
//启动自动曝光      
- (void)startAutoExposure:(CGPoint)pointOfInterest; 
//设置缩放        
- (void)setZoomFactor:(float)zoomFactor; 
//获取缩放        
- (float)getZoomFactor; 
//开关闪光灯        
- (void)toggleFlash:(BOOL)on;  
//获取闪光灯状态       
- (BOOL)isFlashOn; 
//设置曝光补偿      
- (void)setExposureBias:(float)exposureBias; 
//获取曝光补偿        
- (float)getExposureBias;

特效设置

  • 美颜特效
    添加美颜特效后,在预览窗口可以看到美颜效果。录制视频时,用户需要根据手机性能任意选择带美颜录制或者不带美颜录制方式。美颜特效参数Strength与Whitening分别对应磨皮与美白,Demo的beauty示例的所给值即推荐值。
    //获取美颜特技描述信息         
    NvsFxDescription *fxDescription = [_context getVideoFxDescription:@"Beauty"];
    //获取描述的所有参数信息         
    NSArray* paramInfoArray = [fxDescription getAllParamsInfo];
    for (NSDictionary *dic in paramInfoArray) {             
        NSString* paramName = [dic objectForKey:@"paramName"];             
        if ([paramName isEqualToString:@"Strength"]) {                 
        //获取美颜磨皮最大值                 
        double maxValue = [[dic objectForKey:@"floatMaxVal"] floatValue];                 
        //获取美颜磨皮当前值                 
        _strengthValue = [[dic objectForKey:@"floatDefVal"] floatValue];                     
                                                   }        
                                       }   
    //添加美颜特效        
     NvsCaptureVideoFx* fx = [_context appendBeautyCaptureVideoFx]; 
    //设置美颜磨皮值       
    [fx setFloatVal:@"Strength" val:_strengthValue]; 
    //设置美白强度值       
    [fx setFloatVal:@"Whitening" val:_whiteningValue];
  • 采集特效(滤镜)

    采集特效分为内建采集特效和扩展采集特效。扩展采集特效即通过资源包安装而得到的采集特效。

    1. 添加内建采集特效。
      //获取所有内建采集特效的名称。内建特效名称可参见表2。      
      [_context getAllBuiltinCaptureVideoFxNames];          
      /添加内建采集特效         
      [_context appendBuiltinCaptureVideoFx:fxName];         
      //移除所有采集视频特效         
      [_context removeAllCaptureVideoFx];
    2. 添加扩展采集特效。
      //首先需要安装扩展采集特效所对应的资源包,获取资源包对应的包ID值,然后才可添加扩展采集特效。资源包包括主题包,字幕样式包,动画贴纸包,转场包,滤镜包等。
      //安装一个视频采集特效包,此处采用同步安装方式,如果资源包尺寸太大或者根据需要可使用异步安装方式         
      _fxPackageId = [[NSMutableString alloc] initWithString:@""];         
      NSString *appPath =[[NSBundle mainBundle] bundlePath];         
      NSString *package1Path = [appPath stringByAppendingPathComponent:@"7FFCF99A-5336-4464-BACD-9D32D5D2DC5E.videofx"];         
        if (![[NSFileManager defaultManager] fileExistsAtPath:package1Path]) {             
          NSLog(@"包裹1不存在");         
          } 
        else {             
          // 此处采用同步安装方式,如果包裹过大可采用异步方式             
          NvsAssetPackageManagerError error = [_context.assetPackageManager installAssetPackage:package1Path license:nil type:NvsAssetPackageType_VideoFx sync:YES assetPackageId:_fxPackageId];                                                                        
         if (error != NvsAssetPackageManagerError_NoError && error != NvsAssetPackageManagerError_AlreadyInstalled) {                 
          NSLog(@"包裹1安装失败");             
             }         
           }          
      //添加扩展采集特效         
      [_context appendPackagedCaptureVideoFx:_fxPackageId];
    表2 内建采集特效及名称

    特效类型

    特效名称

    内建音频特效(Builtin Audio Fx)

    Audio Echo、Male Voice、Female Voice、Cartoon Voice、Fast Cartoon Voice、Monster Voice、Audio Reverb、Audio Wahwah

    内建视频特效(Builtin Video Fx)

    Sage、Maid、Mace、Lace、Mall、Sap、Sara、Pinky、Sweet、Fresh、Beauty、Color Property、Transform 2D、CC Basic、Lut

    内建视频采集特效(Builtin Capture VideoFx)

    Sage、Maid、Mace、Lace、Mall、Sap、Sara、Pinky、Sweet、Fresh、Beauty、Face Effect、Lut

    内建视频转场(Builtin Video Transition)

    Fade、Turning、Swap、Stretch In、Page Curl、Lens Flare、Star、Dip To Black、Dip To White、Push To Right、Push To Top、Upper Left Into

    各特效的参数说明请参见参数说明

开始录制

有两种录制视频的方式,详情可参见表1

  • 系统录制
    // 使用不带有特效的录制方式,此方式只能录制相机采集到的原始图像,不带有任何特效,宽高比也由相机设备自身决定      
    [_context startRecording:outputFilePath];//outputFilePath是录制视频文件的路径
  • 带特效录制
    // 使用带有特效的录制方式,此方式可以录制预览所见的所有效果,包括特效和宽高比       
    [_context startRecordingWithFx:outputFilePath];

停止录制

//停止录制
 [_context stopRecording];
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区