-
Notifications
You must be signed in to change notification settings - Fork 271
streamerParams
与推流相关的参数,需要通过 KSYStreamerBase 来设置。 在kit类中, 则通过 kit.streamerBase属性来设置,设置方法一致。
目前开放的接口主要是:
demo中请参见setStreamCfg方法
本SDK 对推流地址没有限制,可以自由设置推流的RTMP服务器地址。
一般rtmp服务器地址又三部分构成: host + appName + streamName
例如: rtmp://test.uplive.ksyun.com/live/888
视频编码器是用于选择实际编码的方案,目前提供了两种编码器和三种配置方法。
编码器配置 | 编码器名称 | 备注 |
---|---|---|
KSYVideoCodec_X264 | h264 软件编码器 | CPU占用率高一些,但设备兼容性强,视频质量高一些 |
KSYVideoCodec_VT264 | iOS VT264硬件编码器 | CPU占用率低一些,部分设备不支持 |
KSYVideoCodec_AUTO | 由SDK自动选择 | 优先选择VT264,当不可用时,自动改为使用软件编码器 |
KSYVideoCodec_QY265 | h265 软件编码器 | CPU占用率高一些,但设备兼容性强,视频质量高一些 |
默认参数:
_kit.streamerBase.videoCodec = KSYVideoCodec_X264;
音频编码器是用于选择实际编码的方案,目前提供了两种编码器和两种配置方法。
编码器配置 | 编码器名称 | 备注 |
---|---|---|
KSYAudioCodec_AAC_HE_V2 | AAC HE V2音频软件编码器 | CPU占用率高一些,但设备兼容性强,声音质量高一些(只能接受立体声输入数据)) |
KSYAudioCodec_AAC_HE | FDK AAC音频软件编码器 | CPU占用率高一些,但设备兼容性强,声音质量高一些 |
KSYAudioCodec_AAC | FDK AAC音频软件编码器 | CPU占用率低一些,但设备兼容性强,声音质量高一般 |
KSYAudioCodec_AT_AAC | iOS自带audiotoolbox音频编码器 | CPU占用率低一些,音频码率设置在64kbps及以上,否则会有吱吱声 |
默认参数:
_kit.streamerBase.audioCodec = KSYAudioCodec_AAC_HE;
如果开启码率自适应(streamerBase.bwEstimateMode), SDK内部会根据推流时网络的状况自动调整视频的码率。
- 当网络状况差时,自动下调码率,牺牲视频质量,保证视频流畅度。
- 网络状况变好时,自动上调码率,恢复视频质量。
默认参数(默认开启码率自适应):
//开启码率自适应
_kit.streamerBase.bwEstimateMode = KSYBWEstMode_Default;
//关闭码率自适应
_kit.streamerBase.bwEstimateMode = KSYBWEstMode_Disable;
当码率调整时,会有相应的事件通知。详情请查看带宽估计模式
//注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(onNetStateEvent:)
name:KSYNetStateEventNotification
object:nil];
//响应事件:
- (void) onNetStateEvent:(NSNotification *)notification {
KSYNetStateCode netEvent = _kit.streamerBase.netStateCode;
if ( netEvent == KSYNetStateCode_SEND_PACKET_SLOW ) {
NSLog(@"bad network" );
}
else if ( netEvent == KSYNetStateCode_EST_BW_RAISE ) {
NSLog(@"bitrate raising" );
}
else if ( netEvent == KSYNetStateCode_EST_BW_DROP ) {
NSLog(@"bitrate dropping" );
}
}
//移除通知:
[[NSNotificationCenter defaultCenter] removeObserver:self
name:KSYNetStateEventNotification
object:nil];
视频码率就是每秒编码输出的视频数据的bit数,单位为 kbps。
- videoInitBitrate:视频编码起始码率 刚启动编码时,网络状态未知,可以从较低的码率开始,让码率自适应自动调整的合适的码率,默认值为500kbps
- videoMaxBitrate: 视频编码最高码率 码率自适应调整的上限,表示了当网络状况良好时,所能达到的最好编码效果,默认值为800kbps
- videoMinBitrate: 视频编码最低码率 视频码率自适应调整的下限,如果低于最低值,画面质量会很难看,建议主播到更好的网络下去直播,默认值为200kbps
以上码率的设置都需要跟分辨率以及应用场景相关。大致的选择规律如下:
- 分辨率越高,需要的码率越高。
- 视频场景越复杂,运动越剧烈,需要的码率也越高。
//设置举例:
_kit.streamerBase.videoInitBitrate = 500; // k bit ps
_kit.streamerBase.videoMaxBitrate = 800; // k bit ps
_kit.streamerBase.videoMinBitrate = 0; // k bit ps
我们推荐streamerBase.videoMinBitrate设置为0,则能更好地发挥码率自适应的效果
最大关键帧间隔,一般说的GOP长度。每一个关键帧表示随机访问的点,但是关键帧的大小比非关键帧大很多。
关键帧间隔越小,表示关键帧越多,但是压缩率也会越低,请合理选择。
默认值为 3秒。实际生效方式为 3* videoFPS。 比如15帧每秒,则每45帧有一个关键帧。
//默认参数:
_kit.maxKeyInterval = 3;
本SDK采用 AAC进行音频编码,faac音频码率推荐为48kbps,at_aac音频码率推荐为64kbps。
//默认参数:
_kit.streamerBase.audiokBPS = 48;//kbps
视频编码帧率,就是每秒编码的帧数。如果使用kit类可以不用配置。
注意: 这个属性只是建议值,数值会用于视频编码的码率控制。
实际编码的帧率取决于采集的帧率:
- 当采集帧率高于设定的编码帧率时会触发丢帧。
- 当采集帧率低于设定的编码帧率时,实际帧率等于采集帧率, 不会自动插帧.
所以建议保证采集帧率和编码帧率一致,这样码率控制会比较准确。