-
Notifications
You must be signed in to change notification settings - Fork 209
Streamer_Config_Params
SDK提供两种初始化参数设置方式:
- KSYStreamer类的setXXX接口 (仅v.4.x支持)
- KSYStreamerConfig.Builder接口 (v3.x支持)
第二种方式在v4.x也支持,但是只是保留,不会继续维护
如果您是v4.x的用户,请直接使用第一种方式,废弃第二种方式
注:
v3.x代表版本号为3.x.x的推流SDK
v4.x代表版本号为4.x.x的推流SDK
- rtmp服务器地址
- 编码类型,默认ENCODE_METHOD_SOFTWAR(软编模式)
- 预览分辨率,默认VIDEO_RESOLUTION_360P(仅v4.x支持)
- 推流分辨率,默认VIDEO_RESOLUTION_360P
- 视频码率及码率自适应,码率自适应默认true
- 最大关键帧间隔,默认值3.0
- 音频编码参数
- 横竖屏设置,默认竖屏
本SDK 对推流地址没有限制,可以自由设置推流的RTMP服务器地址。
一般rtmp服务器地址由三部分构成: host + appName + streamName
例如: rtmp://test.uplive.ksyun.com/live/888
v4.x 设置接口:setUrl,该接口在推流过程中设置不会生效
v3.x 设置接口:KSYStreamerConfig.Builder.setUrl
- 软编模式: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
-
软编模式: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 |
该接口在推流过程中设置无效,设置会在下一次startCameraPreview时生效
支持以下两种方式设置:
- 固定分辨率设置:setTargetResolution(int)
定义的分辨率指明了推流分辨率短边的长度,长边会根据推流设备屏幕比例计算(不包括navigation bar的高度)
此种方式支持以下四种type
type |
---|
VIDEO_RESOLUTION_360P |
VIDEO_RESOLUTION_480P |
VIDEO_RESOLUTION_540P |
VIDEO_RESOLUTION_720P |
该接口在推流过程中设置无效,设置只在下一次调用startStream时生效
只支持固定分辨率设置: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如关闭码率自适应,该参数无效
- 设置视频码率并关闭码率自适应:setVideoKBitrate(int kbps) 或者 setVideoBitrate(int bps)
- 设置视频三种码率并开启码率自适应:setVideoKBitrate(int initVideoKbps, int maxVideoKbps, int minVideoKbps) 或者 setVideoBitrate(int initVideoBps, int maxVideoBps, int minVideoBps)
接口在推流过程中设置,只能在下一次调用startStream时生效
setXXXKBitrate型接口的码率单位为kbps, setXXXBitrate型接口的码率单位为bps
- 开启/关闭码率自适应: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时生效
// 默认参数:
builder.setIFrameIntervalSec(3);
- v4.x设置接口:setAudioSampleRate(int)
- v3.x设置接口:KSYStreamer.Builder.setSampleAudioRateInHz
- v4.x设置接口:setAudioKBitrate(int kbps) 或者 setAudioBitrate(int bps)
- v3.x设置接口:KSYStreamer.Builder.setAudioBitrate 设置音频码率, 单位为kbps
当前硬编模式下采样率固定为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);
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 | 设置开启手动指定对焦测光区域 | 默认关闭 |
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 | 设置开启前置摄像头镜像 | 默认关闭 |
- 美颜切换:
参考Demo中onBeautyChecked函数 - 美声及其它音频滤镜切换:
参考Demo中onAudioFilterChecked函数; - 背景音切换:
参考Demo中onBgmChecked函数 - 耳返切换:
参考Demo中onAudioPreviewChecked函数 - 静音切换:
参考demo中onMuteChecked函数 - 水印切换:
参考demo中onWaterMarkChecked函数 - 镜像切换:
参考demo中onFrontMirrorChecked函数 - 摄像头切换(不受时间限制):
参考demo中onSwitchCamera函数