超低延时直播功能接入
更新时间:2023-04-03
接入准备
- 接入超低延时直播功能,需要使用播放器SDK高级版,并申请高级版License。
- 在frameworks目录下有BaiduRtcPlayerGeneral.framewok,将它导入到你的项目中,并设置到Xcode的Link Binary With Libraries选项中
功能介绍
在高级版SDK中,提供了超低延时直播流的播放能力,该能力由BaiduRtcPlayerGeneral组件提供,请确保该组件已集成到你的App中。 SDK当前支持的音视频编码格式如下:
- 视频:H.264/HEVC,支持B帧
- 音频:AAC
Demo体验

快速开始
- 播放器参数配置
Objectivec
1BaiduRtcPlayerParameter *param = [BaiduRtcPlayerParameter defaultParameter];
2// 设置信令服务地址
3param.signalServer = @"http://test-pl-central.bigenemy.cn/brtc/v3/pullstream";
4// 设置视频解码类型,默认使用H.264
5param.videoCodectype = _boCodec265Type ? CODEC_H264 : CODEC_H265;
6// 设置是否开启B帧支持,默认不开启
7param.videoBFrame = _boVideoBFrame;
- 创建播放器对象及播放器初始化
Objectivec
1// 创建播放器对象,需要传入您申请的高级版证书LicenseID,ID可以在百度智能云控制台(https://console.bce.baidu.com/bvc/#/bvc/player-license/list)查看。delegate详细参考回调事件
2self._bdPlayer = [[BaiduRtcPlayer alloc] initWithParameter:param licenseId:LICENSE_ID delegate:self];
3// 外部获取播放器view
4[self.mainView addSubview:_bdPlayer.view];
5// 开始播放 是否支持异步播放还是同步播放。如果鉴权失败,会抛出异常
6[_bdPlayer prepareToPlay:_streamUrl autoPlay:NO];
- 播放控制
Objectivec
1// 暂停播放
2- (void)pausePlay;
3// 恢复播放
4- (void)resumePlay;
5// 停止播放,释放资源
6- (void)stopPlay;
7// 重置播放器
8- (void)reset;
9// 设置音量
10- (void)setVoulme:(float)volume;
11// 设置显示模式
12- (void)setScalingMode:(BaiduRtcPlayerScalingMode)mode;
- 播放回调事件
Objectivec
1// prepareToPlay回调事件,如果异步打需要在回调事件后调用startPlay
2- (void)onPrepared:(BaiduRtcPlayer *)player;
3// 首帧事件
4- (void)onFirstVideoFrameRendered:(BaiduRtcPlayer *)player;
5// 播放器分辨率改变
6- (void)onResolutionChanged:(BaiduRtcPlayer *)player
7 size:(CGSize)size;
8// 播放错误
9- (void)onPlayerError:(BaiduRtcPlayer *)player
10 errorCode:(BaiduRtcPlayerErrorCode)errorCode
11 error:(nullable NSError *)error;
12// sei回调信息
13- (void)onPlayerReceivedSEI:(BaiduRtcPlayer *)player
14 sei:(NSDictionary *)sei;
- 释放播放器
Objectivec
1- (IBAction)onstopPlay:(id)sender {
2 if (_bdPlayer) {
3 [_bdPlayer stopPlay];
4 _bdPlayer = nil;
5 }
6}
在播放器SDK Demo中对上述流程有详细的展示,可以参考。
接口说明
BaiduRtcPlayerParameter
| 参数名 | 含义 |
|---|---|
| netStatus | 网络连接状态 ReachableNot:无网络连接 ReachableWiFi:WIFI网络连接 ReachableWWAN:移动网络连接 |
| audioEnable | 使能音频播放,默认开启 |
| videoEnable | 使能视频播放,默认开启 |
| audioVolume | 音量,范围[0,1],默认为1 |
| signalServer | 信令服务URL |
| palyer_url | 媒体流URL,格式为webrtc://domain/app/stream |
| checkFrameDuration | 检查断流时间长度用户可以设置,默认10s |
| videoCodectype | 视频解码格式,由业务侧确定是否为H265格式,默认为H264格式 |
| videoBFrame | 是否开启B帧支持,默认不开启 |
BaiduRtcPlayerErrorCode
| 错误码 | 含义 |
|---|---|
| BaiduRtcPlayerErrorInvalidUrl = 10000 | URL格式错误 |
| BaiduRtcPlayerErrorIceFailed = 10001 | ICE连接错误 |
| BaiduRtcPlayerErrorIceDisconnected = 10002 | ICE断开 |
| BaiduRtcPlayerErrorConnection = 10003 | Peer连接创建失败 |
| BaiduRtcPlayerErrorGetLocalSdpFailed = 10004 | 本地SDP获取失败 |
| BaiduRtcPlayerErrorSetLocalSdpFailed = 10005 | 设置本地SDP失败 |
| BaiduRtcPlayerErrorGetRemoteSdpFailed = 10006 | 远端SDP获取失败 |
| BaiduRtcPlayerErrorSetRemoteSdpFailed = 10007 | 远端SDP设置失败 |
| BaiduRtcPlayerErrorInvalidStatus = 10008 | 播放状态错误 |
| BaiduRtcPlayerErrorNullVideoFrame = 10009 | 媒体流中断 一段时间未收媒体流 |
| BaiduRtcPlayerErrorLoadLibaraies = 10010 | 库加载失败 |
BaiduRtcPlayerInfoCode
| 事件码 | 含义 |
|---|---|
| BaiduRtcPlayerInfoRoomRender = 1000 | 开始远端渲染 |
| BaiduRtcPlayerInfoIceConnected = 1001 | ICE连接成功 |
| BaiduRtcPlayerInfoPeerConnectionClosed = 1002 | 对端连接关闭 |
| BaiduRtcPlayerInfoStatsUpdated = 1003 | 媒体流信息更新 |
| BaiduRtcPlayerInfoBufferingStart = 1004 | Buffering start事件 |
| BaiduRtcPlayerInfoBufferingEnd = 1005 | Buffering end事件 |
| BaiduRtcPlayerInfoIceDisconnected = 1006 | ICE连接断开 |
| BaiduRtcPlayerInfoNoStremingDetected = 1007 | 没有检测到媒体流 |
| BaiduRtcPlayerInfoPlayTimeStatistic = 1008 BaiduRtcPlayerInfoLocalSDPSetted = 1009 BaiduRtcPlayerInfoRemoteSDPRequested = 1010 |
启播各阶段耗时统计 |
BaiduRtcPlayerDelegate
| 接口名 | 说明 |
|---|---|
| - (void)onPrepared:(BaiduRtcPlayer *)player elapse:(NSInteger)interval | 播放器准备就绪回调 interval:prepare耗时 |
| - (void)onFirstVideoFrameRendered:(BaiduRtcPlayer *)player elapse:(NSInteger)interval | 首帧渲染回调(在主线程) interval:首帧耗时 |
| - (void)onPeriodRenderStatis:(BaiduRtcPlayer *)player frame:(NSInteger)frameRate | 周期性返回帧率统计 |
| - (void)onResolutionChanged:(BaiduRtcPlayer *)player size:(CGSize)size | 分辨率变化回调(在主线程) |
| - (void)onPlayerError:(BaiduRtcPlayer *)player errorCode:(BaiduRtcPlayerErrorCode)errorCode error:(nullableNSError *)error | 错误回调(在子线程) |
| - (void)onPlayerStreamChanged:(BaiduRtcPlayer *)player hasVideo:(BOOL)hasVideo hasAudio:(BOOL)hasAudio | 通知远端媒体信息(在子线程) |
| - (void)onPlayerStatusChanged:(BaiduRtcPlayer *)player status:(BaiduRtcPlayerStatus)status | 播放器状态回调(在子线程) |
| - (void)onPlayerReceivedSEI:(BaiduRtcPlayer *)player sei:(NSData *)sei | SEI信息回调(在子线程) sei : nal_type(1) + sei_type(1) + sei_size(n+1)+sei_payload(n*255+m) |
| - (void)onPlayerAudioBufferingStart:(BaiduRtcPlayer *)player | 卡顿事件开始回调(在子线程) |
| - (void)onPlayerAudioBufferingEnd:(BaiduRtcPlayer *)player jitter:(NSInteger)interval | 卡顿事件结束回调(在子线程) |
| - (void)onPlayerInfo:(BaiduRtcPlayer *)player infoCode:(BaiduRtcPlayerInfoCode)infoCode obj:(NSObject *)obj | 播放器事件回调(在子线程) |
| - (void)onPlayerStatisticsInfo:(BaiduRtcPlayer *)player stats:(NSArray *)statistics | RTC引擎状态信息统计 该callback返回当前rtc engine的一些参数和性能信息,如传输fps,码率,网络状况,cpu等信息给应用层 |
BaiduRtcPlayer
| 接口名 | 说明 |
|---|---|
| + (NSString *)version | 获取版本号 |
| + (void)setVerbose:(BOOL)bOnVerbose | 是否打开调试信息 |
| - (instancetype)initWithParameter:(BaiduRtcPlayerParameter *)parameter licenseId:(NSString*)id delegate:(id<BaiduRtcPlayerDelegate>)delegate | 使用初始化参数、licenseID和事件代理创建播放器对象 |
| - (void)setVideoBFrame:(BOOL)enable | 设置是否开启B帧支持 |
| - (void)setCodecType:(CodecType) typeCodec | 设置解码格式,默认CODEC_H264,如需开启HEVC支持,则选择CODEC_H265 |
| - (void)prepareToPlay:(NSString* )url autoPlay:(BOOL)autoPlay | 传入媒体流地址,准备播放 autoPlay控制是否在准备就绪后自动开始播放 媒体流URL格式为webrtc://domain/app/stream |
| - (void)startPlay | 开始播放 |
| - (void)pausePlay | 暂停播放 |
| - (void)resumePlay | 从暂停状态恢复播放 |
| - (void)stopPlay | 停止播放 |
| - (void)reset | 重置播放器参数 |
| - (void)setVoulme:(float)volume | 设置音量,范围[0,1],默认为1 |
| - (void)setScalingMode:(BaiduRtcPlayerScalingMode)mode | 设置画面显示模式 |
| - (void)setSingalMode:(BaiduRtcPlayerSingalMode)mode | 设置信令模式 BaiduRtcPlayerSingalModeOverHttp:HTTP模式 |
| - (void)addPlayerDelegate:(id |
添加播放器事件代理 |
| - (void)removePlayerDelegate:(id |
移除播放器事件代理 |
| - (void)setSignalServer:(NSString *)signalServer | 设置信令服务URL |
| - (void)setNetStatus:(BRtcNetworkStatus)netStatus | 设置当前网络连接状态 ReachableNot:无网络连接 ReachableWiFi:WIFI网络连接 ReachableWWAN: 移动网络连接 |
| - (BOOL)resetAudioDeviceConfigure | 重新设置音频参数 |
