准备工作
(1)屏幕保持常亮
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
(2)横竖屏发起视频
/**
* 如果竖屏发起设置ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
* 如果横屏发起设置ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
*/
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
(3)设置发起布局
<com.vhall.push.VHVideoCaptureView
android:id="@+id/cameraview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
(4)本地回显适配模式设置
推流播放器初始化成功后设置生效
camerview.setCameraDrawMode(VHLivePushFormat.DRAW_MODE_ASPECTFILL);
适配类型 | 描述 |
---|---|
VHLivePushFormat.DRAW_MODE_NONE | 默认 |
VHLivePushFormat.DRAW_MODE_ASPECTFIT | 自适应居中 |
VHLivePushFormat.DRAW_MODE_ASPECTFILL | 铺满全屏 |
(5)设置美颜等级
//打开美颜功能
cameraview.setFilterEnable(true);
//设置美颜等级 1-5
cameraview.setBeautyLevel(level);
(6)设置镜像
cameraview.setMirror(boolean mirror);
发直播
发直播必须获取Token,token时效是24小时,并且唯一性,如果调用成功后之前的Token无效 , 详见获取SDK推流TOKEN。 用户如果登陆默认是子账号发直播,如果不登录,默认是主账号发直播 。 使用的Token需要用Api重新生成,否则会返回身份验证失败
初始化直播间信息:
发起参数描述:
参数字段 | 描述 |
---|---|
id | 活动ID(9位) , 在网页上创建 |
accessToken | 请求API获取的Token |
LoadWebinarInfoCallback | 回调信息 |
代码展示
VhallSDK.initBroadcast(param.broId, param.broToken, new WebinarInfoDataSource.LoadWebinarInfoCallback() {
@Override
public void onWebinarInfoLoaded(String jsonStr, WebinarInfo webinarInfo) {
//jsonStr 原始数据返回
//WebinarInfo 解析后的 房间信息封装,当vss_token与vss_room_id 非空时为H5活动
}
@Override
public void onError(int errorCode, String errorMsg) {
}
});
初始化推流参数 VHLivePushConfig
VHLivePushConfig config = new VHLivePushConfig(VHLivePushFormat.PUSH_MODE_XHD);
config.screenOri = VHLivePushFormat.SCREEN_ORI_LANDSPACE;
config.videoBitrate = 1500*1000;
//纯音频直播时设置
//config.streamType=VHLivePushFormat.STREAM_TYPE_A;
视频分辨率类型
参数字段 | 描述 |
---|---|
VHLivePushFormat.PUSH_MODE_HD | 640*480 |
VHLivePushFormat.PUSH_MODE_XHD | 1280*720 |
VHLivePushFormat.PUSH_MODE_XXHD | 1920*1080 |
内部变量说明
参数字段 | 描述 | 默认值 |
---|---|---|
videoFrameRate | 视频帧率 | 15(10-30) |
videoBitrate | 视频码率 | 800*1000 b/s(与视频清晰度相关) |
screenOri | 横竖屏 | 横屏 VHLivePushFormat.SCREEN_ORI_LANDSPACE |
pushTimeout | 推流超时时长 | 5*1000 ms |
pushReconnectTimes | 重连次数 | 5 |
streamType | 推流类型 | 音视频 VHLivePushFormat.STREAM_TYPE_AV |
直播间横竖屏参数
参数字段 | 描述 |
---|---|
VHLivePushFormat.SCREEN_ORI_LANDSPACE | 横屏 |
VHLivePushFormat.SCREEN_ORI_PORTRAIT | 竖屏 |
推流类型
参数字段 | 描述 |
---|---|
VHLivePushFormat.STREAM_TYPE_NONE | 推流内容 |
VHLivePushFormat.STREAM_TYPE_AV | 音视频 |
VHLivePushFormat.STREAM_TYPE_V | 纯视频 |
VHLivePushFormat.STREAM_TYPE_A | 纯音频 |
初始化推流实例
Broadcast.Builder builder = new Broadcast.Builder()
.cameraView(mView.getCameraView())//视频渲染view
.config(config)//直播配置
.callback(new BroadcastEventCallback())//播放器事件回调
.chatCallback(new ChatCallback());//聊天回调
Boradcast broadcast = builder.build();
开始直播:
broadcast.start();
结束直播
参数说明:
参数字段 | 描述 |
---|---|
id | 活动ID(9位) |
accessToken | 请求API获取的Token |
broadcast | 发直播实例 |
RequestCallback | 回调信息 |
//结束成功后,内部已调用broadcast.stop();
VhallSDK.finishBroadcast(param.broId, param.broToken, getBroadcast(), new RequestCallback());
###销毁直播实例
broadcast.destroy();
直播事件回调
private class BroadcastEventCallback implements VHPlayerListener {
@Override
public void onError(int errorCode, int innerErrorCode,String reason) {
// 直播时发生错误回调,查看错误信息
}
@Override
public void onStateChanged(Constants.State state) {
// 直播时发生的状态回调
switch (state) {
case START:/** 开始直播*/
break;
case STOP:/** 停止直播*/
break;
}
}
@Override
public void onEvent(int eventCode, String eventMsg) {
switch (eventCode) {
case Constants.Event.EVENT_UPLOAD_SPEED:
//推流速度
mView.setSpeedText(eventMsg + "/kbps");
break;
case Constants.Event.EVENT_NETWORK_UNOBS:
mView.showMsg("网络通畅!");
break;
case Constants.Event.EVENT_NETWORK_OBS:
mView.showMsg("网络环境差!");
break;
}
}
}
事件码
常量 | 描述 |
---|---|
Constants.Event.EVENT_UPLOAD_SPEED | 推流速率(/kbps) |
Constants.Event.EVENT_NETWORK_UNOBS | 网络通畅 |
Constants.Event.EVENT_NETWORK_OBS | 网络环境差 |
错误码
错误码 | 描述 |
---|---|
10401 | 活动结束失败 |
10402 | 当前活动ID错误 |
10403 | 活动不属于自己 |
10409 | 第三方用户对象不存在 |
10411 | 用户套餐余额不足 |
20101 | 正在直播 |
20102 | 初始化视频信息失败 |
20103 | 预览失败,无法直播 |
20104 | 直播地址有误 |
20105 | 连接服务器失败 |