diff --git a/docs/video_system/index.html b/docs/video_system/index.html index b3cffb7..9309574 100644 --- a/docs/video_system/index.html +++ b/docs/video_system/index.html @@ -672,157 +672,11 @@ header, .context-menu, .megamenu-content, footer{ } - -mjx-container[jax="SVG"] { - direction: ltr; -} - -mjx-container[jax="SVG"] > svg { - overflow: visible; - min-height: 1px; - min-width: 1px; -} - -mjx-container[jax="SVG"] > svg a { - fill: blue; - stroke: blue; -} - -mjx-assistive-mml { - position: absolute !important; - top: 0px; - left: 0px; - clip: rect(1px, 1px, 1px, 1px); - padding: 1px 0px 0px 0px !important; - border: 0px !important; - display: block !important; - width: auto !important; - overflow: hidden !important; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -mjx-assistive-mml[display="block"] { - width: 100% !important; -} - -mjx-container[jax="SVG"][display="true"] { - display: block; - text-align: center; - margin: 1em 0; -} - -mjx-container[jax="SVG"][display="true"][width="full"] { - display: flex; -} - -mjx-container[jax="SVG"][justify="left"] { - text-align: left; -} - -mjx-container[jax="SVG"][justify="right"] { - text-align: right; -} - -g[data-mml-node="merror"] > g { - fill: red; - stroke: red; -} - -g[data-mml-node="merror"] > rect[data-background] { - fill: yellow; - stroke: none; -} - -g[data-mml-node="mtable"] > line[data-line], svg[data-table] > g > line[data-line] { - stroke-width: 70px; - fill: none; -} - -g[data-mml-node="mtable"] > rect[data-frame], svg[data-table] > g > rect[data-frame] { - stroke-width: 70px; - fill: none; -} - -g[data-mml-node="mtable"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed { - stroke-dasharray: 140; -} - -g[data-mml-node="mtable"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted { - stroke-linecap: round; - stroke-dasharray: 0,140; -} - -g[data-mml-node="mtable"] > g > svg { - overflow: visible; -} - -[jax="SVG"] mjx-tool { - display: inline-block; - position: relative; - width: 0; - height: 0; -} - -[jax="SVG"] mjx-tool > mjx-tip { - position: absolute; - top: 0; - left: 0; -} - -mjx-tool > mjx-tip { - display: inline-block; - padding: .2em; - border: 1px solid #888; - font-size: 70%; - background-color: #F8F8F8; - color: black; - box-shadow: 2px 2px 5px #AAAAAA; -} - -g[data-mml-node="maction"][data-toggle] { - cursor: pointer; -} - -mjx-status { - display: block; - position: fixed; - left: 1em; - bottom: 1em; - min-width: 25%; - padding: .2em .4em; - border: 1px solid #888; - font-size: 90%; - background-color: #F8F8F8; - color: black; -} - -foreignObject[data-mjx-xml] { - font-family: initial; - line-height: normal; - overflow: visible; -} - -mjx-container[jax="SVG"] path[data-c], mjx-container[jax="SVG"] use[data-c] { - stroke-width: 3; -} - -g[data-mml-node="xypic"] path { - stroke-width: inherit; -} - -.MathJax g[data-mml-node="xypic"] path { - stroke-width: inherit; -} :root {--mermaid-font-zoom:1.23958em ;}
使用说明
写法举例
V20210705
V20210603
V20210425
V20210403
V20210322
V20210305
V20201212
V20201108
20200828
V20200730
V20200620
V20191105
系统默认开启了自动登录,可以在系统设置中将自动登录按钮关闭即可,可以在用户登录界面勾选记住密码和自动登录复选框,如果勾选了记住密码,则下次弹出的登录窗体会自动把最后一次的密码填进去,如果勾选了自动登录,则直接以上一次的用户登录到系统。
如果开启了自动登录机制,在单击右上角的关闭按钮,会弹出用户退出窗体,需要输入密码才能退出,也可以在代码中屏蔽掉自动登录的判断,这样任何时候关闭系统都会弹出窗体要求输入密码来退出。用户登录和退出内置了超级密码 a ,在记不住密码或者密码丢失的时候使用。
@@ -840,8 +694,8 @@ g[data-mml-node="xypic"] path { 本系统云台控制走的是onvif协议,没有使用私有协议,上百家厂家的摄像机,走私有协议会玩死人的,所以统一采用onvif通用协议,需要提前在系统设置中的摄像机管理,搜索摄像机,输入正确的onvif用户信息后一键获取到云台地址。
设备控制部分,目前可以获取和设置图片参数、手动校时、重启设备等,上面那一堆复选框对应功能需要用厂家sdk去实现,后期可能会增加一些onvif能够处理的功能。和云台控制操作一样,操作前也是需要选中某个通道,然后才是对选中的通道进行设备控制,比如图片参数中的明亮度、对比度、饱和度。
本系统默认支持海康摄像机的报警事件订阅,默认已经订阅,如果摄像机已经开启了报警事件的话,默认一般是关闭的,比如摄像机后面的开关量输入报警接口,需要web页面进去设置开启。报警订阅走的是onvif协议,默认测试过海康的摄像机,其余摄像机有些没有测试成功,后期会详细查下原因并改进,会持续更新完善。
本系统中将视频显示这块都封装成了一个控件,每个视频控件都有自己独立的悬浮条,悬浮条的位置可以自行修改两三行代码调整,默认悬浮条在顶部,自动拉伸填充显示,你也可以改成左侧右侧等位置显示,高度可调。悬浮条是一排按钮组成,具体按钮什么名称标识符和功能,可以自定义,控件的封装只是默认放了一排按钮,除了关闭按钮实现了功能外,其余都是信号的形式发出去的,具体操作由程序员本身根据不同的厂家来定义不同的功能。
- 视频控件已经将OSD标签封装好了,默认提供两路OSD设置,每个OSD都可以设置是否启用、位置、文字内容、文字颜色、图片、文字大小等,这些设置都提供了友好的接口设置。
在frmvideopanel.cpp文件中有设置示例,默认注释的,参数含义如下:
xxxxxxxxxx
enum OSDFormat {
OSDFormat_Text = 0, //文本
OSDFormat_Date = 1, //日期
OSDFormat_Time = 2, //时间
OSDFormat_DateTime = 3, //日期时间
OSDFormat_Image = 4 //图片
};
-
enum OSDPosition {
OSDPosition_Left_Top = 0, //左上角
OSDPosition_Left_Bottom = 1, //左下角
OSDPosition_Right_Top = 2, //右上角
OSDPosition_Right_Bottom = 3 //右下角
};
视频回放中有多个子模块,分别是不同的含义:
+ 视频控件已经将OSD标签封装好了,默认提供两路OSD设置,每个OSD都可以设置是否启用、位置、文字内容、文字颜色、图片、文字大小等,这些设置都提供了友好的接口设置。
在frmvideopanel.cpp文件中有设置示例,默认注释的,参数含义如下:
x1enum OSDFormat {
2 OSDFormat_Text = 0, //文本
3 OSDFormat_Date = 1, //日期
4 OSDFormat_Time = 2, //时间
5 OSDFormat_DateTime = 3, //日期时间
6 OSDFormat_Image = 4 //图片
7};
8
+
9enum OSDPosition {
10 OSDPosition_Left_Top = 0, //左上角
11 OSDPosition_Left_Bottom = 1, //左下角
12 OSDPosition_Right_Top = 2, //右上角
13 OSDPosition_Right_Bottom = 3 //右下角
14};
视频回放中有多个子模块,分别是不同的含义:
本地回放模块主要用来回放存储在本地电脑上的视频,先从右侧选择要回放的通道,默认是所有通道,然后选择类型:存储视频还是报警视频,默认选择存储视频(目前也只有存储的视频,没有报警视频,报警视频的规则还没定好,一般都是买过去自己定义),然后选择要查询的开始时间和结束时间,单击查询按钮,会自动列出来,双击对应的视频文件名称就会播放,除了查询按钮,其余按钮均没有实现具体功能。
视频下载是将查询出来的视频文件,按照勾选了的文件保存到选择的目录中。
远程回放模块是用来通过sdk的形式回放远程NVR设备上的录像文件,这个暂未实现,本系统主要是为了兼容性和通用性,通过具体sdk形式调用的处理都没有做,破坏了移植性,到了其他平台就没法使用了,本系统sdk使用这块默认用的海康sdk作为示例。
设备播放模块主要是通过rtsp视频流的形式来拉取实时视频和回放视频,现在越来越多的NVR支持直接通过取流的形式来拉取实时视频流和回放视频,这样使用起来很方便,当然在拉取视频流的时候要传入用户信息,防止非法获取,现在越来越多的应用场景需要通过NVR来调取回放视频,传统的SDK的方式非常累厂家太多,而国标的形式太繁琐复杂,于是rtsp形式的最简单的方式应运而生,目前支持的厂家也越来越多,每个厂家格式的规则不一样,可以自行咨询厂家的规则,本程序默认实现了海康、大华和深广的规则。
选择设备通道和时间范围,单击查询按钮,会将查询到的图片序列按照日期的形式作为一行添加到列表结果中,双击可以自动播放,可以调节播放速度。
将勾选的图片序列文件,导出到选择的目录。
图文混排,可以自定义信息,封装好的类,传入图片队列,图片自适应等比例缩放显示,超过自动分页。
@@ -857,7 +711,7 @@ g[data-mml-node="xypic"] path { 基本设置中有部分参数的切换会自动重启应用。 参数说明
参数说明
-参数说明
xxxxxxxxxx
//数据库类型枚举
enum DbType {
DbType_ODBC = 0, //odbc数据源
DbType_Sqlite = 1, //sqlite数据库
DbType_MySql = 2, //mysql数据库
DbType_PostgreSQL = 3, //postgresql数据库
DbType_SqlServer = 4, //sqlserver数据库
DbType_Oracle = 5, //oracle数据库
DbType_KingBase = 6, //人大金仓数据库
DbType_Other = 255 //其他数据库
};
+参数说明
xxxxxxxxxx
111//数据库类型枚举
2enum DbType {
3 DbType_ODBC = 0, //odbc数据源
4 DbType_Sqlite = 1, //sqlite数据库
5 DbType_MySql = 2, //mysql数据库
6 DbType_PostgreSQL = 3, //postgresql数据库
7 DbType_SqlServer = 4, //sqlserver数据库
8 DbType_Oracle = 5, //oracle数据库
9 DbType_KingBase = 6, //人大金仓数据库
10 DbType_Other = 255 //其他数据库
11};
参数说明
参数说明 勾选则表示启用,可以对各种分屏进行功能激活,需要重启应用,没有勾选的,不会显示对应的菜单切换和分屏快捷按钮。多个子界面模块也可以选择显示或者隐藏,以便将不需要的模块隐藏掉,碍眼。
@@ -915,7 +769,22 @@ g[data-mml-node="xypic"] path {
打开项目:QT VS TOOLS – Open Qt Project File 选择 video_system.pro,然后等待项目加载完毕。
由于项目中用到了ffmpeg和vlc,引用了对应的lib库,所以在用vs+qt的开发环境中,很可能报错提示 映像是不安全的 编译通不过,需要做个设置。
解决方法
如果在数据库设置中选择了mysql数据库,需要对mysql数据库做个设置,就是将编码设置成utf8,已设置可以跳过,不然很可能数据库无法正常使用。
- 在加载USB摄像机的时候,需要填写对应USB设备的名称,可以通过命令行和设备管理器查看对应的名称,要英文的。
整个项目源代码行数大概30W行,其中代码13.5W行(占比45%),注释12.7W行(占比42%),空行3.5W行。分层设计注释详细。
整个项目源代码行数大概30W行,其中代码13.5W行(占比45%),注释12.7W行(占比42%),空行3.5W行。分层设计注释详细。
第一步:下载好ffmpeg,这个可以去官网http://ffmpeg.org/自行找到下载位置下载。要注意的是有些很老的嵌入式linux系统的编译器未必支持最新的ffmpeg4,建议下载3。 +第二步:复制ffmpeg-3.4.5.tar.gz 到自定义文件夹下,我这里是/home/liu +第三步:解压ffmpeg,tar –zxvf ffmpeg-3.4.5.tar.gz –C /home/liu +第四步:安装编译ffmpeg依赖的包 apt-get install yasm +第五步:编译ffmpeg cd /home/liu/ffmpeg-3.4.5 +如果编译静态库执行以下命令 +./configure --prefix=host --enable-static --disable-shared --disable-doc +如果编译动态库执行以下命令 +./configure --prefix=host --enable-shared --disable-static --disable-doc +如果需要编译ffplay以便直接用其打开测试,可以在参数后面加上--enable-ffplay +./configure --prefix=host --enable-shared --disable-static --disable-doc --enable-ffplay +其他常用参数 --disable-zlib --disable-xlib --enable-x11grab --disable-libxcb +可以执行./configure –help 来查看支持哪些参数,尤其是各种解码器的开关,具体可搜索。 +其他参数可参见网页 https://blog.csdn.net/momo0853/article/details/78043903
make (还可以开启多线程编译加快速度 make –j4) +make install +第六步:打开ffmpeg3.4.5/host目录,生成的文件都在这里,拿去用吧。