超低延时直播功能接入
更新时间:2023-05-26
接入准备
接入超低延时直播功能,需要使用播放器SDK高级版,并申请高级版License。
功能介绍
在高级版SDK中,提供了超低延时直播流的播放能力,该能力由RTCPlayerWrapper组件提供,请确保该组件已集成到你的App中,SDK接口设计接近Android原生MediaPlayer接口,方便理解与接入。
SDK当前支持的音视频编码格式如下:
- 视频:H.264/HEVC,支持B帧
- 音频:AAC
Demo体验
前往SDK简介与下载页面扫码安装DEMO
快速开始
- 创建播放渲染视窗
// 在布局文件中添加渲染控件
<com.baidu.rtc.RTCVideoView
android:id="@+id/brtc_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
// 寻回渲染控件对象
mVideoView = (RTCVideoView) findViewById(R.id.brtc_video_view);
- 设置默认加载SO架构并启动SO后下载
// SO提供armeabi/armeabi-v7a/arm64-v8a三种架构,设置默认加载的架构
RTCLoadManager.getInstance(this).setDefaultCpuType("arm64-v8a");
// 注册SO后下载进度监听器
RTCLoadManager.getInstance(this).registerCallback(mLoadListener);
// 开始SO后下载,下载完成后自动加载
RTCLoadManager.getInstance(this).loadLibraries(BRTCPlayerImpl.getDefaultSoDownloadUrl(), "arm64-v8a", null);
- 创建播放器对象及播放器初始化
// 创建播放器对象,需要传入您申请的高级版证书LicenseID,ID可以在百度智能云控制台(https://console.bce.baidu.com/bvc/#/bvc/player-license/list)查看
mBRTCPlayer = new BRTCPlayerImpl(this, "your-license-id");
// 创建播放参数集,初始化播放器
mPlayerParameters = new BRTCPlayerParameters();
// 使能SO后下载
mPlayerParameters.enableSoLaterLoad(true);
// 设置加载的SO架构
mPlayerParameters.setCpuType("arm64-v8a");
// 设置播放器信令服务地址
mPlayerParameters.setPullUrl(mSignalUrl);
// 初始化播放器 传入播放参数及事件监听器
mBRTCPlayer.initPlayer(mPlayerParameters, this);
- 播放设置
// 设置播放渲染视图
mBRTCPlayer.setSurfaceView(mVideoView);
// 设置媒体流地址
mBRTCPlayer.setStreamUri(mStreamUrl);
- 播放控制
// 准备播放,获取播放依赖资源
mBRTCPlayer.prepareAsync();
// 开始播放
mBRTCPlayer.startPlay();
// 暂停播放
mBRTCPlayer.pausePlay();
// 恢复播放
mBRTCPlayer.resumePlay();
// 停止播放
mBRTCPlayer.stopPlay();
- 释放播放器
// 释放播放器
mBRTCPlayer.releasePlayer();
- 混淆规则
-keepclasseswithmembernames,allowshrinking,allowoptimization class * {
native <methods>;
}
-keep interface * {
public <fields>;
public <methods>;
}
-keep class com.baidu.rtc.** {*;}
-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() | 获取播放状态 |