Skip to content

v3.x_stream_params

chriszeng87 edited this page May 25, 2017 · 3 revisions

3.x版本推流初始化参数设置

KSYStreamerConfig.Builder接口 (v3.x支持)

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

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


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

rtmp服务器地址

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

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

设置接口:KSYStreamerConfig.Builder.setUrl

编码类型

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

  • 软编模式: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),可以优先使用硬编码以避免长时间推流后大量发热引起的性能下降, 即建立一个硬编白名单,在白名单内的机型设置为硬编模式,否则再设置为软编模式。

推流分辨率

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支持自动实时计算实际网络状况,并据此调整视频码率,以保证直播的流畅性。

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

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帧有一个关键帧。

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

// 默认参数:  
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来设置横竖屏

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 设置开启手动指定对焦测光区域 默认关闭
Clone this wiki locally