Skip to content

liveScene

jiangdsuccess edited this page May 31, 2017 · 18 revisions

1.场景编码简介

1.1 软编

  • 适用性说明
    v1.7.0版本支持该功能,请更新至v1.7.0后调用。

场景编码适用于KSYVideoCodec_X264(视频编码器 - h264 软件编码器),在给定性能和场景参数后,会极大提升直播画面质量和有效降低CPU负载。
性能和场景开始推流前设置有效,在成功推流后不支持动态修改。

1.2 硬编

  • 适用性说明
    v1.8.2版本支持该功能,请更新至v1.8.2后调用。

场景编码适用于KSYVideoCodec_VT264(视频编码器 - 硬件编码器),不支持场景参数设置,只支持性能参数设置。 性能参数开始推流前设置有效,在成功推流后不支持动态修改。

2.调用示例(以kit类为例)

2.1 直播场景展示:

typedef NS_ENUM(NSUInteger, KSYLiveScene) {
    /// 默认通用场景(不确定场景时使用)
    KSYLiveScene_Default = 0,
    /// 秀场场景, 主播上半身为主
    KSYLiveScene_Showself,
    /// 游戏场景
    KSYLiveScene_Game,
    // others comming soon
};

只支持KSYVideoCodec_X264

2.2 录制场景展示:

typedef NS_ENUM(NSUInteger, KSYRecScene) {
    /// 恒定码率场景
    KSYRecScene_ConstantBitRate = 0,
    /// 恒定质量场景
    KSYRecScene_ConstantQuality,
};

只支持KSYVideoCodec_X264

2.3 视频编码性能档次

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档

2.4 设置方法

设置场景和视频编码性能档次(在这里的代码中仅仅是为了展示设置方法,客户可以根据实际情况来配置)
- (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];
    }
}

3.提升数据

以下数据以v1.6.3 KSYVideoCodec_X264表现为对比,在相同fps、gop、分辨率情况下,保持画质不变的前提下,CPU占用和码率变化对比。

3.1 通用场景

此时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占用的同时,提供一定的主观质量。

3.2 秀场场景

此时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等机型上使用高性能模式,在保证码率不变的情况下,可以有效提升直播画面画质。推荐在高端机型上使用秀场高性能模式。

3.3 场景结论

金山云通过对线上主播场景的分析,在主播上半身占画面主要内容时,使用秀场模式,可以有效降低带宽,或者有效提升画面质量。此时选用该模式进行运动场景、户外风格拍摄时,会引入一定的负作用(效果也不会差于默认模式),请根据业务选用合适场景。

可以看出,如果是通常移动直播场景,主播在camera前做相关直播时,使用高性能模式,秀场模式会比通用模式多节省9.4%码流。

如果选用低功耗模式,秀场模式也会比通用模式CPU占用降低5.3%的同时,节省额外的2.8%的码流。

由于大多数主播使用的iOS设备性能都比较好,建议在保持和前一个版本相同码率设置的情况下,使用秀场高性能模式,将为使用高端移动设备采集的主播带来明显的直播画质提升。

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