用户工具

站点工具


vhall_open:功能接入介绍

功能接入介绍

聊天服务器相关功能

当用户在创建发起直播实例或者观看直播实例时的.ChatCallback中传入chatCallback回调,聊天服务器就已经开启了,具体参考快速接入介绍

中的发起观看创建实例的描述

以下是聊天服务器回调

private class ChatCallback implements ChatServer.Callback {
        @Override
        public void onChatServerConnected() {}// 聊天服务器建立
        @Override
        public void onConnectFailed() {} // 聊天服务器连接失败
        @Override
        public void onChatMessageReceived(ChatServer.ChatInfo chatInfo) {//消息接收
            switch (chatInfo.event) {
                case ChatServer.eventMsgKey: // 聊天消息通知
                    break;
                case ChatServer.eventOnlineKey: // 上线消息通知
                    break;
                case ChatServer.eventOfflineKey: // 下线消息通知
                    break;
                case ChatServer.eventQuestion: // 问答消息
                    break;
            }
        }
        @Override
        public void onChatServerClosed() {}// 聊天服务器关闭
}

公共字段

字段 说明
account_id用户ID
user_name用户昵称
avater用户头像
room活动id
event消息类型 (用于区分消息用途)
time发送时间

聊天服务器其他方法

连接聊天服务器:

getBroadcast().connectChatServer ();
关闭聊天服务器:
getBroadcast().disconnectChatServer ();

(1)上下线消息通知

使用此功能默认聊天服务器已开启

消息体说明:chatInfo.event = “online offline”

OnlineData 说明
role用户类型 host:主持人 guest:嘉宾 assistant:助手 user:观众
concurrent_user房间内当前用户数
is_gag是否被禁言
attend_count参会人数

(2)、聊天消息

使用此功能默认聊天服务器已开启

目前发起直播和观看直播中可以聊天。发起直播调用getBroadCast().sendChat()方法 。观看直播调用getWatchLive().sendChat()。

参数说明:

参数字段 说明
text聊天内容
VhallSDK.RequestCallback回调信息

发起直播代码展示 && 观看直播代码展示:

getBroadcast().sendChat(text, new VhallSDK.RequestCallback() { // 发起直播时聊天
            @Override
            public void success() {}
            @Override
            public void failed(int errorCode, String reason) {}
        });
getWatchLive().sendChat(text, new VhallSDK.RequestCallback() {// 观看直播时聊天
            @Override
            public void success() {}
            @Override
            public void failed(int errorCode, String reason) {}
        });

消息体说明:chatInfo.event = “msg”

ChatData 说明
text聊天内容
VhallSDK.RequestCallback回调信息

发起直播代码展示 && 观看直播代码展示:

getBroadcast().sendChat(text, new VhallSDK.RequestCallback() { // 发起直播时聊天
            @Override
            public void success() {}
            @Override
            public void failed(int errorCode, String reason) {}
        });
getWatchLive().sendChat(text, new VhallSDK.RequestCallback() {// 观看直播时聊天
            @Override
            public void success() {}
            @Override
            public void failed(int errorCode, String reason) {}
        });

消息体说明:chatInfo.event = “msg”

ChatData 描述
text聊天内容

(3)、聊天记录

获取SDK聊天记录。聊天记录只在观看直播时候获取,调用acquireChatRecord()

参数说明:

参数 描述
showAll显示当次直播聊天最多为20条,true显示所有聊天最条为20条
ChatRecordCallback聊天记录回调

代码展示:

getWatchLive().acquireChatRecord(false, new ChatServer.ChatRecordCallback() {
            @Override
            public void onDataLoaded(List<ChatServer.ChatInfo> list) {}
            @Override
            public void onFailed(int errorcode, String messaage) {}
});

错误码

错误码 描述
10030身份验证出错
10402当前活动ID错误
10403活动不属于自己
10407查询数据为空
10408当前活动非直播状态
10409参会信息不存在
10410活动开始时间不存在

(4)、问答消息

发送活动问答

目前只支持观看端发送活动问答。在用户登陆成功的情况下可以发送问答,问答每5分钟发送一次,避免一些用户恶意发送。调用sendQues()方

法,发送问答信息。

代码展示

getWatchLive().sendQuestion (text, new VhallSDK.RequestCallback() {
            @Override
            public void success() { // 发送成功 }
            @Override
            public void failed(int errorCode, String reason) {// 发送失败}
        });

消息体说明:chatInfo.event = “question”

QuestionData 描述
id问题的id
nick_name昵称
content提问内容
join_id参会ID
created_at创建时间
role_name角色
is_open是否为私密回答
QuestionDataanswer 参数和此消息体相同

错误码

错误码 描述
10601不是直播
10602参会者不存在
10602参会者不存在
106035分钟内不可提问
10604活动ID不能为空
10605问题不能为空
10606用户不能为空

消息服务器相关功能

消息服务器,目前只用于观看端使用,用于接收观看直播时的一些消息处理

private class MessageEventCallback implements MessageServer.Callback {
        @Override
        public void onEvent(MessageServer.MsgInfo messageInfo) {
            switch (messageInfo.event) {
                case MessageServer.EVENT_PPT_CHANGED://PPT翻页消息
                    documentView.showDoc(messageInfo.pptUrl);
                    break;
                case MessageServer.EVENT_DISABLE_CHAT://禁言 暂不可用
                    break;
                case MessageServer.EVENT_KICKOUT://踢出 暂不可用
                    break;
                case MessageServer.EVENT_OVER://直播结束  
                    break;
                case MessageServer.EVENT_PERMIT_CHAT://解除禁言  暂不可用 
                    break;
                case MessageServer.EVENT_START_LOTTERY://抽奖开始
                    break;
                case MessageServer.EVENT_END_LOTTERY://抽奖结束
                    break;
                case MessageServer.EVENT_NOTICE: 公告消息
                    break;
                case MessageServer.EVENT_SIGNIN: //签到消息
                    break;
                case MessageServer.EVENT_QUESTION: // 问答开关
                    break;
            }
 
        }
        @Override
        public void onConnectFailed() {}
        @Override
        public void onMsgServerClosed() {}
    }

公共参数:

字段 描述
event消息类型 (用于区分消息用途)

连接消息服务器:

getWatchLive().connectMsgServer ();

关闭消息服务器:

getWatchLive().disconnectMsgServer ();

(1)、活动结束消息

msgInfo.event = “MessageServer.EVENT_OVER”

(2)、抽奖消息

观看直播时播主可以发起抽奖,而在移动端观看时可以接受抽奖消息,目前默认游客和参会用户都可以抽奖,而且只能被中奖一次

开始抽奖消息体msgInfo.event = “MessageServer. EVENT_START_LOTTERY”

字段 描述
Num可以中奖的数量
type消息类型键

结束抽奖消息体msgInfo.event = “MessageServer. EVENT_END_LOTTERY”

字段 描述
type消息类型键
Msginfo.Lists返回中奖的数组
IsLottery是否中奖
id当前中奖人的参会ID
LotteryID抽奖ID

Msginfo.Lists 结构体

字段 描述
nickname中奖昵称
user_id用户ID
third_user_id登陆用户名

当用户中奖后,需要提交信息,访问SDK中的submitLotteryInfo() , 所需参数如下

字段描述

字段 描述
id当前中奖人的参会ID
LotteryID抽奖ID
name中奖人姓名
phone中奖人电话

SDK代码展示

VhallSDK.getInstance().submitLotteryInfo(joid_id, lottery_id, nickname, phone, 
new VhallSDK.RequestCallback() {
            @Override
            public void success() {}
            @Override
            public void failed(int errorCode, String reason) {}
        });
    }

错误码

字段 描述
10030身份验证失败
10409参会ID不能为空
10410抽奖ID不能为空
10411用户名称不能为空
10412用户手机不能为空

(3)、公告消息

msgInfo.event = “MessageServer.EVENT_NOTICE”

当主播正在直播,可以发送公告,公告发送后所有观看的用户都可以接受到消息,Demo中用跑马灯展示

字段 描述
content公告内容
publish_release_time公告发布时间

(4)、签到消息

msgInfo.event = “MessageServer.EVENT_SIGNIN”

当主播正在直播,可以发布签到,观看用户必须登陆才可以签到,签到后web端会进行展示

字段 描述
webinar_id活动ID
sign_id签到ID
user_id用户ID
sign_show_time签到初始时间

(5)、问卷消息

msgInfo.event = “MessageServer. EVENT_SURVEY”

当主播正在直播,可以发送问卷,消息服务器会接收到survey_id ,需要使用这个survey_id 获取问卷信息

VhallSDK.getInstance().getSurveyInfo(surveyid, new SurveyDataSource.SurveyInfoCallback() {
            @Override
            public void onSuccess(Survey survey) {
                watchView.showSurvey(survey);
            }
 
            @Override
            public void onError(int errorCode, String errorMsg) {
                chatView.showToast(errorMsg);
            }
        });
字段 描述
survey_id问卷ID

(6)、白板消息

msgInfo.event = “MessageServer.EVENT_SHOWBOARD” // 开启或者关闭白板

msgInfo.event = “MessageServer.EVENT_INITBOARD”   // 初始化白板

msgInfo.event = “MessageServer.EVENT_PAINTBOARD” // 绘制白板

msgInfo.event = “MessageServer.EVENT_DELETEBOARD  // 删除白板内容

msgInfo.event = “MessageServer.EVENT_CLEARBOARD” // 清空白板

1 配置白板XML (在需要显示的界面中加入, 具体详见文档)

<com.vhall.business.widget.WhiteBoardView

        android:id="@+id/board"
        
        android:layout_width="match_parent"
        
        android:layout_height="match_parent"/>
 

2、 获取到白板的实例调用setStep方法 , 将消息服务器获取的信息传递进方法里就可以了

public void paintBoard(MessageServer.MsgInfo msgInfo) {
        board.setStep(msgInfo);    
}
public void paintBoard(String key, List<MessageServer.MsgInfo> msgInfos) {
        board.setSteps(key, msgInfos);
}

(7)、PPT消息(修改)

msgInfo.event = “MessageServer.EVENT_CHANGEDOC” 切换文档页面 msgInfo.event = “MessageServer.EVENT_PAINTDOC” 绘制文档信息

msgInfo.event = “MessageServer.EVENT_DELETEDOC” 删除绘制信息 msgInfo.event = “MessageServer.EVENT_CLEARDOC” 清空绘制信息

1 配置文档XML (在需要显示的界面中加入, 具体详见文档)

<com.vhall.business.widget.PPTView
        android:id="@+id/iv_doc"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

2 获取到文档的实例调用setStep方法 , 将消息服务器获取的信息传递进方法里就可以了

@Override
    public void paintPPT(MessageServer.MsgInfo msgInfo) {
        doc.setStep(msgInfo);
    }					
 
    @Override
    public void paintPPT(String key, List<MessageServer.MsgInfo> msgInfos) {
        doc.setSteps(key, msgInfos);
    }

3、分辨率切换/切换到单音频

1) 目前定义的分辨率有

public static final int DPI_DEFAULT= 0;   // 默认
    public static final int DPI_SD= 1;  // 标清
    public static final int DPI_HD= 2;  // 高清
    public static final int DPI_UHD= 3; // 超高清
    public static final int DPI_AUDIO= 4; // 纯音频

2) 功能实现 :只需要将定义好的常量传到watchLive实例中 ,调用setDefinition(pixel) ,当停止直播之后,不能立即重连,需要延

迟1秒

getWatchLive().setDefinition(level)

3) 获取分辨率是否可用 返回一个map 状态为 0 不可用 : 1 可用

getWatchLive().getDefinitionAvailable();

4、设置观看布局

1) 目前观看端WatchLive定义了5种适配类型,用户可以根据自己的场景去设定

观看类型 描述
FIT_DEFAULT默认 自适应
FIT_CENTER_INSIDE视频的原始尺寸居中显示
FIT_X拉伸X轴,等比例放大(适合PC端发起)
FIT_Y拉伸Y轴,等比例放大(适合移动端发起)
FIT_XY拉伸XY轴 (会拉伸,也会全屏)

2) 设置方法

//scaleType 观看类型
getWatchLive().setScaleType(scaleType);
vhall_open/功能接入介绍.txt · 最后更改: 2017/09/29 15:52 由 yan.gao