#一、前言
视频轮询是视频监控系统中一个基本的核心功能,尤其是被放在大屏幕上之后,这个功能是必要的。根据预设的轮询间隔,将视频逐个加载到预设的频道图片号中。用于轮询的轮询间隔、轮询图片号和码流类型(主码流和子码流)可以在系统设置中统一设置。摄像机表中的所有摄像机都用作轮询的视频源。图片数量不足时,其余部分可以留空显示。
在轮询过程中,有两种处理方式,一种是立即加载所有当前轮询的视频,另一种是队列加载,如果电脑配置不高,建议队列加载,避免瞬间CPU爆炸。如果电脑配置差,同时瞬间加载16个视频,此时CPU会爆炸一次,此时分配内存。但是如果采用排队的方法,比如每隔0.3秒加载下一个,就可以避免这个问题,而且压力大。
#二。系统介绍
监控系统由摄像、传输、控制、显示和记录注册五部分组成。摄像机通过同轴视频电缆将视频图像传输给控制主机,控制主机将视频信号分配给各个监视器和视频记录设备,同时将待传输的语音信号同步记录到录像机中。
通过控制主机,操作人员可以给出指令,控制云台和变焦镜头的上下左右移动,并通过控制主机在多通道摄像头和云台之间切换。借助特殊的视频处理模式,可以对图像进行录制、回放和处理,以达到最佳的视频录制效果。
视频监控系统由实时控制系统、监控系统和管理信息系统组成。实时控制系统完成实时数据采集、处理、存储和反馈功能;监控系统可全天候监控所有监控点,并可在多操作控制点上切换多通道图像。管理信息系统是整个系统的控制核心,可以采集、接收、传输、处理和处理各种需要的信息。视频监控系统是安防系统的组成部分,是一个综合系统,具有很强的防范能力。视频监控以其直观、方便、信息丰富等特点,在很多场合得到了广泛的应用。
#三。功能特征
1.支持16屏切换、全屏切换等。包括1 4 6 8 9 13 16屏幕切换。
2.支持alt进入全屏,esc退出全屏。
3.自定义消息框、错误框、查询框右下角的提示框。
4.17套皮肤风格可随意更改,所有风格统一,包括菜单等。
5.移动云台仪表盘的鼠标高亮,准确识别八个方向。
6.移动底部图片工具栏(设置如屏幕分割、截图声音等。)来突出。
7.您可以更改配置文件左上角徽标的中文软件名称和英文软件名称。
8.封装百度地图、3D切换、设备定位、鼠标按键获取经纬度等。
9.堆栈表单,每个表单都是一个独立的qwidget,方便自己编写代码。
10.顶部的鼠标右键菜单可以动态控制CPU左上角面板、左下角面板、右上角面板、右下角面板的显示和隐藏,支持恢复默认布局。
10.工具栏可以放置多个小图标和关闭图标。
12\.左右两侧可拖动拉伸,宽度和高度位置可自动记忆,重启后恢复。
13\.双击摄像机节点自动播放视频,依次双击节点自动添加视频,自动跳转到下一个,双击父节点自动添加节点下所有视频。
14.将相机节点拖动到对应的窗体播放视频,支持拖动本地文件直接播放。
15.视频帧支持拖动交换和即时响应。
16\.双击节点拖动节点拖动表单交换位置,url.txt会自动更新。
17\.支持从url.txt加载16路视频播放,自动记忆最后一路对应的视频,软后自动开启播放
19.集成百度地图,可以添加设备对应位置,自动生成地图,支持缩放和3D地图,提供地图样式选择,共12种样式。
20.将视频拖到频道表单之外,以自动删除视频。
20.鼠标右键可以删除当前所有视频,并截图当前所有视频。
20.录像机管理,摄像头管理,可以添加、删除、修改、导入、导出和打印信息,并立即应用新设备信息生成树形列表,无需重启。
23.您可以自由打开是否在pro文件中加载地图。
24.视频播放有四种可选内核自由切换,可以在pro中设置vlc ffmpeg easyplayer海康sdk。
20.您可以设置1 4 9 16屏幕轮询、轮询间隔和轮询流类型等。只需点击主界面底部工具栏右侧的开始轮询按钮,然后再次点击停止轮询即可。
26.默认情况下,如果鼠标指针超过10秒未被操作,它将被自动隐藏。
27.高度可定制,用户可以在此基础上轻松导出自己的函数来支持linux系统。
#四。翻译
# 5.核心代码
void frmvideopanel : poll(){ if(actio
nPoll->text() == "启动轮询视频") { actionPoll->setText("停止轮询视频"); } else { actionPoll->setText("启动轮询视频"); } //优先把图标切换,使得看起来反应很快 IconFont::Instance()->setIcon(ui->btnPoll, App::Polling ? 0xea14 : 0xea13, iconSize); //启动和停止轮询 if (!App::Polling) { //根据轮询画面数计算每次的url地址 pollUrls.clear(); for (int i = 0; i < DBData::IpcInfo_Count; i = i + App::PollType) { QStringList list; for (int j = i; j < i + App::PollType; j++) { if (j < DBData::IpcInfo_Count) { list << (App::PollRtsp == 0 ? DBData::IpcInfo_RtspAddrMain.at(j) : DBData::IpcInfo_RtspAddrSub.at(j)); } } pollUrls << list.join("|"); } //删除所有视频,切换到对应的轮询通道画面数 delete_video_all(); if (App::PollType == 1) { ui->btnVideo1->click(); } else if (App::PollType == 4) { ui->btnVideo4->click(); } else if (App::PollType == 9) { ui->btnVideo9->click(); } else if (App::PollType == 16) { ui->btnVideo16->click(); } QUIHelper::sleep(500); //立马启动轮询,并执行一次 timerPoll->start(App::PollInterval * 1000); pollIndex = 0; polling(); } else { timerPoll->stop(); } App::Polling = !App::Polling; App::writeConfig(); DeviceHelper::addMsg(App::Polling ? "所有通道 启动轮询" : "所有通道 停止轮询");}void frmVideoPanel::polling(){ //如果摄像头列表数量为空则停止定时器 if (DBData::IpcInfo_Count == 0) { timerPoll->stop(); return; } if (pollIndex == pollUrls.count()) { pollIndex = 0; } QStringList list = pollUrls.at(pollIndex).split("|"); pollIndex++; //方式1为立即加载,方式2为排队加载,建议方式2#if 0 for (int i = 0; i < list.count(); i++) { widgets.at(i)->close(); widgets.at(i)->setUrl(list.at(i)); widgets.at(i)->open(); }#else QStringList urls; for (int i = 0; i < App::VideoCount; i++) { if (i < list.count()) { urls << list.at(i); } else { urls << ""; } }#ifdef videovlc VideoVlc::Instance()->setUrls(urls); VideoVlc::Instance()->start();#elif videoffmpeg VideoFFmpeg::Instance()->setUrls(urls); VideoFFmpeg::Instance()->start();#elif easyplayer VideoEasyPlayer::Instance()->setUrls(urls); VideoEasyPlayer::Instance()->start();#elif haikang VideoHaiKang::Instance()->setUrls(urls); VideoHaiKang::Instance()->start();#endif#endif}