Skip to content

captureParams

pengbin edited this page Jul 20, 2017 · 11 revisions

配置采集相关参数

由于提供了两种层次的接口,使用kit类的配置和使用组件化的配置API稍微有一点不同。


通过kit类配置采集相关参数

与采集相关的参数,目前开放的接口主要是:

demo中请参见setCaptureCfg方法


前后摄像头

kit的cameraPosition属性,在开始采集前有效。
通过设置该属性来指定,启动采集时使用哪个摄像头。
启动采集之后,通过kit的switchCamera方法 来切换不同的摄像头。

   kit.cameraPosition = AVCaptureDevicePositionBack;(前置/后置)
   [kit switchCamera];

分辨率 详解

视频分辨率,也就是图像的宽高或者说尺寸,在kit类中存在如下三中类型的分辨率:

  • 采集分辨率: 是指摄像头采集到的画面的分辨率, 作为数据的源头决定了, 后续画面质量的上限
  • 预览分辨率: 是指将采集的画面渲染到主播预览视图的分辨率
  • 推流分辨率: 是指送入到视频压缩并发送到服务器上去的视频的分辨率, 也就是其他观众能看到的画面的分辨率

在启动采集前, 需要设定采集分辨率, 采集分辨率与设备相关, SDK中是直接使用Apple的API定义的分辨率接口来设定的. 可以直接参考Apple的官方文档 kit类的capPreset属性和 KSYGPUCamera类的captureSessionPreset属性, 都是使用Apple的定义的类型.

kit类的capPreset属性可配置取值,请参考:Video Input Presets 一览表

开始预览前, 需要设定预览分辨率, 一般预览分辨率和采集分辨率都可以尽量配置成一致的, 除非宽高比不同. kit类中, 添加了cropFilter 用来修正宽高比, 比如采集的分辨率为 480x640(3:4), 但是手机的比例为(9:16), 需要先裁剪掉两边的黑边, 预览才比较正常. 在kit类中, 提供了previewDimension属性, 指定尺寸后, 会自动计算好需要裁剪的区域. 详细计算过程请参考kit类的代码.

开始推流前, 需要设定推流分辨率, kit类提供了streamDimension属性进行设置. 如果预览和推流的分辨率一致, 那么主播和观众看到的画面质量一致(streamDimension == previewDimension). 当两个属性不相同时, streamDimension会直接对预览的视图进行缩放, 得到推流的画面.

  • 注意: 需要用户自行保证streamDimension和previewDimension的宽高比, 如果两者宽高比不同, 观众看到的画面可能是变形了的
  • 注意: 如果streamDimension大于previewDimension, 观众看到的画面质量并不一定更好,因为数据源的尺寸决定了质量的上限
  • 建议: capPreset == previewDimension >= streamDimension

采集帧率

采集帧率就是每秒采集和编码的视频帧数,建议软编时,设置为15fps左右,硬编码可以设置为24fps。设置过高容易导致设备发热严重。

    kit.videoFPS = 15;

画面朝向

画面朝向描述的是横屏还是竖屏,需要与UI朝向一致,否则会出现画面缺失的情况。

    UIInterfaceOrientation orien = [[UIApplication sharedApplication] statusBarOrientation];
    [kit setVideoOrientationBy:orien];

原始采集数据回调

kit类的原始音视频数据回调,是直接将KSYGPUCamera类的回调数据转发出来的。

    _kit.videoProcessingCallback = ^(CMSampleBufferRef sampleBuffer){
        processVideo(sampleBuffer);
    };
    _kit.audioProcessingCallback =^(CMSampleBufferRef sampleBuffer){
        processAudio(sampleBuffer);
    };

回调的samplebuffer 是未经过任何处理的原始数据。 注意: 请尽量限制回调函数的处理时间,太长会导致卡顿。


通过底层类配置采集相关参数

采集的底层类是指 KSYGPUCamera类, 大部分采集的属性都跟kit类设置的一样,下面主要列举不同的地方

  • 前后摄像头,KSYGPUCamera需要在创建类的初始化时传入摄像头参数
  • 采集分辨率,KSYGPUCamera类只支持iOS提供的原生支持的分辨率, 需要在启动的时候传入参数 具体原生支持的分辨率请参阅相关文档
   KSYGPUCamera *   capDev;
   capDev = [[KSYGPUCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480
                                         cameraPosition:AVCaptureDevicePositionBack];
  • 推流分辨率, 可以通过修改 KSYGPUPicOutput的属性来指定
    KSYGPUPicOutput    * picOutput;
    // 与采集分辨率一致:
    picOutput.bCustomOutputSize = NO;
    // 与采集分辨率不同:
    CGSize sz = CGSizeMake(640, 360);
    picOutput.bCustomOutputSize = YES;
    picOutput.outputSize = rect.size;

1. 推流环节说明

2. 特色功能说明

2.1 采集

2.2 音频处理

2.3 视频处理

2.4 编码

2.5 推流

2.6 输入多样化

2.7 集成

3. 第三方功能

4. 技术专栏

5. 已知问题

8. FAQ

金山云计算

Clone this wiki locally