超低延迟直播
概述
百度智能云超低延时直播(BRTCPlayer)是在百度智能云视频直播的基础上通过链路传输协议优化,解决传统直播延迟过高的弊端,通过集成百度智能云播放器SDK,可以支持千万级并发场景的毫秒级延时直播,并为用户提供低卡顿、秒开流畅的直播观看体验。
功能介绍
BRTCPlayer 主要功能如下:
- 支持UDP信令模式:除HTTP标准信令模式外支持UDP信令模式,0 RTT 极速启播,有效提升秒开率;
- 支持AVC、HEVC视频硬解码;
- 支持视频B帧:引入B帧,可在清晰率不变的情况下降低码率;
- 支持AAC音频解码,支持MP4A-ADTS格式 48000 及 44100 采样率;
- 支持视频平滑渲染: 网络抖动时,平滑渲染视频帧, 降低卡顿;
- 支持最小延迟动态配置:可实现延迟换流畅,在允许范围内增大延迟可有效降低卡顿;
- 支持网络健康度实时检测;
- 内置HTTPDns支持;
- 支持 SEI 消息;
Demo体验
前往DEMO下载页面扫码安装DEMO
SDK 下载
前往SDK下载页面下载支持超低延时直播的智能视频SDK V1.8.0 及以后版本, 内含Demo源码;
快速集成
百度云超低延时直播由独立SDK提供支持,用户可通过在播放侧单独集成BRTCPlayer SDK实现超低延时直播,而推流侧则可复用当前使用的推流器,仅需在百度直播LSS平台针对当前域名开通低延时播放能力。 BRTCPlayer SDK具体的集成步骤如下:
- BRTCPlayer 作为独立SDK 提供低延时播放能力,包体精简,BaiduRtcPlayer.framework 包体约1.78M;
- 导入BaiduRtcPlayer.framework到工程,集成后的示例如下:
快速开始
- 创建播放渲染视窗
// 在布局文件中添加渲染控件
[self.playerView addSubview:self.bdPlayer.view];
// 寻回渲染控件对象
- 创建播放器对象及播放器初始化
// 创建播放参数集,初始化播放器
BaiduRtcPlayerParameter *param = [BaiduRtcPlayerParameter defaultParameter];
param.externalSetActive = YES;
param.enableDtlsSrtp = NO;
// 初始化播放器 传入播放参数及事件监听器
self.bdPlayer = [[BaiduRtcPlayer alloc] initWithParameter:param
delegate:self];
// 设置播放器信令服务地址
[self._bdPlayer setSignalServer:@"http://test-pl-central.bigenemy.cn/brtc/v3/pullstream]
// UDP 信令模式需要进行相关预设
if (bUseUdpSignaling) {
//设置播放地址
[self._bdPlayer setMediaServerIp:ip];
// 设置Udp信令模式
[self.bdPlayer setSingalMode:BaiduRtcPlayerSingalModeOverHttp];
// 由业务侧确定是否为H265格式,默认为H264格式; udp 信令模式需设置视频编码
[self.bdPlayer setCodecType:self->_boCodec265Type ? CODEC_H265 : CODEC_H264];
} else {
//设置http信令模式
[self._bdPlayer setSingalMode:BaiduRtcPlayerSingalModeOverHttp];
}
- 播放设置
// 设置媒体流地址
[self.bdPlayer prepareToPlay:@"webrtc://test-pl-central.bigenemy.cn/myapp/test321.flv" autoPlay:NO];
- 播放控制
// 准备播放,获取播放依赖资源
- (void)prepareToPlay;
// 开始播放
- (void)startPlay;
// 暂停播放
- (void)pausePlay;
// 恢复播放
- (void)resumePlay;
// 停止播放
- (void)stopPlay;
- 释放播放器
// 释放播放器
在智能视频SDK Demo中对上述流程有详细的展示,可以参考;
接口说明
BaiduRtcPlayerParameter类
接口名 | 描述 |
---|---|
netStatus | 网络类型 wifi 4g |
audioEnable | 是否播放音频 |
videoEnable | 是否播放视频 |
audioVolume | 设置静音启播 |
logReportEnable | 启动日志上报监控 设置最小延时, 可通过该参数增大延时降低卡顿提升播放流畅度 |
signalServer | 设置信令服务器 |
palyer_url | 设置播放地址 |
enableDtlsSrtp | 设置数据加密 |
mediaServerIP | 设置播放地址 |
videoCodectype | UDP模式使用 设置视频解码格式,由业务侧确定是否为H265格式,默认为H264格式,仅UDP信令模式 |
videoBFrame | 是否开启B帧支持,由业务侧确定是否开启,默认开启 ,仅UDP信令模式 |
sampleRate | 设置音频播放采样率[48000, 44100], 仅UDP信令模式 |
signalMode | 低延迟直播的信令交互模式http方式udp方式 |
BaiduRtcPlayerDelegate类
错误码 | 含义 |
---|---|
BaiduRtcPlayerErrorInvalidUrl = 10000 | URL 格式错误 |
BaiduRtcPlayerErrorIceFailed = 10001 | ICE 连接错误 |
BaiduRtcPlayerErrorIceDisconnected = 10002 | 替换预留错误码 |
BaiduRtcPlayerErrorConnection = 10003 | 连接创建失败 |
BaiduRtcPlayerErrorGetLocalSdpFailed = 10004 | 媒体描述请求失败 |
BaiduRtcPlayerErrorSetLocalSdpFailed = 10005 | 媒体描述设置失败 |
BaiduRtcPlayerErrorGetRemoteSdpFailed = 10006 | 远端媒体描述请求失败,一般由于启播放时主播侧已停播 |
BaiduRtcPlayerErrorSetRemoteSdpFailed = 10007 | 远端媒体描述设置失败 |
BaiduRtcPlayerErrorInvalidStatus = 10008 | 播放状态错误 |
BaiduRtcPlayerErrorNullVideoFrame = 10009 | 媒体流中断,一段时间未收媒体流,SDK内部检测到断流错误后会立即停止播放,一般在播放中主播停播但业务侧未退出 |
BaiduRtcPlayerErrorLoadLibaraies = 10010 | SO库文件后下载失败 |
BaiduRtcPlayerErrorTimeOut = 100011 | license错误 |
BaiduRtcPlayerErrorUdpUnsupport = 10012 | 当前license不包含低延时播放feature |
事件码 | 含义 |
---|---|
BaiduRtcPlayerInfoRoomRender = 1000 | 开始远端渲染 |
BaiduRtcPlayerInfoIceConnected = 1001 | ICE连接成功 |
BaiduRtcPlayerInfoPeerConnectionClosed = 1002 | 对端连接关闭 |
BaiduRtcPlayerInfoStatsUpdated = 1003 | 媒体流信息更新 |
BaiduRtcPlayerInfoBufferingStart = 1004 | Buffering start事件 |
BaiduRtcPlayerInfoBufferingEnd = 1005 | Buffering end事件 |
BaiduRtcPlayerInfoIceDisconnected = 1006 | ICE连接断开 |
BRTC_PLAYER_EVENT_NO_STREAMING_DETECTED = 1007 | 没有检测到媒体流 |
BRTC_PLAYER_EVENT_PLAY_TIME_STATISTIC = 1008 | 启播各阶段耗时统计 |
BaiduRtcPlayerInfoLocalSDPSetted = 1009 | local sdp 设置完成 |
BaiduRtcPlayerInfoRemoteSDPRequested = 1010 | remote sdp 请求完成 |
事件回调 | 含义 |
---|---|
- (void)onPrepared:(BaiduRtcPlayer *)player elapse:(NSInteger)interval; | 播放器准备就绪 |
- (void)onFirstVideoFrameRendered:(BaiduRtcPlayer *)player elapse:(NSInteger)interval; | 首帧渲染事件 |
- (void)onResolutionChanged:(BaiduRtcPlayer *)player size:(CGSize)size; | 分辨率更新回调 |
- (void)onPlayerError:(BaiduRtcPlayer )player errorCode:(BaiduRtcPlayerErrorCode)errorCode error:(nullable NSError )error; | 错误错误回调,错误码定义见前文 |
- (void)onPlayerInfo:(BaiduRtcPlayer )player infoCode:(BaiduRtcPlayerInfoCode)infoCode obj:(NSObject )obj; | 事件更新回调,事件码定义见前文 |
- (void)onPeriodRenderStatis:(BaiduRtcPlayer *)player frame:(NSInteger)frameRate; | 播放状态更新 |
- (void)onPlayerReceivedSEI:(BaiduRtcPlayer )player sei:(NSData )sei; | 接收到SEI 消息,回调在解码线程,不应在该回调里实现复杂业务 |
SEI 数据格式(h264):
[nal_type(1)|sei_type(1)|sei_size(n+1)|sei_payload(n*255+m)|trailing_bits(1)]
sei_size: 需判断第3个字节起连续0xFF的个数n,加第1个不为0xFF的字节(如: 0x21),该字段占字节数为 n + 1; 其值为:0xFF*n+0x21;
sei_payload: SEI字段的值(h265);如:[ 0x06 0x05 0x18 0x54 0x80 0x83 0x97 0xF0 0x23 0x47 0x4B 0xB7 0xF7 0x4F 0x32 0xB5 0x4E 0x06 0xAC 0x27 0x11 0xFE 0x69 0x79 0x01 0x00 0x00 0x80 ]
注: h265 与 h264 的 sei 格式略有不同, h264 的nal_type 为 0x06, sei_type 为0x 05; h265 的 nal_type 为 0x4e, sei_type 为两字节 0x01、0x05;
BRTCPlayer接口
接口名 | 描述 |
---|---|
initWithParameter:(BaiduRtcPlayerParameter*) delegate: | 初始化播放器。 playParameters 播放参数集 delte 播放事件监听 |
- (void)setCodecType:(CodecType) typeCodec | 设置视频编码类型 UDP模式支持 |
- (void)setScalingMode:(BaiduRtcPlayerScalingMode)mode; | 设置播放视窗缩放模式 |
- (void)prepareToPlay:(NSString* )url autoPlay:(BOOL)autoPlay; | 准备播放 |
- (void)startPlay; | 开始播放 |
- (void)pausePlay; | 暂停播放,不停止拉流,仅暂停本地媒体流渲染 |
- (void)resumePlay; | 恢复播放,从暂停状态恢复播放 |
- (void)stopPlay; | 停止播放,停止媒体拉流及渲染,再次播放需调用startPlay() |
- (void)setSingalMode:(BaiduRtcPlayerSingalMode)mode; | 设置信令模式 |
- (void)setMediaServerIp:(NSString *)mediaServerIp; | UDP模式设置播放url媒体ip |
- (void)setSignalServer:(NSString *)signalServer; | 设置信令地址,HTTP模式设置 |
- (void)setVoulme:(float)volume; | 设备播放音量 |
- (void)setBufferLevel:(NSInteger) bufferInterval; | 设置播放媒体手动延迟 |
- (void)setStatistics:(BOOL) on | 日志统计开关 |