师生对讲教师端
启动项参数
分为指定个人启动 和 从选择界面启动两种模式,输入的参数不同
1.从选人界面启动:
注:座位信息格式为:
{SEATID:1}{SEATNAME:A1}{ONLINE:1}{rect:457,246,50,50}{IP:192.168.110.180}{NAME:}{STUID:}{gender:}{PIC:}{TOOLSTATE:}
没有的信息可以不用,比如没有NAME就直接不要{NAME:},SEATID、ONLINE、rect必须有且SEATID要唯一。其中rect为选人界面的基准,如果没有rect可能会导致选人界面错误。目前未对空rect的情况做相应处理,如果有需要的话后续的更新会加上。
教师的座位信息与学生座位信息的格式相同,但教师的座位信息中SEATID为0
法1:进入选人界面,选择需要参加会议的成员,输入的参数argc分别为12 个 和 13 个
1.int tcp_port 教师端师生对讲tcp端口
2.char* server_ip 视频服务器ip
3.int server_port 视频服务器端口
4.char* teacher_info 教师的座位信息字符串
5.char* student_json 所有学生座位信息的字符串
6.char* class_name 班级名称,如果没有则传0
7.int hwnd 主窗体句柄,用于窗口消息
8.int class_index 教室房间号,没有则传0
9.int lbd_student_hwnd 传入学生座位句柄号(此句柄号仅用于设置对讲的初始位置,如果没有,则直接输入主窗体句柄即可)
10.int screen_state 屏幕广播启动状态(当教师端启动屏幕广播时,学生端的师生对讲应该被隐藏,同时教师端不再传输数据给学生端)
11.char* title_name 进入会议内的抬头名称,默认为师生对讲
法2:从学生座位中选中人进入师生对讲,直接进入1对1的对讲
选中指定对象进行对讲,不选择需要参加会议的成员
1.int tcp_port
2.char* server_ip 视频服务器ip
3.int server_port 视频服务器端口
4.char* teacher_info 教师的信息字符串,如果没有座位则留0即可
5.int selected_student 被选中同学的座位号
6.char* students_json所有学生信息的字符串
7.char* class_name 班级名称,如果没有则传0
8.int hwnd 主窗体句柄
9.int class_index 教室房间号
10.lbd_student_hwnd(此句柄号仅用于设置对讲的初始位置,如果没有,则直接输入主窗体句柄即可)
11.int screen_state 屏幕广播启动状态(当教师端启动屏幕广播时,学生端的师生对讲应该被隐藏,同时教师端不再传输数据给学生端)
12.char* title_name 进入会议内的抬头名称,默认为师生对讲
同上,这里不做举例了。
与框架交互的窗体消息:
1.师生对讲发送消息:
本工具使用的所有消息都是SendCopydate,所有消息通过 const ULONG_PTR tINTERCOM = WM_USER + 5936; 发送
1.启动选人界面时:
会发送
Intercom|StartSelect|师生对讲窗口句柄
通过此消息获得师生对讲工具的窗口句柄
2.正式进入会议:
包括从选人界面进入师生对讲,以及从学生座位上直接选择进入会议,师生对讲工具会发送
Intercom|StartVideoMeeting|师生对讲窗口句柄
通过此消息可以获得师生对讲工具的窗口句柄
3.用户进入会议:
包括从选人界面进入时选中的用户,以及在邀请处选中用户进入会议,会发送当前所有在会议内的用户名单,学生端中途插入会议时,师生对讲工具会发送。
Intercom|NewActived|本次加入的用户座位号,以;分隔
比如
Intercom|NewActived|15;1;2;3;4;5
4.用户退出会议
学生自己退出会议、被学生座位处反选退出某位学生的师生对讲,都会发送这条消息
Intercom|QuitActived|退出学生座位号
每次加入的用户应该有且仅有一位用户,每次似乎会发送两次这个消息,尚未修复。
//程序退出不发消息码,请用进程类监控
2.师生对讲接收消息
1.关闭师生对讲
师生对讲接收到如下消息时,会退出进程。
PF_Frame|QuitIntercom
2.添加用户
师生对讲接收到如下消息,且会议内学生用户小于八名时,会向会议内添加一名用户
PF_Frame|NewCommer|座位号
如果当前会议内用户已经有八名用户 或 当前添加用户已在会议内 或当前会议用户不在总的学生列表内,该指令无效
3.踢出用户
师生对讲接到如下消息时,且会议内学生用户大于0名,会将会议内指定用户踢出会议。
PF_Frame|NewQuit|座位号
如果当前会议内没有用户 或 当前提出用户不在会议内 或当前用户不在总的学生列表内,该指令无效
4.更新学生信息
师生对讲接到如下消息时,会更新学生用户的信息:
PF_Frame|NewSeatValue|学生座位信息
可以是单个用户的信息,也可以是多个用户的座位信息通过|组合
此条消息不论是已经存在学生列表的用户、尚不在学生列表内和正在会议内的用户都可以使用,会更新该用户的头像、名称、座位信息,同时会将新的用户的发送给其他学生端。
5.更新教师信息
师生对讲接到如下消息时,
PF_Frame|NewTeacherInfo|教师座位信息
同上,但教师信息只能有一条,不赘述。
师生对讲学生端
师生对讲学生端启动参数:
//argc = 3
1.int tcp_ip 师生对讲教师端ip
2.int tcp_port 师生对讲
3.int main_hwnd 主框架句柄
4.char* title_name 进入会议内的抬头名称,默认为师生对讲 ## 师生对讲学生端窗体消息
所有发送消息通过PostMessage发送,消息码通过const ULONG_PTR sINTERCOM = WM_USER + 5938。
接收消息通过
const qint32 msg_framechange = WM_USER + 5936;
1. 师生对讲学生端发送窗体消息
1.发送师生对讲的窗体句柄
通过PostMessage发送,所有消息码通过const ULONG_PTR sINTERCOM = WM_USER + 5938;
//启动时向学生端发送当前的窗体句柄
::PostMessage((HWND)mainHWND, sINTERCOM, 0, this->winId());
2.师生对讲学生端接收窗体消息
1.接收消息是否窗口隐形
通过const qint32 msg_framechange = WM_USER + 5936;
lParam == 1时,窗体出现
lParam == 0时,窗体隐形
附加的依赖:
LBD_VideoMeeting.lib
LBD_VideoMeeting.dll
Qt5Widgets.dll
Qt5Network.dll
Qt5Gui.dll
Qt5Core.dll
//platforms文件夹下
qwindows.dll
//imageformats文件夹下
qgif.dll
qico.dll
qjpeg.dll
附录1:
下面教师端和学生端的生成文件夹相同,如下。
dmp文件和日志文件被保存到当前目录下的Log(Intercom)下,当前不会有debug输出日志。
头像图片会被缓存到当前目录下的Intercom_TempImages下。