视频会议系统——多分屏
2*2屏幕:
3*3屏幕:
4*4屏幕:
布局可以按照自己个性岁意思设计,你可以设计成1*2,1*5或者其他你喜欢的样式.
系统页面开发用的是QT,这个多分屏主要数据类型有两个VideoFerame,MeetingPlaceWidget,这是我简化后,保留的两个主要数据类型,通过整两个类就可以实现如上面的效果,但是在实际运用中,涉及到多屏幕,多分屏,以及数据流等,肯定还需要封装以及定义其他类结构。
1、VideoFrame
图片中每一个小块是一个VideoFrame,这个VideoFrame继承自QFrame.,他的属性应该包含所在屏幕,所在屏幕位置,视频流实际高度,视频流实际宽度,视频流大小,没接收东西显示的图片等。
2、MeetingPlaceWidget
接着需要定义一个代表每一个屏幕的类,比如定义为MeetingPlaceWidget,这个各个画面的布局显示,也就是决定到底是以2*2,还是3*3等。
一些主要代码如下:
定义布局格式数据结构
enum ConfRoomDisplayModel
{CF_DM_UNKNOWN = -1, //未知布局CF_DM_1X1,CF_DM_2X2,CF_DM_3X3,CF_DM_L3X3, //采用3X3的布局,左上角为大屏CF_DM_ALL,CF_DM_L4X4, //采用4X4的布局,左上角为大屏CF_DM_L5X5, //采用5X5的布局,左上角为大屏CF_DM_L1_5, //采用3X3的布局,左上角为大屏CF_DM_L1_20, //在1_5的基础上将第一个屏幕之外的所有窗口改成4个CF_DM_1X1_REAL, //仍然采用的是1X1布局,但是根据视频流的实际大小显示视频窗口CF_DM_DOC, //文档阅读布局CF_DM_AUTO, //采用自动布局CF_DM_TOP_1_2, //在屏幕的上半部显示1X2的布局CF_DM_4X4, //采用4X4的布局,共16路CF_DM_AIRPLAY,CF_DM_3X1,
};
接下来实现各个布局,我们用一个类型为VideoFrame的链表保存各个块,然后进行布局。
2*2:
void MeetingPlaceWidget::size2And2()
{if (_displayModel == CF_DM_2X2) return;if (MeetingPlaceWidget::_displayModel != CF_DM_2X2){for (int i=0;i<memberFrames.size();i++){memberFrames[i]->hide();}int i;for (i=0;i<4;i++){int r = i/2;int c = i%2;mainLayout->addWidget(memberFrames[i],r,c);memberFrames[i]->show();}widget->setLayout(mainLayout);_ui->scrollArea->setWidget(widget);}_displayModel = CF_DM_2X2;
}
3*3:
void MeetingPlaceWidget::size3And3()
{if (_displayModel == CF_DM_3X3) return;for (int i=0;i<memberFrames.size();i++){memberFrames[i]->setHidden(true);}int i;for (i=0;i<9;i++){memberFrames[i]->setVisible(true);int r = i/3;int c = i%3;mainLayout->addWidget(memberFrames[i],r,c);}widget->setLayout(mainLayout);_ui->scrollArea->setWidget(widget);_displayModel = CF_DM_3X3;
}
4*4:
void QtMeetingPlaceWidget::sizeL4And4()
{if (_displayModel == CF_DM_L4X4) return;int i;for (i=0;i<8;i++){memberFrames[i]->setVisible(true);}for (i=8;i<memberFrames.size();i++){memberFrames[i]->setHidden(true);}mainLayout->addWidget(memberFrames[0],0,0,3,3);mainLayout->addWidget(memberFrames[1],0,3);mainLayout->addWidget(memberFrames[2],1,3);mainLayout->addWidget(memberFrames[3],2,3);mainLayout->addWidget(memberFrames[4],3,0);mainLayout->addWidget(memberFrames[5],3,1);mainLayout->addWidget(memberFrames[6],3,2);mainLayout->addWidget(memberFrames[7],3,3);widget->setLayout(mainLayout);_ui->scrollArea->setWidget(widget);_displayModel = CF_DM_L4X4;
}
视频会议系统——多分屏相关推荐
- 应用系统怎么开启审计功能_win10系统开启分屏功能的设置方法
使用深度win10纯净版系统的用户,都知道win10系统里面都内置有分屏功能,分屏可以一台电脑使用两个桌面,可以让多个网页或者任务同时在一个窗口下显示,这样能够使我们提高工作效率.你还能在同一屏幕下一 ...
- 计算机分屏解决方案,win10系统实现分屏功能的还原方案
有关win10系统实现分屏功能的操作方法想必大家有所耳闻.但是能够对win10系统实现分屏功能进行实际操作的人却不多.其实解决win10系统实现分屏功能的问题也不是难事,小编这里提示两点:1.首先我们 ...
- android 画中画 分屏 区别,小米MIUI系统手机分屏VS画中画功能,教你游戏聊天两不误...
原标题:小米MIUI系统手机分屏VS画中画功能,教你游戏聊天两不误 MIUI9上曾经为我们带来了分屏功能,这项功能的加入,使得可以在一个屏幕上同时干两件不同的事情,例如同时聊QQ和微信,或者聊天的同时 ...
- 怎么开分屏_ios14分屏功能怎么开 苹果ios14系统有分屏功能吗
ios14分屏功能怎么开 苹果ios14系统有分屏功能吗 iOS14已经正式发布了,但是很多小伙伴都不知道ios14分屏具体该怎么操作?这边小编给大家介绍下吧! ios14分屏操作教学一览: ios1 ...
- chrome android 分屏,谷歌调整安卓系统:分屏多任务同时支持两款以上APP
原标题:谷歌调整安卓系统:分屏多任务同时支持两款以上APP 本月初,三星展示了自家的折叠屏手机方案,虽然看起来机身有点厚,但是屏幕直接的折叠设计,还是相当酷炫的. 除了手机外形,三星还在跟谷歌一起,为 ...
- linux系统 设置分屏,Linux桌面的4种可以分屏的终端
终端分屏在很多情况下还是非常有用的.比如近来我在探索一个对话框工具 yad,就不得不多开几个终端窗口来测试,左边一个是yad命令的手册(man yad),右边一个是对 yad 进行的各种命令测试.如果 ...
- Linux系统终端分屏——实用小技巧
一.使用screen分屏(只能上下分屏,不能左右分屏) 1. 安装工具 sudo apt-get install screen 2. 上下分屏 ctr + a 再按 shift + s 3. 切换屏幕 ...
- chrome android 分屏,谷歌调整安卓系统:分屏多任务同时支持两款以上APP!
[PConline资讯]本月初,三星展示了自家的折叠屏手机方案,虽然看起来机身有点厚,但是屏幕直接的折叠设计,还是相当酷炫的. 除了手机外形,三星还在跟谷歌一起,为自家的折叠屏手机设计定制版的安卓系统 ...
- DOS系统里,分屏显示目录的命令是什么??
dir /s dir /p dir /w 我记得这三个都是我当年常用的命令,有分瓶的,有滚动时候每页停顿的,还有去掉详细信息的吧,, 可以放在一起使用.如dir /p/w /p是滚动时候中间停顿的, ...
最新文章
- oracle查询指定行数间的记录
- 【Python实现数据可视化】创建3D柱状图
- 计算机操作系统——处理机调度算法
- Python使用ffmpeg下载m3u8拼接为视频
- json数据转换异常:net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
- 简单的聊天应用程序(多客户端聊天服务器) from multithread
- 理解 Android 本地数据存储 API
- 数据仓库模型(星型模型和雪花模型 )
- c语言线性表-顺序表(完整版)
- 台式计算机如何连接vif,电脑各种接口规范
- vue使用高德地图获取当前经纬度
- 阿辉DirectX 11学习笔记二
- python多变量相关性分析_两个变量与因变量相关性分析_spss多变量相关性分析
- 对于提高团队开会效率的看法
- 云服务器被恶意ddos攻击了怎么办?
- JS实现双人五子棋简易游戏(上)
- YYC采集工具python语言精简方便实用的视频采集工具
- Excel2007无法卸载:安装程序包的语言不受系统支持。微软的卸载程序也不行。——只能手工删除
- Gameplay - 设计使命召唤类型的关卡
- 配备Apple T2 安全芯片的 Mac 机型及T2芯片mac电脑U盘装系统教程
热门文章
- 第12期 《顿开金锁走蛟龙》2月刊
- POJ 4110:圣诞老人的礼物-Santa Clau’s Gifts
- (超详细)JAVA SE开发工具包(JDK)在Windows系统中的下载、安装和配置的方法
- UIColor RGB颜色对照表
- Python抓取糗事百科成人版图片
- 我的Android前生今世之缘-学习经验-安卓教程(六)
- Nginx下本机多项目虚拟主机配置[一个端口多个站点]
- Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作
- spritekit 动画_iOS SpriteKit 游戏
- 猛犸创始人季逸超:互联网新人类