-
Notifications
You must be signed in to change notification settings - Fork 271
liveScene
-
适用性说明
v1.7.0版本支持该功能,请更新至v1.7.0后调用。
场景编码适用于KSYVideoCodec_X264(视频编码器 - h264 软件编码器),在给定性能和场景参数后,会极大提升直播画面质量和有效降低CPU负载。
性能和场景开始推流前设置有效,在成功推流后不支持动态修改。
-
适用性说明
v1.8.2版本支持该功能,请更新至v1.8.2后调用。
场景编码适用于KSYVideoCodec_VT264(视频编码器 - 硬件编码器),不支持场景参数设置,只支持性能参数设置。 性能参数开始推流前设置有效,在成功推流后不支持动态修改。
typedef NS_ENUM(NSUInteger, KSYLiveScene) {
/// 默认通用场景(不确定场景时使用)
KSYLiveScene_Default = 0,
/// 秀场场景, 主播上半身为主
KSYLiveScene_Showself,
/// 游戏场景
KSYLiveScene_Game,
// others comming soon
};
只支持KSYVideoCodec_X264
typedef NS_ENUM(NSUInteger, KSYRecScene) {
/// 恒定码率场景
KSYRecScene_ConstantBitRate = 0,
/// 恒定质量场景
KSYRecScene_ConstantQuality,
};
只支持KSYVideoCodec_X264
typedef NS_ENUM(NSUInteger, KSYVideoEncodePerformance) {
/// 低功耗: cpu资源消耗低一些,视频质量差一些
KSYVideoEncodePer_LowPower= 0,
/// 均衡档次: 性价比比较高
KSYVideoEncodePer_Balance,
/// 高性能: 画面质量高
KSYVideoEncodePer_HighPerformance,
};
只支持KSYVideoCodec_X264 和 KSYVideoCodec_VT264
-
特别说明
- KSYVideoEncodePer_LowPower 对应Video Toolbox H.264 baseline profile编码;
- KSYVideoEncodePer_Balance对应Video Toolbox H.264 main profile编码;
- KSYVideoEncodePer_HighPerformance对应Video Toolbox H.264 high profile编码; 希望提升硬编情况下压缩性能,请使用KSYVideoEncodePer_HighPerformance档
设置场景和视频编码性能档次(在这里的代码中仅仅是为了展示设置方法,客户可以根据实际情况来配置)
- (void) updateStreamCfg: (BOOL) bStart {
_kit.streamerBase.liveScene = KSYLiveScene_Default;(通用场景)
_kit.streamerBase.recScene = KSYRecScene_ConstantBitRate;(恒定码率场景)
_kit.streamerBase.videoEncodePerf = KSYVideoEncodePer_LowPower;(低功耗模式)
}
推流:
- (void) onStream{
if (_kit.streamerBase.streamState == KSYStreamStateIdle ||
_kit.streamerBase.streamState == KSYStreamStateError) {
[self updateStreamCfg:YES];
[_kit.streamerBase startStream:self.hostURL];
}
else {
[self updateStreamCfg:NO];
[_kit.streamerBase stopStream];
}
}
以下数据以v1.6.3 KSYVideoCodec_X264表现为对比,在相同fps、gop、分辨率情况下,保持画质不变的前提下,CPU占用和码率变化对比。
此时KSYLiveScene取值:KSYLiveScene_Default。
性能档次 | CPU占用 | 码率变动 |
---|---|---|
KSYVideoEncodePer_LowPower | -26.6% | -5.5% |
KSYVideoEncodePer_Balance | -16.6% | -9.1% |
KSYVideoEncodePer_HighPerformance | 0% | -12.6% |
在通用场景下,
- KSYVideoEncodePer_LowPower,低功耗模式,相比v1.6.3,CPU占用降低26.6%,码率节省5.5%.
- KSYVideoEncodePer_Balance, 均衡模式,相比v1.6.3,CPU占用降低16.6%,码率节省9.1%.
- KSYVideoEncodePer_HighPerformance, 高性能模式,相比v1.6.3,CPU占用无变化,码率节省12.6%.
这里可以看出,相比v1.6.3,高性能模式和之前CPU占用无变化,码率却节省了12.6%。推荐从v1.6.3平滑迁移过来后,首先使用通用场景的高性能模式,在保持码率不变的情况下,会额外获得直播画面主观质量的明显提升。
同时推荐在iphone5等设备上使用低功耗模式,可以有效降低CPU占用的同时,提供一定的主观质量。
此时KSYLiveScene取值:KSYLiveScene_ShowSelf。
性能档次 | CPU占用 | 码率变动 |
---|---|---|
KSYVideoEncodePer_LowPower | -28.8% | -5.1% |
KSYVideoEncodePer_Balance | -6.1% | -14% |
KSYVideoEncodePer_HighPerformance | +16% | -22% |
在秀场场景下,
- KSYVideoEncodePer_LowPower,低功耗模式,相比v1.6.3,CPU占用降低28.8%,码率节省5.1%.
- KSYVideoEncodePer_Balance, 均衡模式,相比v1.6.3,CPU占用降低6.1%,码率节省14%.
- KSYVideoEncodePer_HighPerformance, 高性能模式,相比v1.6.3,CPU占用提升16%,码率节省22%.
这里可以看出,在iphone6s/6s plus等机型上使用高性能模式,在保证码率不变的情况下,可以有效提升直播画面画质。推荐在高端机型上使用秀场高性能模式。
金山云通过对线上主播场景的分析,在主播上半身占画面主要内容时,使用秀场模式,可以有效降低带宽,或者有效提升画面质量。此时选用该模式进行运动场景、户外风格拍摄时,会引入一定的负作用(效果也不会差于默认模式),请根据业务选用合适场景。
可以看出,如果是通常移动直播场景,主播在camera前做相关直播时,使用高性能模式,秀场模式会比通用模式多节省9.4%码流。
如果选用低功耗模式,秀场模式也会比通用模式CPU占用降低5.3%的同时,节省额外的2.8%的码流。
由于大多数主播使用的iOS设备性能都比较好,建议在保持和前一个版本相同码率设置的情况下,使用秀场高性能模式,将为使用高端移动设备采集的主播带来明显的直播画质提升。