Skip to content

customOutputSize

pengbin edited this page Apr 25, 2017 · 41 revisions

分辨率进阶设定

1. 目的

  • 预览分辨率和编码推流分辨率可以不一致,这时候,较高的预览分辨率可以让主播预览时画质更清晰。
  • 预览view的frame可以任意尺寸,无需全屏预览。 建议预览view和预览分辨率的宽高比保持一致。

2. 接口说明

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

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

API介绍

详见开源代码:https://github.com/ksvc/KSYLive_iOS/blob/master/source/KSYGPUStreamerKit.h

kit类中, 以上三种属性作用的位置如下图所示:
basic flow


basic flow new

3. 使用说明

设置较高的采集分辨率,该分辨率图像将用于预览。 kit类的capPreset属性可配置取值,请参考:Video Input Presets 一览表

/**
 @abstract   预览分辨率 (仅在开始采集前设置有效)
 @discussion 内部始终将较大的值作为宽度 (若需要竖屏,请设置 videoOrientation)
 @discussion 宽高都会向上取整为4的整数倍
 @discussion 有效范围: 宽度[160, 1920] 高度[ 90,  1080], 超出范围会取边界有效值
 @discussion 当预览分辨率与采集分辨率不一致时:
  若宽高比不同, 先进行裁剪, 再进行缩放
  若宽高比相同, 直接进行缩放
 @discussion 默认值为(640, 360)
 */
@property (nonatomic, assign)   CGSize previewDimension;

/**
 @abstract   用户定义的视频 **推流** 分辨率
 @discussion 有效范围: 宽度[160, 1280] 高度[ 90,  720], 超出范围会取边界有效值
 @discussion 其他与previewDimension限定一致,
 @discussion 当与previewDimension不一致时, 仅仅进行缩放
 @discussion 默认值为(640, 360)
 @see previewDimension
 */
@property (nonatomic, assign)   CGSize streamDimension;
  • 设置采集分辨率
设置预览分辨率
_kit.previewDimension = [self.presetCfgView capResolutionSize];
//采集分辨率
- (CGSize) capResolutionSize {
    NSInteger idx = _resolutionUI.selectedSegmentIndex;//_resolutionUI指的是上图中的采集分辨率分段控制器
    return [self dimensionToSize:idx];
}
//分辨率
- (CGSize) dimensionToSize:(NSInteger)idx {
    switch (idx) {
        case 0:
            return  CGSizeMake(640, 360);
        case 1:
            return  CGSizeMake(960, 540);
        case 2:
            return  CGSizeMake(1280, 720);
        case 3:
            return  CGSizeMake(640, 480);
        default:
            return  CGSizeMake(640, 360);
    }
}
  • 设置推流分辨率
//设置推流分辨率
_kit.streamDimension  = [self.presetCfgView strResolutionSize];
//推流分辨率
- (CGSize) strResolutionSize {
    NSInteger idx = _streamResoUI.selectedSegmentIndex;
    return [self dimensionToSize:idx];
}
- (CGSize) dimensionToSize:(NSInteger)idx {
    switch (idx) {
        case 0:
            return  CGSizeMake(640, 360);
        case 1:
            return  CGSizeMake(960, 540);
        case 2:
            return  CGSizeMake(1280, 720);
        case 3:
            return  CGSizeMake(640, 480);
        default:
            return  CGSizeMake(640, 360);
    }
}

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