# 基本介绍
基于OpenCV+FFmpeg+SDL完成的实时会议的通信软件,采用QT编程进行客户端的UI的设计,全工程使用了IMtoolBOX的抽屉类,和UserItem类实现了好友列表和视屏窗口;
服务器使用Threadpoll+epoll模型实现数据交互、业务处理,最大连接数可达几十万
# 编译环境
myqq 运行环境为Qt5.9.9
server ubuntu任意qt环境即可
# OpenCV文件说明
项目所需的库
注:打开工程后,需配置相应的库的路径
会议聊天室
背景
疫情来袭,兴起了线上教学、工作的模式,展现了“互联网+”时代的优势;群众们万众一心、足不出户抗疫的同时,工作和学习却有条不紊的进行,直播、会议类的APP起了关键的作用。
那么能否开发一款类似的程序呢?
为将所学知识融为一起并加以应用和练习,并迎互联网的热潮,故开发此会议聊天室。
目录
背景 1
一、 设计目的 2
1.1功能与要求 2
1.2 环境选择 2
二、 实现 3
2.1网络模块 3
2.2客户端 3
2.3 会议模块 4
2.4 服务器模块 12
三、 优化 12
3.1视频与音频 12
3.2心跳机制 12
3.2传输效率 12
四、 总结 13
4.1 遇到的问题 13
4.2 学习经历 13
一、 设计目的
1.1功能与要求
1. 实现用户注册、登录
2. 修改密码、个人资料
3. 好友之间信息发送、文件传输
4. 添加删除好友,强制下线
5. 创建、加入多人实时会议
实现要求:
会议时延迟不得超于1秒,直播不限制,文件传输应有秒传,断点续传功能,支持大文件传输等
密码不能明文传输,保证账户的安全.
服务器应承受一定的并发量,并高可用,容灾等
客户端应简单明了,操作方便
1.2 环境选择
客户端的实现使用的是Windows操作系统下的QT, Qt是一个多平台的C++图形用户界面应用程序框架。
服务器使用的是ubuntu16.04,64位版本,同样安装qt作为开发环境;
数据库使用的是Linux MySQL5.7
安装MySQL5.7
1. sudo apt-get install mysql-server
2. sudo apt-get install mysql-client
3. sudo apt-get install libmysqlclient-dev →develop 开发库
sudo netstat -tap | grep mysql
通过上述命令检查之后,如果看到有 mysql 的 socket 处于 listen 状态则表示安装成功。 tcp 0 0 localhost:mysql *:* LISTEN 9764/mysqld
登陆 mysql 数据库可以通过如下命令:
mysql -u root -p
show databases; 就可以查看当前的数据库
我们选择 mysql 数据库就行下一步操作,使用 use mysql 命令,显示当前数据库的表单: show tables ;
二、 实现
2.1网络模块
为了实现可靠性数据传输,项目采用TCP协议
编写函数
bool InitNetWork(char* szBufIP , unsigned short port);
int ConnectToServer( char* szBufIP);
int SendData(char* szbuf,int nLen);
void UnInitNetWork();
自定义协议
自定义协议可解决TCP的粘包问题,增加了程序的扩展性,可读性等
部分协议展示
typedef enum Net_PACK
{
DEF_PACK_REGISTER_RQ = 10000,
DEF_PACK_REGISTER_RS,
DEF_PACK_LOGIN_RQ,
DEF_PACK_LOGIN_RS,
DEF_PACK_CREATEROOM_RQ,
DEF_PACK_CREATEROOM_RS,
DEF_PACK_JOINROOM_RQ ,
DEF_PACK_JOINROOM_RS,
} Net_PACK;
2.2客户端
Qt导入网络模块
编写了网络模块的文件后,对其进行封装加载到项目
include(./netapi/netapi.pri)
INCLUDEPATH += $$PWD/netapi
客户端导入自定义协议 导入 Packetdef.h 编写登录, 注册对应的协议头, 以及对应的请求和回复的结构体. 提交登录和注册请求
关于登录, 处理登录请求, 先根据用户名查表取密码, 如果没有, 那么没有该用户, 有的话, 比对密码 是否一致, 不一致, 返回密码错误, 一致返回登录成功. 除此之外, 这里还可以加是否在线的检测. 此外 登录还需要有, 获取好友列表, 以及告诉好友上线, 以及发送离线期间的所有请求.
登录注册
在登录窗口发送信号:
SIG_loginCommit(QString name , QString password);
SIG_registerCommit(QString name , QString passord);
登录加密的方法
1. MD5 以及 MD5 加盐 2.对称加密 AES 和非对称加密 3.仿照 ssl 握手 4.验证信息以及上次登录 ip , 绑定 ip , 绑定 mac 5.手机验证登录 6.微信验证登录 7.做人脸识别
强制下线请求
当用户的登录时, 发现映射表中已经存在该用户了, 那么, 强制原来的用户下线, 然后录入新用户信息, 并返回结果.
数据库设计:
创建新数据库 myqq. 服务器的数据库设置为 myqq.
添加数据表 t_user
create table t_user ( id bigint unsigned AUTO_INCREMENT primary key, name varchar (260) , password varchar(260) );
添加测试数据
insert into t_user (name,password) values ( 'test','test');
好友表 t_friend
create table t_friend ( idA bigint unsigned , idB bigint unsigned);
用户信息表 t_userInfo : 用户 id , 用户名, 图标号, 心情 → 注册用户时, 写入表 名字 图标号, 默认0 , 心情”
create table t_userInfo ( id bigint unsigned , name varchar (260) , icon int , feeling varchar(260));
好友列表的获取:
发送好友信息,若客户端1和客户端2是好友,1登录时发送个人信息给服务器,服务器转发给客户端2,在将客户端2的信息返还给客户端1;
添加好友:
服务器转发客户端A的请求给客户端B 若B在线则转发,若不在线则记录,等上线时进行转发, 返回结果是否同意给客户端A,同意之后将好友列表更新,写入数据库.
聊天的请求与回复
通过服务器转发聊天请求,如果不在线存入数据库中,等上线时在进行转发
2.3 会议模块
创建房间
客户端发送创建房间请求 ,服务器随机生成房间号返回
加入房间
客户端发送加入房间请求,服务器查看房间是否存在,若存在将客户端1添加至房间列表
给房间的每一个客户端发送成员列表
退出房间
客户端1回收房间资源,服务器收到某客户端1退出房间的请求后,查找房间,得到用户列表,向每一个客户端发送客户端1退出房间--每一个客户端接受后删除客户端1的资源
房间用户列表
//房间成员请求
typedef struct STRU_ROOM_MEMBER_RQ
{
STRU_ROOM_MEMBER_RQ()
{
m_nType= DEF_PACK_ROOM_MEMBER;
m_UserID =0;
memset(m_szUser,0,MAX_SIZE);
}
PackType m_nType; //包类型
int m_UserID;
char m_szUser[MAX_SIZE];
}STRU_ROOM_MEMBER_RQ;
延迟分析:
视频会议的特点: 低延迟, 音频, 视频 , 多人聊天. 关于低延迟, 视频会议与直播的项目是不同的. 直 播项目是一个 1 对多的过程, 并且, 是允许 5 秒左右的网络延迟的, 而视频会议, 一般延迟要求 1 秒以内
视频
对于音频视频方面, 项目中是需要采集摄像头, 采集声音, 以及 利用白板功能采集桌面;
视屏处理流程如下:
摄像头采集 编码 网络通道 解码 图像显示
对于视频方面的考虑, 首先获取到视频数据后, 是比较大的, 网络传输很占用带宽, 所以需要编码(压 缩), 来减小数据大小. 那么要使用什么编码合适呢? 可以使用 ffmpeg 进行编码. 视频方面可 以使用它将视频编码为 h264 格式数据再进行传输.
高级功能:
(1)动态调整视频的清晰度 在 Internet 上,网络速度是实时动态变化的,所以,在视频会议中,为了优先保证语音的通话质 量,需要实时调整视频的相关参数,其最主要的就是调整编码的清晰度,因为清晰度越高,对带宽要 求越高,反之亦然。 比如,当检测网络繁忙时,就自动降低编码的清晰度,以降低对带宽的占用。
(2)自动丢弃视频帧 同样网络繁忙时,还有一个方法,就是发送方是主动丢弃要发送的视频帧,这样在接收方看来, 就是帧频 fps 降低了
音频
对于音频方面, 和上面的描述类似, 也是需要编码后再传输, 而音频方面的编码
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于OpenCV+FFmpeg+SDL+Qt完成的实时会议的通信软件源码+文档说明,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心下载使用~ 基于OpenCV+FFmpeg+SDL+Qt完成的实时会议的通信软件源码+文档说明,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心下载使用~ 基于OpenCV+FFmpeg+SDL+Qt完成的实时会议的通信软件源码+文档说明,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心下载使用~ 项目简介: 基于OpenCV+FFmpeg+SDL完成的实时会议的通信软件,采用QT编程进行客户端的UI的设计,全工程使用了IMtoolBOX的抽屉类,和UserItem类实现了好友列表和视屏窗口; 服务器使用Threadpoll+epoll模型实现数据交互、业务处理,最大连接数可达几十万
资源推荐
资源详情
资源评论
收起资源包目录
基于OpenCV+FFmpeg+SDL+Qt完成的实时会议的通信软件源码+文档说明(毕业设计&课设&项目开发) (692个子文件)
myqq.pro.user.22 22KB
myqq.pro.user.889da6b.4.8-pre1 23KB
myqq.pro.user.4.8-pre1 23KB
libopencv_ts2410.a 1.12MB
libopencv_core2410.dll.a 897KB
libopencv_legacy2410.dll.a 608KB
libopencv_stitching2410.dll.a 477KB
libopencv_gpu2410.dll.a 473KB
libopencv_features2d2410.dll.a 469KB
libopencv_contrib2410.dll.a 408KB
libopencv_ml2410.dll.a 399KB
libopencv_imgproc2410.dll.a 286KB
libopencv_videostab2410.dll.a 264KB
libopencv_haartraining_engine.a 246KB
libopencv_calib3d2410.dll.a 178KB
libopencv_objdetect2410.dll.a 176KB
libopencv_superres2410.dll.a 126KB
libopencv_nonfree2410.dll.a 113KB
libopencv_highgui2410.dll.a 104KB
libopencv_video2410.dll.a 99KB
libopencv_flann2410.dll.a 57KB
libopencv_photo2410.dll.a 33KB
libopencv_test_highgui_pch_dephelp.a 4KB
libopencv_perf_highgui_pch_dephelp.a 4KB
libopencv_perf_features2d_pch_dephelp.a 3KB
libopencv_test_features2d_pch_dephelp.a 3KB
libopencv_perf_objdetect_pch_dephelp.a 3KB
libopencv_perf_stitching_pch_dephelp.a 3KB
libopencv_test_stitching_pch_dephelp.a 3KB
libopencv_test_objdetect_pch_dephelp.a 3KB
libopencv_perf_superres_pch_dephelp.a 3KB
libopencv_test_superres_pch_dephelp.a 3KB
libopencv_test_calib3d_pch_dephelp.a 3KB
libopencv_perf_calib3d_pch_dephelp.a 3KB
libopencv_test_contrib_pch_dephelp.a 3KB
libopencv_perf_nonfree_pch_dephelp.a 3KB
libopencv_test_imgproc_pch_dephelp.a 3KB
libopencv_perf_imgproc_pch_dephelp.a 3KB
libopencv_test_nonfree_pch_dephelp.a 3KB
libopencv_test_legacy_pch_dephelp.a 3KB
libopencv_test_video_pch_dephelp.a 3KB
libopencv_test_flann_pch_dephelp.a 3KB
libopencv_perf_video_pch_dephelp.a 3KB
libopencv_perf_photo_pch_dephelp.a 3KB
libopencv_test_photo_pch_dephelp.a 3KB
libopencv_perf_core_pch_dephelp.a 3KB
libopencv_test_core_pch_dephelp.a 3KB
libopencv_perf_gpu_pch_dephelp.a 3KB
libopencv_test_ml_pch_dephelp.a 3KB
libopencv_ts_pch_dephelp.a 3KB
libopencv_test_gpu_pch_dephelp.a 2KB
libopencv_videostab_pch_dephelp.a 2KB
libopencv_legacy_pch_dephelp.a 2KB
libopencv_flann_pch_dephelp.a 2KB
libopencv_ml_pch_dephelp.a 2KB
libopencv_gpu_pch_dephelp.a 2KB
libopencv_highgui_pch_dephelp.a 2KB
libopencv_features2d_pch_dephelp.a 1KB
libopencv_objdetect_pch_dephelp.a 1KB
libopencv_superres_pch_dephelp.a 1KB
libopencv_stitching_pch_dephelp.a 1KB
libopencv_imgproc_pch_dephelp.a 1KB
libopencv_contrib_pch_dephelp.a 1KB
libopencv_calib3d_pch_dephelp.a 1KB
libopencv_nonfree_pch_dephelp.a 1KB
libopencv_photo_pch_dephelp.a 1KB
libopencv_core_pch_dephelp.a 1KB
libopencv_video_pch_dephelp.a 1KB
nsx_core.c 89KB
analog_agc.c 53KB
ns_core.c 48KB
fft4g.c 36KB
digital_agc.c 28KB
vad_core.c 26KB
resample_by_2_internal.c 20KB
resample.c 16KB
vad_filterbank.c 14KB
nsx_core_c.c 11KB
complex_fft.c 11KB
resample_by_2_mips.c 10KB
splitting_filter.c 8KB
resample_fractional.c 8KB
ring_buffer.c 7KB
resample_by_2.c 6KB
vad_sp.c 6KB
resample_48khz.c 6KB
spl_init.c 6KB
min_max_operations.c 6KB
spl_sqrt.c 5KB
vector_scaling_operations.c 5KB
complex_bit_reverse.c 4KB
real_fft.c 4KB
division_operations.c 4KB
webrtc_vad.c 3KB
vad_gmm.c 3KB
copy_set_operations.c 2KB
spl_sqrt_floor.c 2KB
nsx_core_neon_offsets.c 2KB
downsample_fast.c 2KB
noise_suppression.c 2KB
共 692 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
梦回阑珊
- 粉丝: 2439
- 资源: 619
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功