(资料图片仅供参考)
视频监控模块采用ffmpeg作为解码内核,可以在系统设置中填入一个视频地址,同时支持本地视频文件、USB摄像机、远程onvif摄像机(海康大华等)、网络视频地址,大屏系统中默认有一个视频监控,如果需要显示多个则new多个视频监控模块即可,在本系统中每个最小单元的小模块都是一个类,需要多少个就可以new多少个出来显示,二级模块作为一个悬停窗体嵌入主界面mainwindow,都可以拖动到任意位置自动嵌入。
视频监控模块有多个参数设置,以便用户设置,最开始做的是内置的写死在代码中,后面随着用户场景的变化,留出参数用户设置更灵活,参数如下:
视频拉伸:有些客户需要拉伸填充有些需要等比例缩放; 视频回调:有些板子或者电脑没有opengl或者版本过低需要开启视频回调才能正常绘制图像; 播放音频:开启后会播放视频和视频流中的声音; 视频循环:开启后播放视频完成后会立即重复播放; 超时时间:打开视频的超时时间,有些网络地址需要设置久一点; 通信方式:视频流采用TCP还是UDP协议播放;视频监控内核功能特点:
多线程实时播放视频流+本地视频+USB摄像头等。 支持windows+linux+mac,支持ffmpeg3和ffmpeg4,支持32位和64位。 多线程显示图像,不卡主界面。 自动重连网络摄像头。 可设置边框大小即偏移量和边框颜色。 可设置是否绘制OSD标签即标签文本或图片和标签位置。 可设置两种OSD位置和风格。 可设置是否保存到文件以及文件名。 可直接拖曳文件到ffmpegwidget控件播放。 支持h265视频流+rtmp等常见视频流。 可暂停播放和继续播放。 支持存储单个视频文件和定时存储视频文件。 自定义顶部悬浮条,发送单击信号通知,可设置是否启用。 可设置画面拉伸填充或者等比例填充。 可设置解码是速度优先、质量优先、均衡处理。 可对视频进行截图(原始图片)和截屏。 录像文件存储支持裸流和MP4文件。 音视频完美同步,采用外部时钟同步策略。 支持seek定位播放位置。 支持在线网络音视频文件比如http开头mp4、mp3结尾的。 可选句柄模式(GPU绘制)、回调模式(QPainter绘制)。 GPU绘制模式同时支持拉伸和等比例绘制。 支持qsv、dxva2、d3d11va等硬解码。 硬解码和GPU组合,超低CPU占用,支持64路视频。 支持安卓和嵌入式linux,交叉编译即可。#include \"frmmodulevideo.h\"#include \"ui_frmmodulevideo.h\"#include \"quihelper.h\"frmModuleVideo::frmModuleVideo(QWidget *parent) : QWidget(parent), ui(new Ui::frmModuleVideo){ ui->setupUi(this); this->initForm();}frmModuleVideo::~frmModuleVideo(){ delete ui;}void frmModuleVideo::showEvent(QShowEvent *){#ifdef videoffmpeg //延时处理不然布局加载后会先显示再隐藏瞬间反复来两次导致隐藏的时候无法暂停 QTimer::singleShot(200, this, SLOT(open())); if (!isLoad) { isLoad = true; } else { videoWidget->next(); }#endif}void frmModuleVideo::hideEvent(QHideEvent *){#ifdef videoffmpeg //界面不可见的时候暂停以节省资源 videoWidget->pause();#endif}void frmModuleVideo::initForm(){ isLoad = false; url = AppConfig::VideoUrl;#ifdef videoffmpeg videoWidget = new FFmpegWidget; videoWidget->setBorderWidth(0); videoWidget->setBgText(\"\"); //设置拉伸填充图像 videoWidget->setFillImage(AppConfig::VideoFillImage); //设置是否回调,有些嵌入式环境只能用回调 videoWidget->setCallback(AppConfig::VideoCallback); //设置是否播放声音 videoWidget->setPlayAudio(AppConfig::VideoPlayAudio); //设置是否重复播放 videoWidget->setPlayRepeat(AppConfig::VideoPlayRepeat); //设置打开超时时间,一些推流要把时间设置大一些 videoWidget->setCheckTime(AppConfig::VideoCheckTime * 1000); //设置视频流通信协议 videoWidget->setTransport(AppConfig::VideoTransport); //把视频控件加到布局中 ui->widgetMain->layout()->addWidget(videoWidget);#endif}void frmModuleVideo::setUrl(const QString &url){ this->url = url;}void frmModuleVideo::open(){#ifdef videoffmpeg if (isVisible() && !videoWidget->getIsPlaying()) { videoWidget->setUrl(url); videoWidget->open(); }#endif}
【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】
点击这里:
X 关闭
Copyright © 2015-2022 华中养生网版权所有 备案号:京ICP备12018864号-26 联系邮箱:2 913 236 @qq.com