-
Notifications
You must be signed in to change notification settings - Fork 209
Streamer_Config_Params
SDK提供的初始化参数设置方式为: KSYStreamer类的setXXX接口
- rtmp服务器地址
- 编码类型,默认ENCODE_METHOD_SOFTWAR(软编模式)
- 视频编码模式,默认AVConst.CODEC_ID_AVC
- 预览分辨率,默认VIDEO_RESOLUTION_360P
- 推流分辨率,默认VIDEO_RESOLUTION_360P
- 视频码率及码率自适应,码率自适应默认true
- 最大关键帧间隔,默认值3.0
- 音频编码参数
- 音频编码profile设置
- 横竖屏设置,默认竖屏
本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 |
该接口在推流过程中设置无效,设置会在下一次startCameraPreview时生效
支持以下两种方式设置:
- 固定分辨率设置:setTargetResolution(int)
定义的分辨率指明了推流分辨率短边的长度,长边会根据推流设置的预览View尺寸来计算。
此种方式支持以下四种type
type |
---|
VIDEO_RESOLUTION_360P |
VIDEO_RESOLUTION_480P |
VIDEO_RESOLUTION_540P |
VIDEO_RESOLUTION_720P |
该接口在推流过程中设置无效,设置只在下一次调用startStream时生效
SDK支持自动实时计算实际网络状况,并据此调整视频码率,以保证直播的流畅性。
- 网络较差时下调视频码率,牺牲视频质量换取流畅度
- 网络变好时上调视频码率,提供较好的视频质量 视频码率有三个配置参数.
- 初始码率 initVideoKbps:
- 刚启动编码时,网络状态未知,可以从较低的码率开始,让码率自适应调整到合适的值
- 最高码率 maxVideoBps:
- 码率自适应的调整上限,表示当网络状况良好时,视频编码所能达到的最大平均码率值
- 最低码率 minVideoKbps:
- 码率自适应的调整下限,可根据需求设置
从v4.2.3版本开始,SDK支持配置不同的带宽估计模式来实现网络自适应。
配置接口:setBwEstStrategy(int)
可选值:
- RtmpPublisher.BW_EST_STRATEGY_NORMAL:
- 默认模式,比较平稳,会在网络拥塞时稳步下调发送码率,网络状态良好时稳步升高发送码率.
- RtmpPublisher.BW_EST_STRATEGY_NEGATIVE:
- 流畅优先模式,会在网络拥塞时快速下调发送码率,网络状态良好时慢速升高发送码率(消极上调, 极速下调).
- 设置视频码率并关闭码率自适应: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
当码率调整时,会有相应的事件通知
详细参考状态和错误回调
码率的设置都需要跟分辨率以及应用场景相关。大致的选择规律如下:
- 分辨率越高,需要的码率越高。
- 视频场景越复杂,运动越剧烈,需要的码率也越高。
硬编模式下,不同机型的编码质量差异较大,还请自行斟酌。
软编模式下推流分辨率及码率推荐值可对应下表(帧率统一为15fps):
分辨率 | 推荐码率 |
---|---|
360p | 400 |
480p | 600 |
540p | 700 |
720p | 1000 |
最大关键帧间隔,一般说的GOP长度。每一个关键帧表示随机访问的点,但是关键帧的大小比非关键帧大很多。
关键帧间隔越小,表示关键帧越多,但是压缩率也会越低,请合理选择。
默认值为 3秒。实际生效方式为 3* videoFPS。 比如15帧每秒,则每45帧有一个关键帧。
接口在推流过程中设置,只能在下一次调用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)
建议在开启背景音乐推流时设置为双声道(立体声)。
从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度
- 通过接口setRotateDegrees 参考代码
mStreamer.setRotateDegrees(mIsLandscape ? 90 : 0);
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函数