-
Notifications
You must be signed in to change notification settings - Fork 209
v3.x_stream_params
3.x版本推流初始化参数设置
KSYStreamerConfig.Builder接口 (v3.x支持)
注:
v3.x代表版本号为3.x.x的推流SDK
SDK提供的初始化参数设置方式为: KSYStreamer类的setXXX接口
- rtmp服务器地址
- 编码类型,默认ENCODE_METHOD_SOFTWAR(软编模式)
- 视频编码模式,默认AVConst.CODEC_ID_AVC
- 推流分辨率,默认VIDEO_RESOLUTION_360P
- 视频码率及码率自适应,码率自适应默认true
- 最大关键帧间隔,默认值3.0
- 音频编码参数
- 音频编码profile设置
- 横竖屏设置,默认竖屏
本SDK 对推流地址没有限制,可以自由设置推流的RTMP服务器地址。
一般rtmp服务器地址由三部分构成: host + appName + streamName
例如: rtmp://test.uplive.ksyun.com/live/888
设置接口:KSYStreamerConfig.Builder.setUrl
-
软编模式:KSYStreamerConfig.ENCODE_METHOD.SOFTWARE
cpu占用较高,但有良好的设备兼容性,而且相同码率下有更好的视频质量 -
硬编模式:KSYStreamerConfig.ENCODE_METHOD.HARDWARE
cpu占用率较低,仅支持4.3版本以上机型
设置接口:KSYStreamerConfig.Builder.setEncodeMethod
builder.setEncodeMethod(KSYStreamerConfig.ENCODE_METHOD.SOFTWARE);
我们建议,低参数推流(比如使用360p/480p分辨率,帧率15fps)时可以设置为软编模式以获得较好的画面质量, 如果需要长时间高参数推流(比如使用720p30fps),可以优先使用硬编码以避免长时间推流后大量发热引起的性能下降, 即建立一个硬编白名单,在白名单内的机型设置为硬编模式,否则再设置为软编模式。
只支持固定分辨率设置: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支持自动实时计算实际网络状况,并据此调整视频码率,以保证直播的流畅性。
- 网络较差时下调视频码率,牺牲视频质量换取流畅度
- 网络变好时上调视频码率,提供较好的视频质量 视频码率有三个配置参数.
- 初始码率 initVideoKbps:
- 刚启动编码时,网络状态未知,可以从较低的码率开始,让码率自适应调整到合适的值
- v3.x下如关闭码率自适应,编码器会以该参数为目标码率
- 最高码率 maxVideoBps:
- 码率自适应的调整上限,表示当网络状况良好时,视频编码所能达到的最大平均码率值
- v3.x如关闭码率自适应,该值无效
- 最低码率 minVideoKbps:
- 码率自适应的调整下限,可根据需求设置
- 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帧有一个关键帧。
// 默认参数:
builder.setIFrameIntervalSec(3);
- v3.x设置接口:KSYStreamer.Builder.setSampleAudioRateInHz
- v3.x设置接口:KSYStreamer.Builder.setAudioBitrate 设置音频码率, 单位为kbps
当前硬编模式下采样率固定为44100, 码率推荐设置为48kbps
软编模式下采样率及码率推荐值可对应下表:
采样率 | 推荐码率 |
---|---|
44100 | 32 |
32000 | 24 |
22050 | 16 |
设置横竖屏代表预览画面需要旋转的角度,对于横屏,需要旋转90或者270度,对于竖屏需要旋转0或者180度
- v3.x 直接调用接口KSYStreamer.Builder.setDefaultLanscape来设置横竖屏
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 | 设置开启手动指定对焦测光区域 | 默认关闭 |