阿里云 iis 多个网站,wordpress 手机 看视频,网站类型是什么意思,快速网站建设一、前言
通过音柱控件实时展示当前播放的声音产生的振幅的大小#xff0c;得益于音频播放组件内置了音频振幅的计算#xff0c;可以动态开启和关闭#xff0c;开启后会对发送过来的要播放的声音数据#xff0c;进行运算得到当前这个音频数据的振幅#xff0c;类似于分贝…一、前言
通过音柱控件实时展示当前播放的声音产生的振幅的大小得益于音频播放组件内置了音频振幅的计算可以动态开启和关闭开启后会对发送过来的要播放的声音数据进行运算得到当前这个音频数据的振幅类似于分贝分贝越大听到的声音越大振幅越大。在如何摆放音柱控件这个问题上考虑过多种方案比如一开始做的是固定放在视频控件的右侧也就是在一个垂直布局中先放一个视频控件然后放左通道音柱最后放一个右通道音柱三个控件之间设置好间距。后面用户又提出来直接音柱控件悬浮在视频控件上方这样可以节约位置以便视频控件争取最大的地方展示所以近期又专门重新搞了下音柱可以放置在左侧、右侧、顶部、底部、两侧、悬浮等位置然后还可以设置音柱的尺寸如果是垂直摆放对应尺寸就是宽度如果是上下摆放对应尺寸就是高度还有个难点就是纯音频的通道音量条需要摆放在中间位置比如音量条左右两侧是一个弹簧音量条尺寸取宽度的四分之一这样看起来就非常美观了。
由于视频控件还有悬浮条所以这个音柱的摆放位置还需要留出足够的位置给悬浮条展示然而呢悬浮条又有多种位置比如也可以设置在底部所以需要根据悬浮条的位置再留出对应的间隙。在Qt的便利性要设计这样一个带视频带悬浮带音柱而且还支持非常灵活的各种参数设置还是非常方便的比如就新建个frmVideoWidgetVolume带音柱的视频窗体悬浮条也是一个独立的widget根据尺寸变化对应移来移去。音柱控件这边通过表格布局来插入对应的控件。比如需要两侧显示音柱则先插入左声道音柱然后插入视频控件最后插入右声道音柱控件。难点就在纯音频的音道控件他需要根据尺寸占比自动拉伸而且一个窗体需要根据打开的地址来区分当前是否是纯音频所以需要在解码完成和结束的时候去做判断处理打完收工。
二、效果图 三、体验地址
国内站点https://gitee.com/feiyangqingyun国际站点https://github.com/feiyangqingyun个人作品https://blog.csdn.net/feiyangqingyun/article/details/97565652体验地址https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码01jf 文件名bin_video_system。
四、相关代码
#include frmvideowidgetvolume.h
#include ui_frmvideowidgetvolume.h
#include qthelper.h
#include videowidgetx.h
#include barvolume.hfrmVideoWidgetVolume::frmVideoWidgetVolume(int position, VideoWidget *videoWidget, QWidget *parent) : QWidget(parent), ui(new Ui::frmVideoWidgetVolume)
{ui-setupUi(this);this-position position;this-videoWidget videoWidget;bgText videoWidget-getBgText();isVertical true;if (position 2 || position 4) {isVertical false;}//实例化音柱控件并设置方向leftVolume new BarVolume;rightVolume new BarVolume;leftVolume-setVertical(isVertical);rightVolume-setVertical(isVertical);//实例化布局并设置边距间距QGridLayout *layout new QGridLayout(this);layout-setContentsMargins(0, 0, 0, 0);layout-setSpacing(3);//将音柱控件和视频控件插入到对应位置/可以自行拓展各种布局if (position 1) {layout-addWidget(leftVolume, 0, 0);layout-addWidget(rightVolume, 0, 1);layout-addWidget(videoWidget, 0, 2);} else if (position 2) {layout-addWidget(leftVolume, 0, 0);layout-addWidget(rightVolume, 1, 0);layout-addWidget(videoWidget, 2, 0);} else if (position 3) {layout-addWidget(videoWidget, 0, 0);layout-addWidget(leftVolume, 0, 1);layout-addWidget(rightVolume, 0, 2);} else if (position 4) {layout-addWidget(videoWidget, 0, 0);layout-addWidget(leftVolume, 1, 0);layout-addWidget(rightVolume, 2, 0);} else if (position 5) {layout-addWidget(leftVolume, 0, 0);layout-addWidget(videoWidget, 0, 1);layout-addWidget(rightVolume, 0, 2);} else if (position 6) {//实例化弹簧控件spaceLeft new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred);spaceCenter new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred);spaceRight new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Preferred);//实例化布局并插入控件hlayout new QHBoxLayout;hlayout-addWidget(leftVolume);hlayout-addItem(spaceCenter);hlayout-addWidget(rightVolume);videoWidget-setLayout(hlayout);layout-addWidget(videoWidget);}//关联音频振幅信号connect(videoWidget, SIGNAL(sig_receiveLevel(qreal, qreal)), this, SLOT(receiveLevel(qreal, qreal)));//打开和关闭后需要清空下(有可能残留上一次的数据)connect(videoWidget, SIGNAL(sig_receivePlayStart(int)), this, SLOT(reset()));connect(videoWidget, SIGNAL(sig_receivePlayFinsh()), this, SLOT(reset()));//音柱窗体参数变化后需要重置connect(AppEvent::Instance(), SIGNAL(changeVolumeWidget()), this, SLOT(reset()));
}frmVideoWidgetVolume::~frmVideoWidgetVolume()
{delete ui;
}void frmVideoWidgetVolume::resizeEvent(QResizeEvent *)
{int width this-width();int height this-height();//根据宽度动态设置音量条宽度或者高度/也可以设置成固定值int size (isVertical ? width : height);if (AppConfig::VolumeSize 0) {size size * 0.05;size (size 20 ? 20 : size);} else {size AppConfig::VolumeSize;}if (isVertical) {leftVolume-setMaximumWidth(size);rightVolume-setMaximumWidth(size);} else {leftVolume-setMaximumHeight(size);rightVolume-setMaximumHeight(size);}//根据高度动态设置音量格子数量(一般高度越小格子数越少)int step height / (position 6 ? 10 : 6);leftVolume-setStep(step);rightVolume-setStep(step);//根据音柱位置摆放控件if (position 6) {if (videoWidget-getIsRunning() videoWidget-getVideoThread()-getIsOk()) {leftVolume-show();rightVolume-show();//根据悬浮条的位置留出空余的地方int offset 35;if (AppConfig::BannerPosition 1) {hlayout-setContentsMargins(9, 9, 9, offset);} else if (AppConfig::BannerPosition 2) {hlayout-setContentsMargins(offset, 9, 9, 9);} else if (AppConfig::BannerPosition 3) {hlayout-setContentsMargins(9, 9, offset, 9);} else {hlayout-setContentsMargins(9, offset, 9, 9);}//先把布局中的挨个移除hlayout-removeItem(spaceLeft);hlayout-removeItem(spaceCenter);hlayout-removeItem(spaceRight);hlayout-removeWidget(leftVolume);hlayout-removeWidget(rightVolume);//纯音频需要占用比较大的面积if (videoWidget-getOnlyAudio()) {videoWidget-setBgText();size width / 4;leftVolume-setMaximumWidth(size);rightVolume-setMaximumWidth(size);leftVolume-setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);rightVolume-setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);hlayout-addItem(spaceLeft);hlayout-addWidget(leftVolume);hlayout-addWidget(rightVolume);hlayout-addItem(spaceRight);} else {leftVolume-setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored);rightVolume-setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored);hlayout-addWidget(leftVolume);hlayout-addItem(spaceCenter);hlayout-addWidget(rightVolume);}} else {leftVolume-hide();rightVolume-hide();videoWidget-setBgText(bgText);}}
}void frmVideoWidgetVolume::reset()
{leftVolume-clear();rightVolume-clear();this-resizeEvent(NULL);
}void frmVideoWidgetVolume::receiveLevel(qreal leftLevel, qreal rightLevel)
{leftVolume-setValue(leftLevel);rightVolume-setValue(rightLevel);
}五、功能特点
5.1 软件模块
视频监控模块各种停靠小窗体子模块包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。视频回放模块包括本地回放、远程回放、设备播放、图片回放、视频上传等。电子地图模块包括图片地图、在线地图、离线地图、路径规划等。日志查询模块包括本地日志、设备日志等。系统设置模块包括系统设置基本设置、视频参数、数据库设置、地图配置、串口配置等、录像机管理、摄像机管理、轮询配置、录像计划、用户管理等。
5.2 基础功能
支持各种视频流rtsp、rtmp、http等、视频文件mp4、rmvb、avi等、本地USB摄像机播放。支持多画面切换包括1、4、6、8、9、13、16、25、36、64画面切换。支持全屏切换多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键altenter全屏esc退出全屏。支持视频轮询包括1、4、9、16画面轮询可设置轮询分组轮询预案、轮询间隔、码流类型等。支持onvif协议包括设备搜索、云台控制、预置位、设备控制图片参数、校对时间、系统重启抓拍图片等。支持权限管理不同的用户可以对应不同的模块权限比如删除日志、关闭系统等。数据库支持多种包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。本地USB摄像机支持设置分辨率、帧率等参数。所有停靠模块都自动生成对应的菜单用来控制显示和隐藏在标题栏右键可以弹出。支持显示所有模块、隐藏所有模块、复位普通布局、复位全屏布局。双击设备弹出实时预览视频支持图片地图、在线地图、离线地图等。摄像机节点拖曳到对应窗体播放视频同时支持拖曳本地文件直接播放。删除视频支持鼠标右键删除、悬浮条关闭删除、拖曳到视频监控面板外删除等多种方式。图片地图上设备按钮可自由拖动自动保存位置信息。百度地图上可以鼠标单击获取经纬度信息用来更新设备位置。视频监控面板窗体中任意通道支持拖曳交换瞬间响应。封装了百度地图视图切换运动轨迹设备点位鼠标按下获取经纬度等。双击节点、拖曳节点、拖曳窗体交换位置等操作均自动更新保存最后的播放地址下次软件打开自动应用。右下角音量条控件失去焦点自动隐藏音量条带静音图标。支持视频截图可指定单个或者对所有通道截图底部小工具栏也有截图按钮。支持超时自动隐藏鼠标指针、自动全屏机制。支持onvif云台控制可上下左右移动云台摄像机包括复位和焦距调整等。支持onvif预置位可以添加、删除、修改预置位可以调用起始位。支持onvif图像参数设置包括明亮度、对比度、饱和度、尖锐度等。支持onvif其他操作包括抓图、网络设置、校时、重启、事件订阅等。支持任意onvif摄像机包括但不限于海康、大华、宇视、天地伟业、华为等。可保存视频可选定时存储或者单文件存储可选存储间隔时间。可设置视频流通信方式tcpudp可设置视频解码是速度优先、质量优先、均衡等。可设置软件中文名称、英文名称、LOGO图标等。存储的视频文件支持导出到指定目录支持批量上传到服务器。完善的录像计划设置支持每个通道7 * 24小时每半小时设置是否存储录像。
5.3 特色功能
主界面采用停靠窗体模式各种组件以小模块的形式加入可自定义任意模块加入。停靠模块可拖动任意位置嵌入和悬浮支持最大化全屏支持多屏幕。双重布局文件存储机制正常模式、全屏模式都对应不同的布局方案自动切换和保存比如全屏模式可以突出几个模块透明显示在指定位置更具科幻感现代化。原创onvif协议机制采用底层协议解析udp广播搜索http请求执行命令更轻量易懂易学习拓展不依赖任何第三方组件比如gsoap。原创数据导入、导出、打印机制跨平台不依赖任何组件瞬间导出数据。内置多个原创组件宇宙超值超级牛逼包括数据导入导出组件导出到xls、pdf、打印、数据库组件数据库管理线程、自动清理数据线程、万能分页、数据请求等、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。自定义信息框错误框询问框右下角提示框包含多种格式等。精美换肤高达17套皮肤样式随意更换所有样式全部统一包括菜单等。视频控件悬浮条可以自行增加多个按钮监控界面底部小工具栏也可自行增加按钮。双击摄像机节点自动播放视频双击节点自动依次添加视频会自动跳到下一个双击父节点自动添加该节点下的所有视频。可选主码流、子码流。录像机管理、摄像机管理可添加删除修改导入导出打印信息立即应用新的设备信息生成树状列表不需重启。可选多种内核自由切换ffmpeg、vlc、mpv等均可在pro中设置。推荐用ffmpeg跨平台最多默认提供好了linux和mac平台上编译好的库。支持硬解码可设置硬解码类型qsv、dxva2、d3d11va等。默认采用opengl绘制视频超低的CPU资源占用支持yuyv和nv12两种格式绘制性能爆表。标签和图形信息支持三种绘制方式绘制到遮罩层、绘制到图片、源头绘制对应信息可以存储到文件。高度可定制化用户可以很方便的在此基础上衍生自己的功能比如增加自定义模块增加运行模式、机器人监控、无人机监控、挖掘机监控等。支持xp、win7、win10、win11、linux、mac、各种国产系统UOS、中标麒麟、银河麒麟等、嵌入式linux等系统。注释完整项目结构清晰超级详细完整的使用开发手册精确到每个代码文件的功能说明不断持续迭代版本。