Skip to content

Streamer_Config_Params

chriszeng87 edited this page Jan 10, 2017 · 41 revisions

SDK提供两种初始化参数设置方式:

  1. KSYStreamer类的setXXX接口 (仅v.4.x支持)
  2. KSYStreamerConfig.Builder接口 (v3.x支持)

第二种方式在v4.x也支持,但是只是保留,不会继续维护
如果您是v4.x的用户,请直接使用第一种方式,废弃第二种方式

注:
v3.x代表版本号为3.x.x的推流SDK
v4.x代表版本号为4.x.x的推流SDK


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

rtmp服务器地址

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

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

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

v3.x 设置接口:KSYStreamerConfig.Builder.setUrl

编码类型

v4.x 支持以下三种编码模式:

  • 软编模式:ENCODE_METHOD_SOFTWARE
    支持所有GPU滤镜,cpu占用中等,支持4.4及以上系统,相对硬编有更好的机型兼容性及视频质量。
    如4.4以下的系统设置了该编码模式,则系统会自动fallback至软编兼容模式。 全部设置成软编会浪费大多数配置不错的机器的性能,请不要直接全部设置成软编。
  • 硬编模式:ENCODE_METHOD_HARDWARE
    支持所有GPU滤镜,cpu占用较低,支持4.3及以上系统。
    如4.3以下的系统设置了该编码模式,则系统会自动fallback至软编兼容模式。 全部设置成硬编,在某些机型上会crash,请不要直接全部设置成硬编。
  • 软编兼容模式(同v3.x软编模式):ENCODE_METHOD_SOFTWARE_COMPAT

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

v3.x 支持以下两种编码模式:

  • 软编模式:KSYStreamerConfig.ENCODE_METHOD.SOFTWARE
    cpu占用较高,但有良好的设备兼容性,而且相同码率下有更好的视频质量

  • 硬编模式:KSYStreamerConfig.ENCODE_METHOD.HARDWARE
    cpu占用率较低,仅支持4.3版本以上机型

设置接口:KSYStreamerConfig.Builder.setEncodeMethod

builder.setEncodeMethod(KSYStreamerConfig.ENCODE_METHOD.SOFTWARE);

预览分辨率

只有v4.x 版本才支持预览分辨率设置,设置方法有以下两种:

  • 固定分辨率设置:setPreviewResolution(int)
    定义的分辨率指明了推流分辨率短边的长度,长边会根据推流设备屏幕比例计算(不包括navigation bar的高度)
    此种方式支持以下四种type
type
VIDEO_RESOLUTION_360P
VIDEO_RESOLUTION_480P
VIDEO_RESOLUTION_540P
VIDEO_RESOLUTION_720P

默认值:VIDEO_RESOLUTION_360P

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

推流分辨率

v4.x推流分辨率设置

支持以下两种方式设置:

  • 固定分辨率设置:setTargetResolution(int)
    定义的分辨率指明了推流分辨率短边的长度,长边会根据推流设备屏幕比例计算(不包括navigation bar的高度)
    此种方式支持以下四种type
type
VIDEO_RESOLUTION_360P
VIDEO_RESOLUTION_480P
VIDEO_RESOLUTION_540P
VIDEO_RESOLUTION_720P

默认值VIDEO_RESOLUTION_360P

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

v3.x推流分辨率设置

只支持固定分辨率设置:KSYStreamer.Builder.setVideoResolution(int) 定义的分辨率指明了推流分辨率短边的长度,长边会根据推流设备屏幕比例计算(不包括navigation bar的高度)

此种方式支持以下四种type

type
RecorderConstants.VIDEO_RESOLUTION_360P
RecorderConstants.VIDEO_RESOLUTION_480P
RecorderConstants.VIDEO_RESOLUTION_540P
RecorderConstants.VIDEO_RESOLUTION_720P
builder.setVideoResolution(RecorderConstants.VIDEO_RESOLUTION_360P);

视频码率及码率自适应

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

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

v4.x码率设置方式

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

v3.x码率设置方式

  • 开启/关闭码率自适应:KSYStreamerConfig.Builder.setAutoAdjustBitrate()
  • 设置码率初始值:KSYStreamerConfig.Builder.setMinAverageVideoBitrate(int)
  • 设置码率最大值:KSYStreamerConfig.Builder.setMaxAverageVideoBitrate(int)
  • 设置码率最小值:KSYStreamerConfig.Builder.setMinAverageVideoBitrate(int)

只能在推流开始时设置
码率单位为kbps
例如:

builder.setMaxAverageVideoBitrate(800);
builder.setMinAverageVideoBitrate(200);
builder.setMinAverageVideoBitrate(500);
builder.setAutoAdjustBitrate(true);

码率调整事件通知

当码率调整时,会有相应的事件通知
v4.x 事件和v3.x事件通知存在一定的区别,详细参考状态和错误回调

视频码率推荐值

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

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

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

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

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

最大关键帧间隔

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

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

v4.x设置接口:setIFrameInterval(float)

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

v3.x设置接口:KSYStreamConfig.Builder.setIFrameIntervalSec

// 默认参数:  
builder.setIFrameIntervalSec(3);

音频编码参数

音频采样率

音频码率

当前硬编模式下采样率固定为44100, 码率推荐设置为48kbps

软编模式下采样率及码率推荐值可对应下表:

采样率 推荐码率
44100 32
32000 24
22050 16

音频声道数

只有v4.x支持设置音频ChannelNumber,默认是1 setAudioChannels

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

横竖屏设置

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

  • v3.x 直接调用接口KSYStreamer.Builder.setDefaultLanscape来设置横竖屏
  • v4.x 通过接口setRotateDegrees 参考代码
mStreamer.setRotateDegrees(mIsLandscape ? 90 : 0);

2. v3.x参数表

KSYStreamerConfig.Builder中

方法 功能 推荐值
setSampleAudioRateInHz 设置音频采样率 44100 Hz
setFrameRate 设置推流编码帧率 15 fps
setInitVideoBitrate 设置初始视频编码平均码率 500 kbps
setMaxVideoBitrate 设置最大视频编码平均码率(目标平均码率) 800 kbps
setMinVideoBitrate 设置最小视频编码平均码率 200 kbps
setAudioBitrate 设置音频编码码率 48 kbps
setVideoResolution 设置分辨率等级 VIDEO_RESOLUTION_480P
setIFrameIntervalSec 设置视频编码时的I帧间隔,单位为秒,float型 默认值为 3秒。实际生效方式为 3* videoFPS。 比如15帧每秒,则每45帧有一个关键帧。
setDefaultLandscape 是否以横屏推流,必须同时在manifest或代码里设置Activity为landscape false
setmUrl 设置推流地址 -
setAutoAdjustBitrate 是否打开自适应码率功能,关闭后以MaxVideoBitrate为目标码率 默认打开
setStartPreviewManual 设置手动启动预览,除非调用startCameraPreview接口否则不自动预览 默认关闭
setEnableCameraMirror 设置开启前置摄像头镜像 默认关闭
setManualFocus 设置开启手动指定对焦测光区域 默认关闭

2. v4.x参数表

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. v4.x推流过程中可动态调整参数

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