Android 端集成指引
概述
百度云超低延时直播(BRTCPlayer)全功能版本是在百度智能云视频直播的基础上通过链路传输协议优化,解决传统直播延迟过高的弊端,通过集成百度智能云播放器SDK,可以支持千万级并发场景的毫秒级延时直播,并为用户提供低卡顿、秒开流畅的直播观看体验。
功能介绍
BRTCPlayer 主要功能如下:
- 多信令模式:支持HTTP及基于Minisdp的udp信令模式;支持BD UDP私有信令模式:0 RTT 极速启播,有效提升秒开率;
- 支持AVC、HEVC视频硬解码;
- 支持视频B帧:引入B帧,可在清晰率不变的情况下降低码率;
- 支持AAC音频解码,支持MP4A-ADTS、LATM格式 48000 及 44100 采样率;
- 支持视频平滑渲染: 网络抖动时,平滑渲染视频帧, 降低卡顿;
- 支持最小延迟动态配置:可实现延迟换流畅,在允许范围内增大延迟可有效降低卡顿;
- 支持网络健康度实时检测;
- 支持 SEI 消息;
Demo体验
前往DEMO下载页面扫码安装DEMO
SDK 下载
前往SDK下载页面下载支持超低延时全功能SDK版本, 内含Demo源码;
快速集成
百度云超低延时直播由独立SDK提供支持,用户可通过在播放侧单独集成BRTCPlayer SDK实现超低延时直播,而推流侧则可复用当前使用的推流器,仅需在百度直播LSS平台针对当前域名开通低延时播放能力。 BRTCPlayer SDK具体的集成步骤如下:
- 导入BRTCPlayer aar到工程,集成后的示例如下:
- 修改 build.gradle
dependencies {
implementation fileTree(dir: 'libs', include: ['brtcplayer.aar'])
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
...
}
- 添加混淆规则
-keepclasseswithmembernames,allowshrinking,allowoptimization class * {
native <methods>;
}
-keep interface * {
public <fields>;
public <methods>;
}
-keep class com.baidu.rtc.** {*;}
-keep class com.webrtc.** {*;}
快速开始
- 创建播放渲染视窗
// 在布局文件中添加渲染控件
<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);
- 创建播放器对象及播放器初始化
// 创建播放器对象
mBRTCPlayer = new BRTCPlayerImpl(this);
// 创建播放参数集,初始化播放器
mPlayerParameters = new BRTCPlayerParameters();
// 设置播放器信令服务地址
mPlayerParameters.setPullUrl(mSignalUrl);
// 设置信令模式
mPlayerParameters.setSignalingMode(mSignalingMode);
// 初始化播放器 传入播放参数及事件监听器
mBRTCPlayer.initPlayer(mPlayerParameters, this);
- 播放设置
// 设置播放渲染视图
mBRTCPlayer.setSurfaceView(mVideoView);
// 设置媒体流地址
mBRTCPlayer.setStreamUri(mStreamUrl);
- 播放控制
// 准备播放,获取播放依赖资源
mBRTCPlayer.prepareAsync();
// 开始播放
mBRTCPlayer.startPlay();
// 暂停播放
mBRTCPlayer.pausePlay();
// 恢复播放
mBRTCPlayer.resumePlay();
// 停止播放
mBRTCPlayer.stopPlay();
- 释放播放器
// 释放播放器
mBRTCPlayer.releasePlayer();
在智能视频SDK Demo中对上述流程有详细的展示,可以参考;
接口说明
BRTCPlayerParameters类
接口名 | 描述 | 备注 |
---|---|---|
void setEnableDebug(boolean enable) | 设置是否开启debug日志 | 无 |
void setPullUrl(String pullUrl) | 设置信令服务地址,格式为http[:s]//domain/brtc/v3/pullstream | 仅HTTP信令 |
void void setSignalingMode(SignalingMode signalingMode) | 设置信令模式 | 默认HTTP信令 |
void setAutoPlay(boolean autoPlay) | 设置是否自动启播,默认false | 设置后调用prepareAsync后自动播放 |
void void setEnableSilentStart(boolean enable) | 设置静音启播 | 无 |
void setBaseDelayMs(int baseDelayMs) | 设置最小延时, 可通过该参数增大延时降低卡顿提升播放流畅度 | 非必需 |
void setCpuType(String cpuType) | 指定下载的SO库CPU架构 | 非必需,开启so后下载配置 |
void setVideoDecodeFormat(int videoDecodeFormat) | 设置视频解码格式,由业务侧确定是否为H265格式,默认为H264格式 | 仅UDP_RTL信令 |
void setAudioSampleRate(int sampleRate) | 设置音频播放采样率[48000, 44100], 仅UDP_RTL信令模式 | 仅UDP_RTL信令 |
void setEnableVideoBFrame(boolean bFrame) | 是否开启B帧支持,由业务侧决定是否开启 | 默认开启 |
void setMediaServerIp(String mediaServerIp) | 预设媒体服务IP地址以加速启播 | 非必需,可配合HttpDns使用 |
void setEnableFirstFrameReconnect(boolean enable) | 当前播放超过2s没有出首帧则使用Http信令模式重试一次 | 默认开启 |
SignalingMode 枚举类
枚举类型 | 信令模式 | 备注 |
---|---|---|
HTTP_RTL | HTTP信令 | 自协商媒体参数 |
UDP_RTL | 百度私有UDP信令 | 使用该模式时需通过BRTCPlayerParameters类预设音视频媒体类型参数 |
UDP_MINISDP | MINISDP UDP 信令 | 自协商媒体参数 |
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 | 连接创建失败 |
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 | 解码器打开失败 |
int BRTC_PLAYER_ERROR_MTU_SIZE_CHECK_FAILED = 10014 | 用户网络MTU Size 检测失败,无法支持RTC媒体传输,约2s后返回,建议业务侧降级为普通播放 |
int BRTC_PLAYER_ERROR_SET_EXTERNAL_SURFACE = 10015 | 设置外部渲染错误, 重复设置相同外部Surface |
int BRTC_PLAYER_ERROR_ILLEGAL_STATE = 10016 | 非法状态错误 |
事件码 | 含义 |
---|---|
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_FIRST_AUDIO_PLAYOUT = 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 | 解码器成功打开 |
BRTC_PLAYER_EVENT_START_RECONNECT = 1015 | 内部播放重连 |
BRTC_PLAYER_EVENT_LINK_DOWN = 1016 | 播放链路带宽不足,建议业务侧尝试低码率流播放 |
BRTC_PLAYER_EVENT_FIRST_AUDIO_PLAYOUT = 1007 | 没有检测到媒体流 |
事件回调 | 含义 |
---|---|
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 数据格式(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;
RTCVideoView类
枚举类型 | 描述 |
---|---|
ScalingType.SCALE_ASPECT_FIT | 缩放模式:适应 |
ScalingType.SCALE_ASPECT_FILL | 缩放模式:拉伸 |
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() | 获取播放状态 |