Skip to content

Streamer_Config_Params

buliaoyin edited this page Feb 7, 2018 · 41 revisions

SDK提供的初始化参数设置方式为: KSYStreamer类的setXXX接口


1. 推流前必须设置的参数:

rtmp服务器地址

本SDK 对推流地址没有限制,可以自由设置推流的RTMP服务器地址。

一般rtmp服务器地址由三部分构成: host + appName + streamName
例如: rtmp://test.uplive.ksyun.com/live/888

设置接口:setUrl,该接口在推流过程中设置不会生效

编码类型

支持以下三种编码模式:

  • 软编模式:ENCODE_METHOD_SOFTWARE
    支持所有GPU滤镜,cpu占用较高,支持4.4及以上系统,相对硬编有更好的机型兼容性,而且相同码率下有更好的视频质量。
    该模式下如果设置了比较高的编码参数(比如720p分辨率),长时间推流可能会导致手机发热严重,帧率下降等问题。
    如4.4以下的系统设置了该编码模式,则系统会自动fallback至软编兼容模式。
  • 硬编模式:ENCODE_METHOD_HARDWARE
    支持所有GPU滤镜,cpu占用最低,支持4.3及以上系统。
    该模式下推流,功耗最低,不过相对于软编,同码率下的画面质量差很多, 而且在某些机型上可能会导致应用crash,不建议全部设置成硬编, 可以通过测试过的硬编白名单来设置。
    如4.3以下的系统设置了该编码模式,则系统会自动fallback至软编兼容模式。
  • 软编兼容模式:ENCODE_METHOD_SOFTWARE_COMPAT
    该模式只是为了兼容比较老版本的Android机型而提供的,功能受限,美颜仅支持Denoise。 正常情况下不要设置为该模式,因为设置成ENCODE_METHOD_SOFTWARE模式之后, 在不支持的机型上可以自动fallback到该模式。

设置接口:setEncodeMethod,该接口在推流过程中设置会抛异常IllegalStateException

配置建议

我们建议,低参数推流(比如使用360p/480p分辨率,帧率15fps)时可以设置为软编模式以获得较好的画面质量, 如果需要长时间高参数推流(比如使用720p30fps),可以优先使用硬编码以避免长时间推流后大量发热引起的性能下降, 即建立一个硬编白名单,在白名单内的机型设置为硬编模式,否则再设置为软编模式。

视频编码模式

SDK从v4.1.0开始支持265推流,可通过 setVideoCodecId(int) 接口设置。可取值有:

  • AVConst.CODEC_ID_AVC 使用H264编码
  • AVConst.CODEC_ID_HEVC 使用H265编码

该属性与软硬编设置是独立的,如果设置为硬编264模式,而机型不支持的话,会fallback到264软编模式。

预览分辨率

设置方法有以下两种:

  • 固定分辨率设置:setPreviewResolution(int)
    定义的分辨率指明了推流分辨率短边的长度,长边会根据推流设置的预览View尺寸来计算。
    此种方式支持以下四种type
type
VIDEO_RESOLUTION_360P
VIDEO_RESOLUTION_480P
VIDEO_RESOLUTION_540P
VIDEO_RESOLUTION_720P

默认值:VIDEO_RESOLUTION_360P

该接口在推流过程中设置无效,设置会在下一次startCameraPreview时生效

推流分辨率

支持以下两种方式设置:

  • 固定分辨率设置:setTargetResolution(int)
    定义的分辨率指明了推流分辨率短边的长度,长边会根据推流设置的预览View尺寸来计算。
    此种方式支持以下四种type
type
VIDEO_RESOLUTION_360P
VIDEO_RESOLUTION_480P
VIDEO_RESOLUTION_540P
VIDEO_RESOLUTION_720P

默认值VIDEO_RESOLUTION_360P

该接口在推流过程中设置无效,设置只在下一次调用startStream时生效

视频码率及码率自适应

SDK支持自动实时计算实际网络状况,并据此调整视频码率,以保证直播的流畅性。

  • 网络较差时下调视频码率,牺牲视频质量换取流畅度
  • 网络变好时上调视频码率,提供较好的视频质量 视频码率有三个配置参数.
  • 初始码率 initVideoKbps:
    • 刚启动编码时,网络状态未知,可以从较低的码率开始,让码率自适应调整到合适的值
  • 最高码率 maxVideoBps:
    • 码率自适应的调整上限,表示当网络状况良好时,视频编码所能达到的最大平均码率值
  • 最低码率 minVideoKbps:
    • 码率自适应的调整下限,可根据需求设置

带宽估计模式

从v4.2.3版本开始,SDK支持配置不同的带宽估计模式来实现网络自适应。

配置接口:setBwEstStrategy(int)
可选值:

  • RtmpPublisher.BW_EST_STRATEGY_NORMAL:
    • 默认模式,比较平稳,会在网络拥塞时稳步下调发送码率,网络状态良好时稳步升高发送码率.
  • RtmpPublisher.BW_EST_STRATEGY_NEGATIVE:
    • 流畅优先模式,会在网络拥塞时快速下调发送码率,网络状态良好时慢速升高发送码率(消极上调, 极速下调).

码率设置方式

接口在推流过程中设置,只能在下一次调用startStream时生效
setXXXKBitrate型接口的码率单位为kbps, setXXXBitrate型接口的码率单位为bps

码率调整事件通知

当码率调整时,会有相应的事件通知
详细参考状态和错误回调

视频码率推荐值

码率的设置都需要跟分辨率以及应用场景相关。大致的选择规律如下:

  • 分辨率越高,需要的码率越高。
  • 视频场景越复杂,运动越剧烈,需要的码率也越高。

硬编模式下,不同机型的编码质量差异较大,还请自行斟酌。

软编模式下推流分辨率及码率推荐值可对应下表(帧率统一为15fps):

分辨率 推荐码率
360p 400
480p 600
540p 700
720p 1000

最大关键帧间隔

最大关键帧间隔,一般说的GOP长度。每一个关键帧表示随机访问的点,但是关键帧的大小比非关键帧大很多。

关键帧间隔越小,表示关键帧越多,但是压缩率也会越低,请合理选择。
默认值为 3秒。实际生效方式为 3* videoFPS。 比如15帧每秒,则每45帧有一个关键帧。

设置接口:setIFrameInterval(float)

接口在推流过程中设置,只能在下一次调用startStream时生效

音频编码参数

音频采样率

音频码率

在44100采样率下,不同aac profile及声道数下的推荐码率(kbps)参见下表:

AAC profile 单声道 双声道
PROFILE_AAC_LOW 48 96
PROFILE_AAC_HE 32 64
PROFILE_AAC_HE_V2 - 48

音频声道数

支持设置音频ChannelNumber,可选值为1(单声道)或2(双声道),默认是1.
参见: setAudioChannels(int)
建议在开启背景音乐推流时设置为双声道(立体声)。

音频编码profile设置

从v4.1.4开始,SDK支持配置AAC编码的profile,参见接口setAudioEncodeProfile
可以配置如下profile参数:

  • AVConst.PROFILE_AAC_LOW 表示AAC LC档次,编码复杂度较低,单声道模式需要48kbps码率来保证声音质量
  • AVConst.PROFILE_AAC_HE 推流的默认档次,编码效率较LC档次有提升,可以较LC档次降低一半码率而声音质量没有太大下降
  • AVConst.PROFILE_AAC_HE_V2 在HE档次的基础上加入了对双声道的优化,立体声推流时,选择该档次可以设置低于2倍单声道的码率

接口在推流过程中设置,只能在下一次调用startStream时生效

横竖屏设置

设置横竖屏代表预览画面需要旋转的角度,对于横屏,需要旋转90或者270度,对于竖屏需要旋转0或者180度

mStreamer.setRotateDegrees(mIsLandscape ? 90 : 0);

2. 参数表

KSYStreamer中方法,javadoc 参考KSYStreamer

方法 功能 推荐值
setAudioSampleRate 设置音频采样率 44100 Hz
setPreviewFps 设置预览编码帧率 15 fps
setTargetFps 设置推流编码帧率 15 fps
setVideoBitrate(int initbitrate) 设置初始视频码率 500 kbps
setVideoBitrate(int initVideoBitrate,
int maxVideoBitrate, int minVideoBitrate)
设置初始、最大、最小视频码率) 800 kbps、200kbps
setAudioBitrate 设置音频编码码率 48 kbps
setPreviewResolution 设置预览分辨率 VIDEO_RESOLUTION_480P
setTargetResolution 设置推流分辨率 VIDEO_RESOLUTION_480P
setIFrameInterval 设置视频编码时的I帧间隔,单位为秒,float型 默认值为 3秒。实际生效方式为 3* videoFPS。 比如15帧每秒,则每45帧有一个关键帧。
setRotateDegrees 旋转角度 横屏:90/270;竖屏:0/180
setUrl 设置推流地址 -
setEncodeMethod 编码方式 ENCODE_METHOD_SOFTWARE
setFrontCameraMirror 设置开启前置摄像头镜像 默认关闭

3. 推流过程中可动态调整参数

  • 美颜切换:
    参考Demo中onBeautyChecked函数
  • 美声及其它音频滤镜切换:
    参考Demo中onAudioFilterChecked函数;
  • 背景音切换:
    参考Demo中onBgmChecked函数
  • 耳返切换:
    参考Demo中onAudioPreviewChecked函数
  • 静音切换:
    参考demo中onMuteChecked函数
  • 水印切换:
    参考demo中onWaterMarkChecked函数
  • 镜像切换:
    参考demo中onFrontMirrorChecked函数
  • 摄像头切换(不受时间限制):
    参考demo中onSwitchCamera函数
Clone this wiki locally