超低延时直播功能接入
更新时间:2023-04-03
接入准备
- 接入超低延时直播功能,需要使用播放器SDK高级版,并申请高级版License。
- 在frameworks目录下有BaiduRtcPlayerGeneral.framewok,将它导入到你的项目中,并设置到Xcode的Link Binary With Libraries选项中
功能介绍
在高级版SDK中,提供了超低延时直播流的播放能力,该能力由BaiduRtcPlayerGeneral组件提供,请确保该组件已集成到你的App中。 SDK当前支持的音视频编码格式如下:
- 视频:H.264/HEVC,支持B帧
- 音频:AAC
Demo体验
快速开始
- 播放器参数配置
BaiduRtcPlayerParameter *param = [BaiduRtcPlayerParameter defaultParameter];
// 设置信令服务地址
param.signalServer = @"http://test-pl-central.bigenemy.cn/brtc/v3/pullstream";
// 设置视频解码类型,默认使用H.264
param.videoCodectype = _boCodec265Type ? CODEC_H264 : CODEC_H265;
// 设置是否开启B帧支持,默认不开启
param.videoBFrame = _boVideoBFrame;
- 创建播放器对象及播放器初始化
// 创建播放器对象,需要传入您申请的高级版证书LicenseID,ID可以在百度智能云控制台(https://console.bce.baidu.com/bvc/#/bvc/player-license/list)查看。delegate详细参考回调事件
self._bdPlayer = [[BaiduRtcPlayer alloc] initWithParameter:param licenseId:LICENSE_ID delegate:self];
// 外部获取播放器view
[self.mainView addSubview:_bdPlayer.view];
// 开始播放 是否支持异步播放还是同步播放。如果鉴权失败,会抛出异常
[_bdPlayer prepareToPlay:_streamUrl autoPlay:NO];
- 播放控制
// 暂停播放
- (void)pausePlay;
// 恢复播放
- (void)resumePlay;
// 停止播放,释放资源
- (void)stopPlay;
// 重置播放器
- (void)reset;
// 设置音量
- (void)setVoulme:(float)volume;
// 设置显示模式
- (void)setScalingMode:(BaiduRtcPlayerScalingMode)mode;
- 播放回调事件
// prepareToPlay回调事件,如果异步打需要在回调事件后调用startPlay
- (void)onPrepared:(BaiduRtcPlayer *)player;
// 首帧事件
- (void)onFirstVideoFrameRendered:(BaiduRtcPlayer *)player;
// 播放器分辨率改变
- (void)onResolutionChanged:(BaiduRtcPlayer *)player
size:(CGSize)size;
// 播放错误
- (void)onPlayerError:(BaiduRtcPlayer *)player
errorCode:(BaiduRtcPlayerErrorCode)errorCode
error:(nullable NSError *)error;
// sei回调信息
- (void)onPlayerReceivedSEI:(BaiduRtcPlayer *)player
sei:(NSDictionary *)sei;
- 释放播放器
- (IBAction)onstopPlay:(id)sender {
if (_bdPlayer) {
[_bdPlayer stopPlay];
_bdPlayer = nil;
}
}
在播放器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 | 重新设置音频参数 |