直播推流
音视频直播的相关接口是在BDCloudAVLiveContext.h文件里,包括开始/结束推流、开始/结束动态码率、开/关静音推流、发送metadata信息等功能。 注意:直播SDK所有的类都是以“BDCloud”开头。
音视频推流直播需要注意以下两点:
- 直播推流模块仅用来处理音视频数据(编码,打包,上传),不含音视频数据采集功能,我们需要依赖短视频模块进行数据采集后传递给直播模块。当然我们同样支持用户自己采集音视频数据按照我们要求的结构转入直播模块也能实现完整的直播功能。
- 直播推流SDK当前支持两种网络协议(RTMP和SRT),不同协议的延迟不同。使用的场景需要根据自身业务情况自行评估。
1.1 推流参数设置
BDCloudAVLiveParameter用于配置推流地址、协议类型、断网内部重连次数、重连时间间隔、音视频编码参数等。 常见的音视频编码信息配置信息如下:
- 视频分辨率:视频编码分辨率,视频编码场景中分辨率与清晰度正相关。
- 视频帧率:视频编码帧率,视频编码场景中帧率与画面连贯正相关。
- 视频码率:视频编码码率,视频编码场景中码率与清晰度正相关。
- 视频gop长度:视频编码关键帧间隔,视频编码场景中关键帧间隔时间。
- 视频编码显示类型:视频编码物理分辨率与显示分辨率不一致时的编码显示类型(等比、剪裁、拉伸)。
- 音频采样率:音频编码采样率,音频编码场景中可以修改音频的采样率。
- 音频码率:音频编码码率,音频编码场景中码率与清晰度成正相关。 对于不熟悉音视频产品的用户,直播SDK提供默认的音视频编码配置,方便用户初始化。对于熟悉音视频直播推流的用户,可以自行修改参数以适配业务场景。
推流地址
主要用于RTMP协议下的推流地址。 类型:属性 默认值:nil @property(nonatomic, copy) NSURL* url; 示例代码:
1. par.url = [NSURL URLWithString:[settings pushUrl]];
主要用于SRT协议下的推流地址。 类型:属性 默认值:nil @property(nonatomic, copy) NSString* c_url; 示例代码:
1. par.url = [settings pushUrl];
断网内部重连
次数设置 类型:属性 默认值:5 @property(nonatomic, assign) NSInteger reconnectCount; 示例代码:
1. par.reconnectCount = 5;
重连间隔 类型:属性 默认值:1 @property(nonatomic, assign) NSTimeInterval reconnectInterval; 示例代码:
1. par.reconnectInterval = 1;
设置协议类型
直播SDK支持两种协议类型(RTMP、SRT),我们需要通过枚举区分设置。
类型:属性 默认值:BDCloudAVLiveTypeNormal. @property(nonatomic, assign) BDCloudAVLiveType streamType; 示例代码:
1. par.streamType = NO
设置视频编码参数
视频编码参数支持分辨率、帧率、码率、关键帧间隔、编码类型(H264/H265)、显示类型、编码profile。 类型:属性 默认值:nil @property(nonatomic, strong) BDCloudAVVideoOutputSettings* videoSettings; 示例代码:
1. par.videoSettings = [BDCloudAVVideoOutputSettings defaultSettings];
2. // 编码分辨率
3. par.videoSettings.dimension = self.settings.dimension;
4. // 编码码率
5. par.videoSettings.bitRate = self.settings.bitRate * 1000;
6. // 编码帧率
7. par.videoSettings.frameRate = self.settings.frameRate;
8. // 关键帧间隔
9. par.videoSettings.maxKeyFrameInterval = 2;
10. // 编码类型
11. par.videoSettings.codecID = AVVideoCodecH264
12. // 显示类型
13. par.videoSettings.scalingMode = AVVideoScalingModeResizeAspect
14. // 编码profile
15. par.videoSettings.profile = AVVideoProfileLevelH264HighAutoLevel
设置音频编码参数
音频编码参数支持修改原有的音频参数,重新采样成目标采样率。同时支持修改编码码率。 类型:属性 默认值:nil @property(nonatomic, strong) BDCloudAVAudioOutputSettings* audioSettings; 示例代码:
1. par.audioSettings = [BDCloudAVAudioOutputSettings defaultSettings];
2. // 设置码率
3. par.audioSettings.bitrate = 96000;
4. // 设置采样率
5. par.audioSettings.sampleRate = 44100;
1.2 metadata发送参数
用于配置直播流中发送metadata消息。可由百度云播放器解析并通过通知发送给每一个观众用户。常用于直播答题、直播换装等需要由主播添加进实时流内的消息功能。
设置鉴权参数AK
鉴权参数主要是百度云STS服务。由AK、SK、Token、expiredTime组成。 类型:属性 默认值:nil @property(nonatomic, copy) NSString *accessKey; 示例代码:
1. self.config.accessKey = signature[@"stsAccessKey"];
设置鉴权参数SK
鉴权参数主要是百度云STS服务。由AK、SK、Token、expiredTime组成。 类型:属性 默认值:nil @property(nonatomic, copy) NSString * secretKey; 示例代码:
1. self.config.secretKey = signature[@"stsSecretKey"];
设置鉴权参数Token
鉴权参数主要是百度云STS服务。由AK、SK、Token、expiredTime组成。 类型:属性 默认值:nil @property(nonatomic, copy) NSString * tokenKey; 示例代码:
1.self.config.tokenKey= signature[@"stsToken"];
设置鉴权参数expiredTime
鉴权参数主要是百度云STS服务。由AK、SK、Token、expiredTime组成。 类型:属性 默认值:nil @property(nonatomic, copy) NSString * expiredTimeInSeconds; 示例代码:
1. self.config.expiredTimeInSeconds= 1800;
设置流参数domin
流参数主要时拉流服务。由domin、appName、streamName组成。主要定位到flv拉流地址进行metadata信息下发。 类型:属性 默认值:nil @property(nonatomic, copy) NSString *domin; 示例代码:
1._config.domin = domin;
设置流参数appName
流参数主要时拉流服务。由domin、appName、streamName组成。主要定位到flv拉流地址进行metadata信息下发。 类型:属性 默认值:nil @property(nonatomic, copy) NSString *appName; 示例代码:
1. _config.appName = appName;
设置流参数streamName
流参数主要时拉流服务。由domin、appName、streamName组成。主要定位到flv拉流地址进行metadata信息下发。 类型:属性 默认值:nil @property(nonatomic, copy) NSString *streamName; 示例代码:
1. _config.streamName = streamName;
1.3 状态回调代理
直播状态回调提供给用户连接成功或者连接失败,当失败时提供错误码提醒用户,用户可以根据自身业务情况判断是否进行重连。
直播连接成功回调
类型:方法
- (void)liveContextConnected;
直播断开回调
类型:方法 参数:错误码。
- (void)liveContextError:(RtmpSocketErrorCode)code;