超低延时直播功能接入
更新时间:2023-05-26
接入准备
接入超低延时直播功能,需要使用播放器SDK高级版,并申请高级版License。
功能介绍
在高级版SDK中,提供了超低延时直播流的播放能力,该能力由RTCPlayerWrapper组件提供,请确保该组件已集成到你的App中,SDK接口设计接近Android原生MediaPlayer接口,方便理解与接入。
SDK当前支持的音视频编码格式如下:
- 视频:H.264/HEVC,支持B帧
 - 音频:AAC
 
Demo体验
前往SDK简介与下载页面扫码安装DEMO

快速开始
- 创建播放渲染视窗
 
                Java
                
            
            1// 在布局文件中添加渲染控件
2<com.baidu.rtc.RTCVideoView
3        android:id="@+id/brtc_video_view"
4 		android:layout_width="match_parent"
5        android:layout_height="match_parent" />
6
7// 寻回渲染控件对象
8mVideoView = (RTCVideoView) findViewById(R.id.brtc_video_view);
            - 设置默认加载SO架构并启动SO后下载
 
                Java
                
            
            1// SO提供armeabi/armeabi-v7a/arm64-v8a三种架构,设置默认加载的架构
2RTCLoadManager.getInstance(this).setDefaultCpuType("arm64-v8a");
3// 注册SO后下载进度监听器
4RTCLoadManager.getInstance(this).registerCallback(mLoadListener);
5// 开始SO后下载,下载完成后自动加载
6RTCLoadManager.getInstance(this).loadLibraries(BRTCPlayerImpl.getDefaultSoDownloadUrl(), "arm64-v8a", null);
            - 创建播放器对象及播放器初始化
 
                Java
                
            
            1// 创建播放器对象,需要传入您申请的高级版证书LicenseID,ID可以在百度智能云控制台(https://console.bce.baidu.com/bvc/#/bvc/player-license/list)查看
2mBRTCPlayer = new BRTCPlayerImpl(this, "your-license-id");
3// 创建播放参数集,初始化播放器
4mPlayerParameters = new BRTCPlayerParameters();
5// 使能SO后下载
6mPlayerParameters.enableSoLaterLoad(true);
7// 设置加载的SO架构
8mPlayerParameters.setCpuType("arm64-v8a");
9// 设置播放器信令服务地址
10mPlayerParameters.setPullUrl(mSignalUrl);
11// 初始化播放器 传入播放参数及事件监听器
12mBRTCPlayer.initPlayer(mPlayerParameters, this);
            - 播放设置
 
                Java
                
            
            1// 设置播放渲染视图
2mBRTCPlayer.setSurfaceView(mVideoView);
3// 设置媒体流地址
4mBRTCPlayer.setStreamUri(mStreamUrl);
            - 播放控制
 
                Java
                
            
            1// 准备播放,获取播放依赖资源
2mBRTCPlayer.prepareAsync();
3// 开始播放
4mBRTCPlayer.startPlay();
5// 暂停播放
6mBRTCPlayer.pausePlay();
7// 恢复播放
8mBRTCPlayer.resumePlay();
9// 停止播放
10mBRTCPlayer.stopPlay();
            - 释放播放器
 
                Java
                
            
            1// 释放播放器
2mBRTCPlayer.releasePlayer();
            - 混淆规则
 
                Plain Text
                
            
            1-keepclasseswithmembernames,allowshrinking,allowoptimization class * {
2    native <methods>;
3}
4
5-keep interface * {
6    public <fields>;
7    public <methods>;
8}
9
10-keep class com.baidu.rtc.** {*;}
11-keep class com.webrtc.** {*;}
            在播放器SDK Demo中对上述流程有详细的展示,可以参考
接口说明
BRTCPlayerParameters类
| 接口名 | 描述 | 
|---|---|
| void setEnableDebug(boolean enable) | 设置是否开启debug日志 | 
| void setPullUrl(String pullUrl) | 设置信令服务地址,格式为http[:s]//domain/brtc/v3/pullstream | 
| void setCpuType(String cpuType) | 指定下载的SO库CPU架构 | 
| void enableSoLaterLoad(boolean enableSoLaterLoad) | 是否开启SO后下载 | 
| void setAutoPlay(boolean autoPlay) | 设置是否自动启播,默认false | 
| void setVideoDecodeFormat(int videoDecodeFormat) | 设置视频解码格式,由业务侧确定是否为H265格式,默认为H264格式 | 
| void setEnableVideoBFrame(boolean bFrame) | 是否开启B帧支持,由业务侧确定是否开启,默认关闭 | 
BRTCPlayerEvents类
| 错误码 | 含义 | 
|---|---|
| BRTC_PLAYER_ERROR_INVALID_URL = 10000 | URL 格式错误 | 
| BRTC_PLAYER_ERROR_ICE_CHANNEL = 10001 | ICE 连接错误 | 
| BRTC_PLAYER_ERROR_RESERVED = 10002 | 替换预留错误码 | 
| BRTC_PLAYER_ERROR_CONNECTION = 10003 | Peer连接创建失败 | 
| BRTC_PLAYER_ERROR_LOCAL_SDP_REQUEST = 10004 | 媒体描述请求失败 | 
| BRTC_PLAYER_ERROR_LOCAL_SDP_SET = 10005 | 媒体描述设置失败 | 
| BRTC_PLAYER_ERROR_REMOTE_SDP_REQUEST = 10006 | 远端媒体描述请求失败 | 
| BRTC_PLAYER_ERROR_REMOTE_SDP_SET = 10007 | 远端媒体描述设置失败 | 
| BRTC_PLAYER_ERROR_INVALID_STATE = 10008 | 播放状态错误 | 
| BRTC_PLAYER_ERROR_STREAMING_INTERRUPT = 10009 | 媒体流中断,一段时间未收媒体流,SDK内部检测到断流错误后会立即停止播放 | 
| BRTC_PLAYER_ERROR_LOAD_LIBRARIES = 10010 | SO库文件后下载失败 | 
| BRTC_PLAYER_ERROR_INVALID_LICENSE = 100011 | license错误 | 
| BRTC_PLAYER_ERROR_LICENSE_FEATURE_INVALID = 10012 | 当前license不包含低延时播放feature | 
| BRTC_PLAYER_ERROR_DECODER_OPEN_FAILED = 10013 | 解码器打开失败 | 
| 事件码 | 含义 | 
|---|---|
| BRTC_PLAYER_EVENT_REMOTE_RENDER = 1000 | 开始远端渲染 | 
| BRTC_PLAYER_EVENT_ICE_CONNECTED = 1001 | ICE连接成功 | 
| BRTC_PLAYER_EVENT_PEER_CONNECTION_CLOSED = 1002 | 对端连接关闭 | 
| BRTC_PLAYER_EVENT_STATS_UPDATED = 1003 | 媒体流信息更新 | 
| BRTC_PLAYER_EVENT_BUFFERING_START = 1004 | Buffering start事件 | 
| BRTC_PLAYER_EVENT_BUFFERING_END = 1005 | Buffering end事件 | 
| BRTC_PLAYER_EVENT_ICE_DISCONNECTED = 1006 | ICE连接断开 | 
| BRTC_PLAYER_EVENT_NO_STREAMING_DETECTED = 1007 | 没有检测到媒体流 | 
| BRTC_PLAYER_EVENT_PLAY_TIME_STATISTIC = 1008 BRTC_PLAYER_EVENT_LOCAL_SDP_SET = 1009 BRTC_PLAYER_EVENT_REMOTE_SDP_ACQUIRED = 1010 BRTC_PLAYER_EVENT_LIBS_DOWNLOAD_COMPLETED = 1011 BRTC_PLAYER_EVENT_LIBS_LOADED_SUCCESS = 1012 BRTC_PLAYER_EVENT_RENDERVIEW_VISIBLE = 1013  | 
启播各阶段耗时统计 | 
| BRTC_PLAYER_EVENT_DECODER_OPENED = 1014 | 解码器成功打开 | 
| 事件回调 | 含义 | 
|---|---|
| void onPrepared() | 播放器准备就绪 | 
| void onFirstFrameRendered() | 首帧渲染事件 | 
| void onResolutionChanged(int w, int h) | 分辨率更新回调 | 
| void onError(int errCode, String msg) | 错误错误回调,错误码定义见前文 | 
| void onInfoUpdated(int event, Object msg) | 事件更新回调,事件码定义见前文 | 
| void onPlayerStateChanged(BRTCPlayer.PlayerState currentState) | 播放状态更新 | 
| void onSEIRecv(ByteBuffer data) | 接收到SEI 消息,回调在解码线程,不应在该回调里实现复杂业务 | 
SEI 数据格式:
[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字段的值;如:[ 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 ]
RTCVideoView类
| 枚举类型 | 描述 | 
|---|---|
| ScalingType.SCALE_ASPECT_FIT | 缩放模式:适应 | 
| ScalingType.SCALE_ASPECT_FILL | 缩放模式:拉伸 | 
RTCLoadManager类
| 接口名 | 描述 | 
|---|---|
| RTCLoadManager getInstance(Context context) | 获取单例 | 
| void setDefaultCpuType(String cpuType) | 指定下载的SO库CPU架构 | 
| void registerCallback(LoadListener callback) | 注册SO后下载进度监听器 | 
| void unregisterCallback(LoadListener callback) | 反注册SO后下载进度监听器 | 
| void loadLibraries(String soLaterLoadUrl, String cpuType, LoadListener loadListener) | 从soLaterLoadUrl下载cpuType架构的SO,并将进度回调给loadListener。 默认SO下载地址可通过BRTCPlayerImpl.getDefaultSoDownloadUrl()获取  | 
BRTCPlayer接口
| 接口名 | 描述 | 
|---|---|
| long initPlayer(BRTCPlayerParameters playParameters, BRTCPlayerEvents events) | 初始化播放器。 playParameters 播放参数集 events 播放事件监听  | 
| void setEventObserver(BRTCPlayerEvents events) | 设置播放事件监听 | 
| void setSurfaceView(RTCVideoView surfaceView) | 设置播放渲染视窗,当前只支持RTCVideoView | 
| void setScalingType(RTCVideoView.ScalingType scaleType) | 设置播放视窗缩放模式 | 
| void prepareAsync() | 准备播放 | 
| void setPlayWhenReady(boolean autoPlay) | 设置是否自动启播,默认false | 
| void startPlay() | 开始播放 | 
| void pausePlay() | 暂停播放,不停止拉流,仅暂停本地媒体流渲染 | 
| void resumePlay() | 恢复播放,从暂停状态恢复播放 | 
| void stopPlay() | 停止播放,停止媒体拉流及渲染,再次播放需调用startPlay() | 
| boolean hasVideo() | 媒体流是否包含视频流 | 
| boolean hasAudio() | 媒体流是否包含音频流 | 
| void releasePlayer() | 释放播放器 | 
| void setVolume(double volume) | 设备播放音量 | 
| void setStreamUri(String streamPath) | 设置播放媒体流地址,媒体流URL格式为webrtc://domain/app/stream | 
| PlayerState getPlayerState() | 获取播放状态 | 
