-
Notifications
You must be signed in to change notification settings - Fork 271
customOutputSize
pengbin edited this page Apr 25, 2017
·
41 revisions
- 预览分辨率和编码推流分辨率可以不一致,这时候,较高的预览分辨率可以让主播预览时画质更清晰。
- 预览view的frame可以任意尺寸,无需全屏预览。 建议预览view和预览分辨率的宽高比保持一致。
视频分辨率,也就是图像的宽高或者说尺寸,在kit类中存在如下三中类型的分辨率:
- 采集分辨率: 是指摄像头采集到的画面的分辨率, 作为数据的源头决定了, 后续画面质量的上限
- 预览分辨率: 是指将采集的画面渲染到主播预览视图的分辨率
- 推流分辨率: 是指送入到视频压缩并发送到服务器上去的视频的分辨率, 也就是其他观众能看到的画面的分辨率
详见开源代码:https://github.com/ksvc/KSYLive_iOS/blob/master/source/KSYGPUStreamerKit.h
kit类中, 以上三种属性作用的位置如下图所示:
设置较高的采集分辨率,该分辨率图像将用于预览。 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);
}
}