播放器皮肤#
因为回放播放器本身是透明的 所以可以直接设置回放播放器父容器的颜色或背景图。因为直播播放器默认颜色为黑色,增加设置图片和背景的方法boolean setVideoBackgroundColor(int color)#
boolean setVideoBackgroundImage(Bitmap bitmap)#
设置时机#
private class WatchCallback implements VHPlayerListener {
@Override
public void onStateChanged(com.vhall.player.Constants.State state) {
switch (state) {
case START:
InputStream is = watchView.getActivity().getResources().openRawResource(R.drawable.splash_bg);
Bitmap mBitmap = BitmapFactory.decodeStream(is);
if (!watchLive.setVideoBackgroundImage(mBitmap)) {
ToastUtil.showToast("设置失败");
} else {
ToastUtil.showToast("设置成功");
}
break;
互动权限修改#
嘉宾和观众进入互动不在直接要求权限,改为申请上麦或者同意上麦的 时候由观众自己做权限判断这个方法必须 有权限 才可以调用 用户使用过程需要注意权限否则会导致没有声音和画面,甚至崩溃;直播过程中 关闭权限会导致 app重启 所有链接断开 导致用户收不到消息 ,需要重新进入直播间才可以
云导播#
注:sdk 6.4.0之后支持 云导播功能#
接口:获取活动基础信息,用于判断当前活动是否是云导播#
void getBaseWebinarInfo(final String id, final RequestDataCallback callback)
WebinarBaseInfoData 返回信息`
接口:获取云导播开关#
void getDirectorStatus(final String id, final RequestDataCallback callback)
返回信息 sting
云导播台状态, 0: 未开启, 1:已开启
接口:获取当前云导播活动下的机位列表#
void getDirectorSeatList(final String id, final RequestDataCallback callback)
DirectorSeatListData 返回信息
接口:占用当前云导播活动下的机位#
| 参数字段 | 描述 |
|---|
| id | 活动id |
| seatId | 占用当前机位的id |
void directorSelectSeat(final String id, final String seatId, final RequestCallback callback)
无返回 接口调用成功则代表机位可以占用
接口:初始化房间详情,机位进入房间,调用接口(只机位使用)#
| 参数字段 | 描述 |
|---|
| id | 活动id |
| seatId | 占用当前机位的id |
void initDirector(final String id, final String seatId, final WebinarInfoDataSource.LoadWebinarInfoCallback callback)
WebinarInfo 返回信息
使用文档#
一、根据活动id判断当前云导播活动是否开启#
判读是否是云导播,否退出,是调用接口VhallSDK.getDirectorStatus 获取云导播开关,获取当前是否支持机位进入
如果当前云导播台开启(getDirectorStatus),可以选择机位进入,如果没开则不可以选择机位
拉取机位列表(getDirectorSeatList),选择一个没有被占用的机位,占用(directorSelectSeat),然后进入房间推流(initDirector)
二、机位进入#
1、先根据活动id获取机位列表 VhallSDK.getDirectorSeatList#
2、选择一个可用的机位,然后占用机位#
进入机位推流房间 DirectorPushActivity,使用 VhallSDK.initDirector获取房间详情#
机位注意#
1.
断网或者推到后台会中断推流,再回到前台或者网络重联的时候需要重新调用 2占用机位, 判断是否可以继续占用机位推流,可以继续推流不可以 直接退出房间
三、主持人进入#
1、依照之前逻辑 进入BroadcastActivity#
2、根据当前活动是云导播活动,进入DirectorFragment#
3、直播间不 能推流,只能拉流显示 具体参考DirectorFragment、DirectorPresenter#
问答、问卷修改#
//有人提交问卷 messageInfo.user_id 提交人的id获取当前活动下当场开播场次下 历史问卷接口 since 6.4.0#
禁言信息 demo层使用说明#
//是否可以聊天
private boolean canSpeak = true;
//全体禁言
private boolean chatALLForbid = true;
//私人禁言
private boolean chatOwnForbid = true;
//是否可以 发问答
private boolean canSpeakQa = true;1、从初始化房间拿到 初始化结果#
2、根据消息时时修改 (问答开关新增 messageInfo.question_name 替换问答两个字)#
case MessageServer.EVENT_DISABLE_CHAT://禁言
watchView.showToast("您已被禁言");
canSpeak = false;
chatOwnForbid = true;
break;
case MessageServer.EVENT_PERMIT_CHAT://解除禁言
watchView.showToast("您已被解除禁言");
chatOwnForbid = false;
canSpeak = !chatALLForbid;
break;
case MessageServer.EVENT_CHAT_FORBID_ALL://全员禁言
//问答状态 根据全体禁言判断 如果开启禁言择不可以发送问答 如果关闭择根据 qa_status判断 1开启禁言 0关闭
if (messageInfo.status == 0) {
//取消全员禁言
watchView.showToast("解除全员禁言");
canSpeak = !chatOwnForbid;
chatALLForbid = false;
canSpeakQa = true;
} else {
//全员禁言
watchView.showToast("全员禁言");
chatALLForbid = true;
canSpeakQa = !TextUtils.equals("1", messageInfo.qa_status);
canSpeak = false;
}
break;
case MessageServer.EVENT_QUESTION: // 问答开关
String question_name = "问答";//默认显示 可以自己按照需求设置
if (!TextUtils.isEmpty(messageInfo.question_name)) {
question_name = messageInfo.question_name;
}
watchView.showToast(question_name + "功能已" + (messageInfo.status == 0 ? "关闭" : "开启"));
3、发送消息或者问答的时候 根据状态过滤#
//问答
if (!canSpeakQa) {
watchView.showToast("你被禁言了");
return;
}
//消息
if (!canSpeak) {
watchView.showToast("你被禁言了");
return;
}