Skip to content

streamerParams

pengbin edited this page Dec 4, 2017 · 18 revisions

配置推流相关参数

与推流相关的参数,需要通过 KSYStreamerBase 来设置。 在kit类中, 则通过 kit.streamerBase属性来设置,设置方法一致。

目前开放的接口主要是:

demo中请参见setStreamCfg方法


rtmp服务器地址

本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类可以不用配置。 注意: 这个属性只是建议值,数值会用于视频编码的码率控制。
实际编码的帧率取决于采集的帧率:

  • 当采集帧率高于设定的编码帧率时会触发丢帧。
  • 当采集帧率低于设定的编码帧率时,实际帧率等于采集帧率, 不会自动插帧.

所以建议保证采集帧率和编码帧率一致,这样码率控制会比较准确。

1. 推流环节说明

2. 特色功能说明

2.1 采集

2.2 音频处理

2.3 视频处理

2.4 编码

2.5 推流

2.6 输入多样化

2.7 集成

3. 第三方功能

4. 技术专栏

5. 已知问题

8. FAQ

金山云计算

Clone this wiki locally