qt_demoe/web/video_system.html

785 lines
234 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<link href='https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext' rel='stylesheet' type='text/css' /><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
body.typora-export { padding-left: 0px; padding-right: 0px; }
#write { padding-left: 20px; padding-right: 20px; }
.CodeMirror-sizer { margin-left: 0px !important; }
.CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-fences-adv-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
#write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
.typora-export * { -webkit-print-color-adjust: exact; }
.typora-export #write { break-after: avoid; }
.typora-export #write::after { height: 0px; }
.is-mac table { break-inside: avoid; }
.typora-export-show-outline .typora-export-sidebar { display: none; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
.md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
.md-toc-h4 .md-toc-inner { margin-left: 5em; }
.md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
.md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-fences-math .MathJax_SVG_Display, .md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: visible; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; zoom: 90%; }
#math-inline-preview-content { zoom: 1.1; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
.md-expand mark .md-meta { opacity: 0.3 !important; }
mark .md-meta { color: rgb(0, 0, 0); }
@media print {
.typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignobject { font-size: var(--mermaid-font-zoom); }
.md-fences.md-fences-math { font-size: 1em; }
.md-fences-math .MathJax_SVG_Display { margin-top: 8px; cursor: default; }
.md-fences-advanced:not(.md-focus) { padding: 0px; white-space: nowrap; border: 0px; }
.md-fences-advanced:not(.md-focus) { background: inherit; }
.typora-export-show-outline .typora-export-content { max-width: 1440px; margin: auto; display: flex; flex-direction: row; }
.typora-export-sidebar { width: 300px; font-size: 0.8rem; margin-top: 80px; margin-right: 18px; }
.typora-export-show-outline #write { --webkit-flex:2; flex: 2 1 0%; }
.typora-export-sidebar .outline-content { position: fixed; top: 0px; max-height: 100%; overflow: hidden auto; padding-bottom: 30px; padding-top: 60px; width: 300px; }
@media screen and (max-width: 1024px) {
.typora-export-sidebar, .typora-export-sidebar .outline-content { width: 240px; }
}
@media screen and (max-width: 800px) {
.typora-export-sidebar { display: none; }
}
.outline-content li, .outline-content ul { margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; list-style: none; }
.outline-content ul { margin-top: 0px; margin-bottom: 0px; }
.outline-content strong { font-weight: 400; }
.outline-expander { width: 1rem; height: 1.42857rem; position: relative; display: table-cell; vertical-align: middle; cursor: pointer; padding-left: 4px; }
.outline-expander::before { content: ""; position: relative; font-family: Ionicons; display: inline-block; font-size: 8px; vertical-align: middle; }
.outline-item { padding-top: 3px; padding-bottom: 3px; cursor: pointer; }
.outline-expander:hover::before { content: ""; }
.outline-h1 > .outline-item { padding-left: 0px; }
.outline-h2 > .outline-item { padding-left: 1em; }
.outline-h3 > .outline-item { padding-left: 2em; }
.outline-h4 > .outline-item { padding-left: 3em; }
.outline-h5 > .outline-item { padding-left: 4em; }
.outline-h6 > .outline-item { padding-left: 5em; }
.outline-label { cursor: pointer; display: table-cell; vertical-align: middle; text-decoration: none; color: inherit; }
.outline-label:hover { text-decoration: underline; }
.outline-item:hover { border-color: rgb(245, 245, 245); background-color: var(--item-hover-bg-color); }
.outline-item:hover { margin-left: -28px; margin-right: -28px; border-left: 28px solid transparent; border-right: 28px solid transparent; }
.outline-item-single .outline-expander::before, .outline-item-single .outline-expander:hover::before { display: none; }
.outline-item-open > .outline-item > .outline-expander::before { content: ""; }
.outline-children { display: none; }
.info-panel-tab-wrapper { display: none; }
.outline-item-open > .outline-children { display: block; }
.typora-export .outline-item { padding-top: 1px; padding-bottom: 1px; }
.typora-export .outline-item:hover { margin-right: -8px; border-right: 8px solid transparent; }
.typora-export .outline-expander::before { content: "+"; font-family: inherit; top: -1px; }
.typora-export .outline-expander:hover::before, .typora-export .outline-item-open > .outline-item > .outline-expander::before { content: ""; }
.typora-export-collapse-outline .outline-children { display: none; }
.typora-export-collapse-outline .outline-item-open > .outline-children, .typora-export-no-collapse-outline .outline-children { display: block; }
.typora-export-no-collapse-outline .outline-expander::before { content: "" !important; }
.typora-export-show-outline .outline-item-active > .outline-item .outline-label { font-weight: 700; }
.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background: inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background: inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 30px; z-index: 3; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }
.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }
.CodeMirror-linebackground { position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background: rgba(255, 255, 0, 0.4); }
span.cm-underlined { text-decoration: underline; }
span.cm-strikethrough { text-decoration: line-through; }
.cm-tw-syntaxerror { color: rgb(255, 255, 255); background-color: rgb(153, 0, 0); }
.cm-tw-deleted { text-decoration: line-through; }
.cm-tw-header5 { font-weight: 700; }
.cm-tw-listitem:first-child { padding-left: 10px; }
.cm-tw-box { border-style: solid; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-color: inherit; border-top-width: 0px !important; }
.cm-tw-underline { text-decoration: underline; }
@media print {
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}
:root {
--side-bar-bg-color: #fafafa;
--control-text-color: #777;
}
@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);
/* open-sans-regular - latin-ext_latin */
/* open-sans-italic - latin-ext_latin */
/* open-sans-700 - latin-ext_latin */
/* open-sans-700italic - latin-ext_latin */
html {
font-size: 16px;
}
body {
font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: rgb(51, 51, 51);
line-height: 1.6;
}
#write {
max-width: 860px;
margin: 0 auto;
padding: 30px;
padding-bottom: 100px;
}
@media only screen and (min-width: 1400px) {
#write {
max-width: 1024px;
}
}
@media only screen and (min-width: 1800px) {
#write {
max-width: 1200px;
}
}
#write > ul:first-child,
#write > ol:first-child{
margin-top: 30px;
}
a {
color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
position: relative;
margin-top: 1rem;
margin-bottom: 1rem;
font-weight: bold;
line-height: 1.4;
cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
text-decoration: none;
}
h1 tt,
h1 code {
font-size: inherit;
}
h2 tt,
h2 code {
font-size: inherit;
}
h3 tt,
h3 code {
font-size: inherit;
}
h4 tt,
h4 code {
font-size: inherit;
}
h5 tt,
h5 code {
font-size: inherit;
}
h6 tt,
h6 code {
font-size: inherit;
}
h1 {
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
h2 {
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
/*@media print {
.typora-export h1,
.typora-export h2 {
border-bottom: none;
padding-bottom: initial;
}
.typora-export h1::after,
.typora-export h2::after {
content: "";
display: block;
height: 100px;
margin-top: -96px;
border-top: 1px solid #eee;
}
}*/
h3 {
font-size: 1.5em;
line-height: 1.43;
}
h4 {
font-size: 1.25em;
}
h5 {
font-size: 1em;
}
h6 {
font-size: 1em;
color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
margin: 0.8em 0;
}
li>ol,
li>ul {
margin: 0 0;
}
hr {
height: 2px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
overflow: hidden;
box-sizing: content-box;
}
li p.first {
display: inline-block;
}
ul,
ol {
padding-left: 30px;
}
ul:first-child,
ol:first-child {
margin-top: 0;
}
ul:last-child,
ol:last-child {
margin-bottom: 0;
}
blockquote {
border-left: 4px solid #dfe2e5;
padding: 0 15px;
color: #777777;
}
blockquote blockquote {
padding-right: 0;
}
table {
padding: 0;
word-break: initial;
}
table tr {
border: 1px solid #dfe2e5;
margin: 0;
padding: 0;
}
table tr:nth-child(2n),
thead {
background-color: #f8f8f8;
}
table th {
font-weight: bold;
border: 1px solid #dfe2e5;
border-bottom: 0;
margin: 0;
padding: 6px 13px;
}
table td {
border: 1px solid #dfe2e5;
margin: 0;
padding: 6px 13px;
}
table th:first-child,
table td:first-child {
margin-top: 0;
}
table th:last-child,
table td:last-child {
margin-bottom: 0;
}
.CodeMirror-lines {
padding-left: 4px;
}
.code-tooltip {
box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
border-top: 1px solid #eef2f2;
}
.md-fences,
code,
tt {
border: 1px solid #e7eaed;
background-color: #f8f8f8;
border-radius: 3px;
padding: 0;
padding: 2px 4px 0px 4px;
font-size: 0.9em;
}
code {
background-color: #f3f4f4;
padding: 0 2px 0 2px;
}
.md-fences {
margin-bottom: 15px;
margin-top: 15px;
padding-top: 8px;
padding-bottom: 6px;
}
.md-task-list-item > input {
margin-left: -1.3em;
}
@media print {
html {
font-size: 13px;
}
table,
pre {
page-break-inside: avoid;
}
pre {
word-wrap: break-word;
}
}
.md-fences {
background-color: #f8f8f8;
}
#write pre.md-meta-block {
padding: 1rem;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border: 0;
border-radius: 3px;
color: #777777;
margin-top: 0 !important;
}
.mathjax-block>.code-tooltip {
bottom: .375rem;
}
.md-mathjax-midline {
background: #fafafa;
}
#write>h3.md-focus:before{
left: -1.5625rem;
top: .375rem;
}
#write>h4.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h5.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
#write>h6.md-focus:before{
left: -1.5625rem;
top: .285714286rem;
}
.md-image>.md-meta {
/*border: 1px solid #ddd;*/
border-radius: 3px;
padding: 2px 0px 0px 4px;
font-size: 0.9em;
color: inherit;
}
.md-tag {
color: #a7a7a7;
opacity: 1;
}
.md-toc {
margin-top:20px;
padding-bottom:20px;
}
.sidebar-tabs {
border-bottom: none;
}
#typora-quick-open {
border: 1px solid #ddd;
background-color: #f8f8f8;
}
#typora-quick-open-item {
background-color: #FAFAFA;
border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
border-style: solid;
border-width: 1px;
}
/** focus mode */
.on-focus-mode blockquote {
border-left-color: rgba(85, 85, 85, 0.12);
}
header, .context-menu, .megamenu-content, footer{
font-family: "Segoe UI", "Arial", sans-serif;
}
.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
visibility: visible;
}
.mac-seamless-mode #typora-sidebar {
background-color: #fafafa;
background-color: var(--side-bar-bg-color);
}
.md-lang {
color: #b4654d;
}
/*.html-for-mac {
--item-hover-bg-color: #E6F0FE;
}*/
#md-notification .btn {
border: 0;
}
.dropdown-menu .divider {
border-color: #e5e5e5;
opacity: 0.4;
}
.ty-preferences .window-content {
background-color: #fafafa;
}
.ty-preferences .nav-group-item.active {
color: white;
background: #999;
}
.menu-item-container a.menu-style-btn {
background-color: #f5f8fa;
background-image: linear-gradient( 180deg , hsla(0, 0%, 100%, 0.8), hsla(0, 0%, 100%, 0));
}
:root {--mermaid-font-zoom:1.23958em ;}
</style><title>Qt编写的视频监控系统开发及使用说明</title>
</head>
<body class='typora-export os-windows typora-export-show-outline typora-export-no-collapse-outline'><div class='typora-export-content'>
<div class="typora-export-sidebar"><div class="outline-content"><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#0-前言说明">0 前言说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#01-系统说明">0.1 系统说明</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#02-特别说明">0.2 特别说明</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#03-功能特点">0.3 功能特点</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#031-软件模块">0.3.1 软件模块</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#032-基础功能">0.3.2 基础功能</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#033-特色功能">0.3.3 特色功能</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#04-编译说明">0.4 编译说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#041-版本说明">0.4.1 版本说明</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#042-注意事项">0.4.2 注意事项</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#043-离线地图">0.4.3 离线地图</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#05-视频格式">0.5 视频格式</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#051-usb摄像头">0.5.1 USB摄像头</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#052-网络地址">0.5.2 网络地址</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#053-视频文件">0.5.3 视频文件</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#06-版本说明">0.6 版本说明</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1-用户登录退出">1 用户登录退出</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11-用户登录">1.1 用户登录</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#12-用户退出">1.2 用户退出</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#2-主界面操作">2 主界面操作</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#21-面板显示隐藏">2.1 面板显示隐藏</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#22-面板拖动">2.2 面板拖动</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#23-视频播放">2.3 视频播放</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#24-视频截图">2.4 视频截图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#25-删除视频">2.5 删除视频</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#26-画面切换">2.6 画面切换</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#27-声音调节">2.7 声音调节</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#28-视频轮询">2.8 视频轮询</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#29-通道交换">2.9 通道交换</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#210-云台控制">2.10 云台控制</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#211-设备控制">2.11 设备控制</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#212-报警订阅">2.12 报警订阅</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#213-悬浮条操作">2.13 悬浮条操作</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#214-标签设置">2.14 标签设置</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#3-视频回放">3 视频回放</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#31-本地回放">3.1 本地回放</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#311-视频查询">3.1.1 视频查询</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#312-存储规则">3.1.2 存储规则</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#313-视频下载">3.1.3 视频下载</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#32-远程回放">3.2 远程回放</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#33-设备播放">3.3 设备播放</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#34-图片回放">3.4 图片回放</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#341-图片查询">3.4.1 图片查询</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#342-存储规则">3.4.2 存储规则</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#343-图片下载">3.4.3 图片下载</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#344-导出报告">3.4.4 导出报告</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#35-视频上传">3.5 视频上传</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#351-本地设置">3.5.1 本地设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#352-远程设置">3.5.2 远程设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#353-文件加密">3.5.3 文件加密</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#354-功能特点">3.5.4 功能特点</a></div><ul class="outline-children"></ul></li></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#4-电子地图">4 电子地图</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#41-双击预览">4.1 双击预览</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#42-图片地图">4.2 图片地图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#43-离线地图">4.3 离线地图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#44-在线地图">4.4 在线地图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#45-路径规划">4.5 路径规划</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#5-日志查询">5 日志查询</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#51-本地日志">5.1 本地日志</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#511-查询记录">5.1.1 查询记录</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#512-打印记录">5.1.2 打印记录</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#513-导出记录到xls">5.1.3 导出记录到xls</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#514-导出记录到pdf">5.1.4 导出记录到pdf</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#515-删除记录">5.1.5 删除记录</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#516-清空记录">5.1.6 清空记录</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#52-设备日志">5.2 设备日志</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#6-系统设置">6 系统设置</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#61-系统设置">6.1 系统设置</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#611-基本设置">6.1.1 基本设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#612-视频参数">6.1.2 视频参数</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#613-数据库设置">6.1.3 数据库设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#614-地图配置">6.1.4 地图配置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#615-功能激活">6.1.5 功能激活</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#616-颜色配置">6.1.6 颜色配置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#617-串口配置">6.1.7 串口配置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#618-网络配置">6.1.8 网络配置</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#62-录像机管理">6.2 录像机管理</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#621-录像机添加">6.2.1 录像机添加</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#622-录像机删除">6.2.2 录像机删除</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#623-录像机清空">6.2.3 录像机清空</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#624-录像机信息导入">6.2.4 录像机信息导入</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#625-录像机信息导出">6.2.5 录像机信息导出</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#626-录像机信息打印">6.2.6 录像机信息打印</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#627-导出到excel">6.2.7 导出到Excel</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#63-摄像机管理">6.3 摄像机管理</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#631-摄像机添加">6.3.1 摄像机添加</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#632-摄像机删除">6.3.2 摄像机删除</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#633-摄像机清空">6.3.3 摄像机清空</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#634-摄像机信息导入">6.3.4 摄像机信息导入</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#635-摄像机信息导出">6.3.5 摄像机信息导出</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#636-摄像机信息打印">6.3.6 摄像机信息打印</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#637-导出到excel">6.3.7 导出到Excel</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#638-设备搜索">6.3.8 设备搜索</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#64-轮询配置">6.4 轮询配置</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#641-轮询点添加">6.4.1 轮询点添加</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#642-轮询点删除">6.4.2 轮询点删除</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#643-轮询点清空">6.4.3 轮询点清空</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#644-轮询点信息导入">6.4.4 轮询点信息导入</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#645-轮询点信息导出">6.4.5 轮询点信息导出</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#645-轮询点信息打印">6.4.5 轮询点信息打印</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#647-导出到excel">6.4.7 导出到Excel</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#648-参数设置">6.4.8 参数设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#649-批量生成">6.4.9 批量生成</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#6410-分组设置">6.4.10 分组设置</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#65-用户管理">6.5 用户管理</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#651-用户添加">6.5.1 用户添加</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#652-用户删除">6.5.2 用户删除</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#653-用户清空">6.5.3 用户清空</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#654-用户信息导入">6.5.4 用户信息导入</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#655-用户信息导出">6.5.5 用户信息导出</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#656-用户信息打印">6.5.6 用户信息打印</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#657-导出到excel">6.5.7 导出到Excel</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#658-权限验证">6.5.8 权限验证</a></div><ul class="outline-children"></ul></li></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#7-简易使用步骤">7 简易使用步骤</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#71-添加摄像机">7.1 添加摄像机</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#72-视频播放">7.2 视频播放</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#73-云台控制">7.3 云台控制</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#74-自动校时">7.4 自动校时</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#75-事件订阅">7.5 事件订阅</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#76-图片参数">7.6 图片参数</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#8-内核模块说明">8 内核模块说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#81-模块-onvif">8.1 模块-onvif</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#811-效果图">8.1.1 效果图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#812-功能介绍">8.1.2 功能介绍</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#813-云台说明">8.1.3 云台说明</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#814-主要功能">8.1.4 主要功能</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#815-处理流程">8.1.5 处理流程</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#82-内核-ffmpeg">8.2 内核-ffmpeg</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#821-效果图">8.2.1 效果图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#822-功能介绍">8.2.2 功能介绍</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#83-内核-vlc">8.3 内核-vlc</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#831-效果图">8.3.1 效果图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#832-功能介绍">8.3.2 功能介绍</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#84-内核-mpv">8.4 内核-mpv</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#841-效果图">8.4.1 效果图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#842-功能介绍">8.4.2 功能介绍</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#85-内核-海康sdk">8.5 内核-海康sdk</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#851-效果图">8.5.1 效果图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#852-功能介绍">8.5.2 功能介绍</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#86-内核-萤石sdk">8.6 内核-萤石sdk</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#87-内核-大华sdk">8.7 内核-大华sdk</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#88-内核-宇视sdk">8.8 内核-宇视sdk</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#89-内核-easyplayer">8.9 内核-easyplayer</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#810-内核-大牛直播">8.10 内核-大牛直播</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#811-内核-qtav">8.11 内核-qtav</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#9-主界面模块说明">9 主界面模块说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#90-主界面">9.0 主界面</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#901-视频监控-普通模式">9.0.1 视频监控-普通模式</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#902-视频监控-全屏模式">9.0.2 视频监控-全屏模式</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#903-机器人监控-普通模式">9.0.3 机器人监控-普通模式</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#904-机器人监控-全屏模式">9.0.4 机器人监控-全屏模式</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#905-无人机监控-普通模式">9.0.5 无人机监控-普通模式</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#906-无人机监控-全屏模式">9.0.6 无人机监控-全屏模式</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#91-设备列表">9.1 设备列表</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#92-窗口信息">9.2 窗口信息</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#93-图文警情">9.3 图文警情</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#94-云台控制">9.4 云台控制</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#95-设备控制">9.5 设备控制</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#96-预置位置">9.6 预置位置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#97-巡航设置">9.7 巡航设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#98-悬浮地图">9.8 悬浮地图</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#99-飞行轨迹">9.9 飞行轨迹</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#910-飞行监控">9.10 飞行监控</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#911-数据调试">9.11 数据调试</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#912-运动仿真">9.12 运动仿真</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#913-图像增强">9.13 图像增强</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#914-网页浏览">9.14 网页浏览</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#10-各系统运行图">10 各系统运行图</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#101-windows-mingw">10.1 windows-mingw</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#102-windows-msvc">10.2 windows-msvc</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#103-linux-ubuntu">10.3 linux-ubuntu</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#104-linux-deepin">10.4 linux-deepin</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#105-linux-centeros">10.5 linux-centeros</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#106-linux-uos">10.6 linux-uos</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#107-linux-kylin">10.7 linux-kylin</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#108-unix-mac">10.8 unix-mac</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11-程序框架说明">11 程序框架说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#111-整体代码结构">11.1 整体代码结构</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#112-主模块说明">11.2 主模块说明</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#113-子模块说明">11.3 子模块说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1131-第三方类库">11.3.1 第三方类库</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1132-通信及辅助类">11.3.2 通信及辅助类</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11321-模块-api">11.3.2.1 模块-api</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11322-模块-app">11.3.2.2 模块-app</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11323-模块-device">11.3.2.3 模块-device</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11324-模块-flight">11.3.2.4 模块-flight</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11325-模块-usercontrol">11.3.2.5 模块-usercontrol</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1133-核心通用类库">11.3.3 核心通用类库</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11331-模块-corecontrol">11.3.3.1 模块-core_control</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11332-模块-coredataout">11.3.3.2 模块-core_dataout</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11333-模块-coredb">11.3.3.3 模块-core_db</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11334-模块-coreffmpeg">11.3.3.4 模块-core_ffmpeg</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11335-模块-coremap">11.3.3.5 模块-core_map</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11336-模块-coreonvif">11.3.3.6 模块-core_onvif</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11337-模块-coreopengl">11.3.3.7 模块-core_opengl</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11338-模块-corequi">11.3.3.8 模块-core_qui</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11339-模块-coretcpfile">11.3.3.9 模块-core_tcpfile</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#113310-模块-corevideo">11.3.3.10 模块-core_video</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#113311-模块-corewebview">11.3.3.11 模块-core_webview</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1134-界面ui">11.3.4 界面UI</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11341-模块-frmconfig">11.3.4.1 模块-frmconfig</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11342-模块-frmdata">11.3.4.2 模块-frmdata</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11343-模块-frmdemo">11.3.4.3 模块-frmdemo</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11344-模块-frmipc">11.3.4.4 模块-frmipc</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11345-模块-frmmain">11.3.4.5 模块-frmmain</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11346-模块-frmmap">11.3.4.6 模块-frmmap</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11347-模块-frmmodule">11.3.4.7 模块-frmmodule</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11348-模块-frmrobot">11.3.4.8 模块-frmrobot</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#11349-模块-frmuavs">11.3.4.9 模块-frmuavs</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h5"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#113410-模块-frmvideo">11.3.4.10 模块-frmvideo</a></div><ul class="outline-children"></ul></li></ul></li></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#12-二次开发说明">12 二次开发说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#121-开发环境搭建">12.1 开发环境搭建</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1211-常规通用步骤">12.1.1 常规通用步骤</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1212-windowsmingw">12.1.2 windows+mingw</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1213-windowsmsvc">12.1.3 windows+msvc</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1214-linuxubuntu">12.1.4 linux+ubuntu</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1215-linuxdeepin">12.1.5 linux+deepin</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1216-linuxcenteros">12.1.6 linux+centeros</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1217-linuxuos">12.1.7 linux+uos</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h4"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#1218-linux银河麒麟">12.1.8 linux+银河麒麟</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#122-通用模块使用">12.2 通用模块使用</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#123-人工智能集成">12.3 人工智能集成</a></div><ul class="outline-children"></ul></li></ul></li><li class="outline-item-wrapper outline-h2"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#13-其他说明">13 其他说明</a></div><ul class="outline-children"><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#131-海康onvif设置">13.1 海康onvif设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#132-大华onvif设置">13.2 大华onvif设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#133-国际onvif工具">13.3 国际onvif工具</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#134-报警输入设置">13.4 报警输入设置</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#135-环境使用qtvs">13.5 环境使用qt+vs</a></div><ul class="outline-children"></ul></li><li class="outline-item-wrapper outline-h3"><div class="outline-item"><span class="outline-expander"></span><a class="outline-label" href="#136-数据库设置mysql">13.6 数据库设置mysql</a></div><ul class="outline-children"></ul></li></ul></li></div></div><div id='write' class=''><h2 id='0-前言说明'><span>0 前言说明</span></h2><h3 id='01-系统说明'><span>0.1 系统说明</span></h3><ol start='' ><li><span>本视频监控系统做的是通用的系统主要偏重UI和整体框架。</span></li><li><span>主要功能包括摄像机管理实时视频显示设备地图显示各种画面切换onvif搜索设备和云台控制通用的NVR视频流播放比如海康的NVR支持直接取流回放等功能。</span></li><li><span>如果是依赖SDK去实现的功能雨刷、去雾等都没有做那个破坏了兼容性无法通用其他摄像机设备以及其他操作系统。</span></li><li><span>一般都是买过去自己加上SDK的功能和自己定制的需要的功能。</span></li><li><span>每个厂家SDK和定制的功能都不一样。</span></li><li><span>本程序会不定期更新,包括使用说明,购买者可永久免费升级,一次购买终生售后。</span></li></ol><h3 id='02-特别说明'><span>0.2 特别说明</span></h3><ol start='' ><li><span>程序本身是个客户端并不是服务器程序。</span></li><li><span>摄像机管理没有限制摄像机的数量理论上10000路肯定没有问题就是个数据库记录。</span></li><li><span>实时显示具体能支持多少路和具体的电脑配置有关亲测1.8G主频8G内存I5子码流64路总之比海康大华客户端要更优秀</span></li><li><span>程序实时显示界面最大可以到64路每个通道都是打开的时候才会去建立连接取视频流而不是一开始就建立了连接。</span></li><li><span>未经本人许可不可将本项目源码扩散,如有发现本人将追究法律责任,谢谢配合。</span></li></ol><p><strong><span>相关站点</span></strong></p><ol start='' ><li><span>国内站点:</span><a href='https://gitee.com/feiyangqingyun/' target='_blank' class='url'>https://gitee.com/feiyangqingyun/</a></li><li><span>国际站点:</span><a href='https://github.com/feiyangqingyun/' target='_blank' class='url'>https://github.com/feiyangqingyun/</a></li><li><span>个人主页:</span><a href='https://blog.csdn.net/feiyangqingyun/' target='_blank' class='url'>https://blog.csdn.net/feiyangqingyun/</a></li><li><span>知乎主页:</span><a href='https://www.zhihu.com/people/feiyangqingyun' target='_blank' class='url'>https://www.zhihu.com/people/feiyangqingyun</a></li><li><span>产品主页:</span><a href='https://blog.csdn.net/feiyangqingyun/article/details/97565652' target='_blank' class='url'>https://blog.csdn.net/feiyangqingyun/article/details/97565652</a></li></ol><h3 id='03-功能特点'><span>0.3 功能特点</span></h3><h4 id='031-软件模块'><span>0.3.1 软件模块</span></h4><ol start='' ><li><span>视频监控模块,各种停靠小窗体子模块,包括设备列表、图文警情、窗口信息、云台控制、预置位、巡航设置、设备控制、悬浮地图、网页浏览等。</span></li><li><span>视频回放模块,包括本地回放、远程回放、设备播放、图片回放、视频上传等。</span></li><li><span>电子地图模块,包括图片地图、在线地图、离线地图、路径规划等。</span></li><li><span>日志查询模块,包括本地日志、设备日志等。</span></li><li><span>系统设置模块,包括系统设置(基本设置、视频参数、数据库设置、地图配置、串口配置等)、录像机管理、摄像机管理、轮询配置、用户管理等。</span></li></ol><h4 id='032-基础功能'><span>0.3.2 基础功能</span></h4><ol start='' ><li><span>支持各种视频流rtsp、rtmp、http等、视频文件mp4、rmvb、avi等、本地USB摄像机播放。</span></li><li><span>支持多画面切换包括1、4、6、8、9、13、16、25、36、64画面切换。</span></li><li><span>支持全屏切换多种切换方式包括鼠标右键菜单、工具栏按钮、快捷键alt+enter全屏esc退出全屏</span></li><li><span>支持视频轮询包括1、4、9、16画面轮询可设置轮询分组轮询预案、轮询间隔、码流类型等。</span></li><li><span>支持onvif协议包括设备搜索、云台控制、设备控制图片参数、校对时间、系统重启抓拍图片等</span></li><li><span>支持权限管理,不同的用户可以对应不同的模块权限,比如删除日志、关闭系统等。</span></li><li><span>数据库支持多种包括sqlite、mysql、sqlserver、postgresql、oracle、人大金仓等。</span></li><li><span>本地USB摄像机支持设置分辨率、帧率等参数。</span></li><li><span>所有停靠模块都自动生成对应的菜单用来控制显示和隐藏,在标题栏右键可以弹出。</span></li><li><span>支持显示所有模块、隐藏所有模块、复位普通布局、复位全屏布局。</span></li><li><span>双击设备弹出实时预览视频,支持图片地图、在线地图、离线地图等。</span></li><li><span>摄像机节点拖曳到对应窗体播放视频,同时支持拖曳本地文件直接播放。</span></li><li><span>删除视频支持鼠标右键删除、悬浮条关闭删除、拖曳到视频监控面板外删除等多种方式。</span></li><li><span>图片地图上设备按钮可自由拖动,自动保存位置信息。百度地图上可以鼠标单击获取经纬度信息,用来更新设备位置。</span></li><li><span>视频监控面板窗体中任意通道支持拖曳交换,瞬间响应。</span></li><li><span>封装了百度地图,视图切换,运动轨迹,设备点位,鼠标按下获取经纬度等。</span></li><li><span>双击节点、拖曳节点、拖曳窗体交换位置等操作,均自动更新保存最后的播放地址,下次软件打开自动应用。</span></li><li><span>右下角音量条控件,失去焦点自动隐藏,音量条带静音图标。</span></li><li><span>支持视频截图,可指定单个或者对所有通道截图,底部小工具栏也有截图按钮。</span></li><li><span>支持超时自动隐藏鼠标指针、自动全屏机制。</span></li><li><span>支持onvif云台控制可上下左右移动云台摄像机包括复位和焦距调整等。</span></li><li><span>支持任意onvif摄像机包括但不限于海康、大华、宇视、天地伟业、华为等。</span></li><li><span>可保存视频,可选定时存储或者单文件存储,可选存储间隔时间。</span></li><li><span>可设置视频流通信方式tcp+udp可设置视频解码是速度优先、质量优先、均衡等。</span></li><li><span>可设置软件中文名称、英文名称、LOGO图标等。</span></li><li><span>存储的视频文件支持导出到指定目录,支持批量上传到服务器。</span></li></ol><h4 id='033-特色功能'><span>0.3.3 特色功能</span></h4><ol start='' ><li><span>主界面采用停靠窗体模式,各种组件以小模块的形式加入,可自定义任意模块加入。</span></li><li><span>停靠模块可拖动任意位置嵌入和悬浮,支持最大化全屏,支持多屏幕。</span></li><li><span>双重布局文件存储机制,正常模式、全屏模式都对应不同的布局方案,自动切换和保存,比如全屏模式可以突出几个模块透明显示在指定位置,更具科幻感现代化。</span></li><li><span>原创onvif协议机制采用底层协议解析udp广播搜索+http请求执行命令更轻量易懂易学习拓展不依赖任何第三方组件比如gsoap。</span></li><li><span>原创数据导入导出机制,跨平台不依赖任何组件,瞬间导出数据。</span></li><li><span>内置多个原创组件宇宙超值超级牛逼包括数据导入导出组件导出到xls、pdf、打印、数据库组件数据库管理线程、自动清理数据线程、万能分页、数据请求等、地图组件、视频监控组件、文件多线程收发组件、onvif通信组件、通用浏览器内核组件等。</span></li><li><span>自定义信息框+错误框+询问框+右下角提示框(包含多种格式)等。</span></li><li><span>精美换肤高达17套皮肤样式随意更换所有样式全部统一包括菜单等。</span></li><li><span>视频控件悬浮条可以自行增加多个按钮,监控界面底部小工具栏也可自行增加按钮。</span></li><li><span>双击摄像机节点自动播放视频,双击节点自动依次添加视频,会自动跳到下一个,双击父节点自动添加该节点下的所有视频。可选主码流、子码流。</span></li><li><span>录像机管理、摄像机管理,可添加删除修改导入导出打印信息,立即应用新的设备信息生成树状列表,不需重启。</span></li><li><span>可选多种内核自由切换ffmpeg、vlc、mpv等均可在pro中设置。推荐用ffmpeg跨平台最多默认提供好了linux和mac平台上编译好的库。</span></li><li><span>支持硬解码可设置硬解码类型qsv、dxva2、d3d11va等</span></li><li><span>默认采用opengl绘制视频超低的CPU资源占用支持yuyv和nv12两种格式绘制很牛逼。</span></li><li><span>高度可定制化,用户可以很方便的在此基础上衍生自己的功能,比如增加自定义模块,增加运行模式、机器人监控、无人机监控、挖掘机监控、检察院审判监控等。</span></li><li><span>支持xp、win7、win10、linux、mac、各种国产系统UOS、中标麒麟、银河麒麟等、嵌入式linux等系统。</span></li><li><span>注释完整,项目结构清晰,超级详细完整的使用开发手册,精确到每个代码文件的功能说明,不断持续迭代版本。</span></li></ol><h3 id='04-编译说明'><span>0.4 编译说明</span></h3><h4 id='041-版本说明'><span>0.4.1 版本说明</span></h4><ol start='' ><li><span>本系统没有说基于哪个Qt版本由于系统中电子地图模块用到了浏览器模块所以理论上要求你电脑的Qt版本也有浏览器模块才行</span></li><li><span>windows上Qt5.6以上的版本需要msvc编译器的版本才有其余系统都会有。</span></li><li><span>如果没有则电子地图模块不可用,但是其余功能全部可用没有任何影响。</span></li><li><span>本人亲测4.7、4.8、5.5、5.6、5.7、5.9、5.12、5.13、5.14、5.15等。</span></li><li><span>2021-1-6开始集成了miniblink浏览器内核意味着mingw版本的qt5.6以上版本也全部支持,这样就所有系统都有浏览器模块不需要担心没有电子地图的问题。</span></li></ol><h4 id='042-注意事项'><span>0.4.2 注意事项</span></h4><ol start='' ><li><span>可执行文件在源码同级目录的bin目录下。</span></li><li><span>编译完成后记得将源码下的file文件夹下的所有文件复制到可执行文件同一目录。</span></li><li><span>如果开启了视频监控默认开启则记得将对应的动态库文件复制到可执行文件同一目录。比如采用ffmpeg内核默认就是ffmpeg的话则将下载到的dll_ffmpeg4下的所有文件复制到可执行文件同一目录。</span></li><li><span>各个操作系统的ffmpeg和vlc编译好的dll以及miniblink的dll下载地址。</span>
<a href='https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA' target='_blank' class='url'>https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA</a><span>  提取码: ujm7。</span></li><li><span>如果是64位的qt则对应的dll时候拷贝dll_ffmpeg4_64目录下的。</span></li><li><span>如果使用的ffmpeg3则对应dll目录就是dll_ffmpeg在ffmpeg.pri文件中可以看到具体启用的是ffmpeg3支持XP还是ffmpeg4不支持XP默认是ffmpeg4。</span></li><li><span>图形字体对照表在doc目录下的IconFont.png、Font Awesome Cheatsheet.png分别对应图形字体类 IconFont、IconHelper。</span></li><li><span>如果发现地图打不开请先确认file目录下的所有文件有没有拷贝过去。</span></li><li><span>如果是用vs+qt可能报错 error LNK2026解决办法详细见文档中其他说明。</span></li><li><span>默认用户名admin 密码admin</span></li></ol><h4 id='043-离线地图'><span>0.4.3 离线地图</span></h4><ol start='' ><li><span>离线地图可以用网上的瓦片地图下载器下载百度的离线地图放到对应目录即可。</span></li><li><span>也可以直接下载网盘中已经下载好的上海市的离线地图。</span></li><li><span>下载地址:</span><a href='https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g' target='_blank' class='url'>https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g</a><span> 提取密码01jf 文件名称bin_map_tiles.zip</span></li></ol><p><strong><span>使用说明</span></strong></p><ol start='' ><li><span>将压缩包下的两个文件夹复制到对应可执行文件下的config文件夹下和map.js文件同一级目录。</span></li><li><span>tiles文件夹是街道图tiles_hybrid文件夹是卫星图。</span></li><li><span>默认提供的是上海市徐汇区的瓦片地图,如果自己用万能地图下载器下载的百度地图的瓦片文件,也可以对应替换就行。</span></li><li><span>要注意的是格式默认是jpg如果下载的瓦片地图格式是png则需要打开config文件夹下的map_load.js文件将.jpg改成.png保存即可。</span></li></ol><h3 id='05-视频格式'><span>0.5 视频格式</span></h3><h4 id='051-usb摄像头'><span>0.5.1 USB摄像头</span></h4><ol start='' ><li><span>内核ffmpeg写法video=USB2.0 PC CAMERA具体要看设备名</span></li><li><span>内核vlc写法dshow://:dshow-vdev=&#39;Default&#39; 或者填USB2.0 PC CAMERA</span></li><li><span>带参数写法2020-12-12以后增加USB摄像头直接url带分辨率帧率写法默认分辨率640x480。</span></li></ol><p><strong><span>写法举例</span></strong></p><ol start='' ><li><span>video=USB2.0 PC CAMERA|1920x1080|30表示1920*1080分辨率30帧</span></li><li><span>video=USB2.0 PC CAMERA|640x480表示640*480分辨率</span></li><li><span>dshow://:dshow-vdev=&#39;Default&#39;|1920x1080vlc内核1920*1080分辨率</span></li></ol><h4 id='052-网络地址'><span>0.5.2 网络地址</span></h4><ol start='' ><li><span>下面的地址有时候会失效,可以自行网上找找其他的地址,网络视频地址建议在晚上测试会更流畅。</span></li><li><span>大雄兔rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov</span></li><li><span>中央卫视rtmp://58.200.131.2:1935/livetv/cctv1 cctv10</span></li><li><span>海康萤石:</span><a href='https://hls01open.ys7.com/openlive/6e0b2be040a943489ef0b9bb344b96b8.hd.m3u8' target='_blank' class='url'>https://hls01open.ys7.com/openlive/6e0b2be040a943489ef0b9bb344b96b8.hd.m3u8</a></li><li><span>摄像机格式:</span><a href='https://blog.csdn.net/qq_38880380/article/details/80652697' target='_blank' class='url'>https://blog.csdn.net/qq_38880380/article/details/80652697</a></li></ol><h4 id='053-视频文件'><span>0.5.3 视频文件</span></h4><ol start='' ><li><a href='http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4' target='_blank' class='url'>http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4</a></li><li><a href='http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4' target='_blank' class='url'>http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212559089721.mp4</a></li><li><a href='http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4' target='_blank' class='url'>http://vfx.mtime.cn/Video/2019/03/17/mp4/190317150237409904.mp4</a></li><li><a href='http://vfx.mtime.cn/Video/2019/03/14/mp4/190314223540373995.mp4' target='_blank' class='url'>http://vfx.mtime.cn/Video/2019/03/14/mp4/190314223540373995.mp4</a></li></ol><h3 id='06-版本说明'><span>0.6 版本说明</span></h3><p><strong><span>V20210425</span></strong></p><ol start='' ><li><span>配置文件密码改成密文存储。</span></li><li><span>增加了无敌的牛逼的万能的完美入微级自动分页导航控件。</span></li><li><span>日志记录表增加索引速度提升100倍以上。</span></li><li><span>新增多个设备轨迹 不同颜色+传入经纬度 单独示例。</span></li><li><span>对地图核心类所有覆盖物都增加颜色+粗细+透明度的参数,可动态传入对应值。</span></li><li><span>系统设置增加用户管理模块,可分别设置对应的权限。</span></li><li><span>万能权限管理算法,通过设置不同需要授权的模块名称,对应切换的按钮自动计算。</span></li><li><span>增加了appkey秘钥类用于校验秘钥是否正确运行时间等。</span></li></ol><p><strong><span>V20210403</span></strong></p><ol start='' ><li><span>增加全局变量AppData::LastLiveTime记住程序最后的活动时间-包括键盘+鼠标活动,用于两个判断,一个是超过多久没有操作全屏下隐藏鼠标光标,一个是超过多久没有操作如果没有全屏则自动全屏。</span></li><li><span>增加App::TimeAutoFull配置参数用来判断比较超时自动全屏。</span></li><li><span>重命名为TimeHideCursor表示程序多久未操作自动隐藏光标TimeAutoFull程序多久未操作自动全屏界面下拉框选项值增加0表示不启用此功能。</span></li><li><span>增加信息列表模块frmMsgList用于图文列表显示信息对应兄弟类frmMsgTable用于表格显示消息。</span></li><li><span>大改版将中间部分全部改成了QMainWindow子模块全部采用停靠窗体可以悬浮半透明自动记忆每个模块的最后的位置启动后自动应用。</span></li><li><span>移除大改版后的所有不需要用的变量和配置参数,重新调整配置参数。</span></li><li><span>增加透明度参数用于停靠窗体独立出来后的透明度。</span></li><li><span>将摄像机控制部分比如云台+控制+预置位+巡航单独分类到ipc模块方便管理。</span></li><li><span>限定操作员不能移动停靠窗体等,需要管理员设计好。</span></li><li><span>修复系统设置中工作模式等切换造成的自动重启会弹出退出和登录两个窗体的BUG。</span></li><li><span>修复自动登录用户计算不正确的BUG要以最后登录的用户为准。</span></li></ol><p><strong><span>V20210322</span></strong></p><ol start='' ><li><span>USB摄像头增加参数帧率第二个参数是分辨率第三个参数为帧率不设置则采用默认的帧率video=USB2.0 PC CAMERA|1920x1080|25。</span></li><li><span>增加独立的demo模块专门用于测试监控系统中用到的组件和控件演示如何使用比如视频图片界面演示从文件夹读取图片绘制到窗体视频窗体演示系统的核心组件视频控件的设置参数如何使用等。</span></li><li><span>增加了对其他数据库的支持比如posgres、oracle、odbc、kingbase等数据库理论上只要支持odbc数据源方式的都支持。</span></li><li><span>增加IndexStart启动窗体索引配置参数0-主程序 1-演示示例。</span></li></ol><p><strong><span>V20210305</span></strong></p><ol start='' ><li><span>修复数据库有时候没加载到的BUG。</span></li><li><span>新增配置参数控制画面切换的菜单和快捷图标是否显示。</span></li><li><span>ffmpeg内核增加了可动态保存机制点击开始保存按钮启动保存单击结束则生成视频文件如此往复。</span></li><li><span>海康内核判断主码流子码流改成了 /101? 和 /main/ 同时判断。</span></li><li><span>新增多屏幕的支持,自动在对应屏幕最大化全屏,对话框位置,右下角提示框等。</span></li><li><span>再次分类存放代码文件分成core ui class三大类。</span></li><li><span>系统配置更改视频控件参数统一一个函数设置initCommonVideoWidget函数中做了过滤必须关闭状态的视频控件设置才起作用。</span></li><li><span>设备播放模块增加大华NVR的远程回放地址其他地址计算算法调整。</span></li><li><span>新增界面模块功能启用配置参数。</span></li><li><span>新增主界面顶部导航模块中间界面,用于不同的运行模式加载不同的模块。</span></li></ol><p><strong><span>V20201212</span></strong></p><ol start='' ><li><span>增加USB摄像机分辨率设置直接url带掉。</span></li><li><span>所有地图内核公用一个,复用代码。</span></li><li><span>增加地图默认级别和中心点坐标设置参数。</span></li><li><span>主界面四个模块独立出来,做成了可配置,这样后期可以任意位置放置自定义模块。</span></li><li><span>四个模块标题栏自定义。</span></li><li><span>vlc内核和mpv内核的离线判断当句柄模式下统一为getLastTime当调用该函数的时候自动查询播放状态如果正在播放则自动更新时间为当前时间。</span></li><li><span>将各种在代码中define定义不同内核的代码全部优化统一为一个类很大减少代码量统一为CommonVideoWidget和CommonVideoManage类。</span></li></ol><p><strong><span>V20201108</span></strong></p><ol start='' ><li><span>轮询点模块增加批量生成功能。</span></li><li><span>录像机、摄像机、轮询点,增加导入导出功能。</span></li><li><span>ffmpeg内核增加读取帧回调超时识别可以快速识别掉线。</span></li></ol><p><strong><span>20200828</span></strong></p><ol start='' ><li><span>增加了云台控制过滤,没有打开的视频禁用云台。</span></li><li><span>linux上全屏BUG修复采用showfullscreen。</span></li><li><span>增加轮询点管理模块。</span></li><li><span>修正轮询的可能崩溃的BUG。</span></li></ol><p><strong><span>V20200730</span></strong></p><ol start='' ><li><span>系统设置增加了视频上传模块,用来将本地的视频文件传输到服务器,多线程并发。</span></li><li><span>视频监控内核新增MPV内核修正了其他内核的部分函数和处理。</span></li><li><span>海康内核进行大改动同时支持视频流和本地MP4文件播放自动分析切换。</span></li><li><span>海康内核增加回调处理,可以拿到每一张图片。</span></li><li><span>海康内核进行了linux上的实验可以正常播放。</span></li><li><span>ffmpeg内核增加保存到MP4。</span></li><li><span>本地文件回放vlc部分增加进度切换等。</span></li><li><span>悬浮条关闭按钮增加实际处理,之前只是打印消息。</span></li><li><span>改进了vlc和mpv的事件回调机制使其同时支持qt4+qt5。</span></li></ol><p><strong><span>V20200620</span></strong></p><ol start='' ><li><span>增加了opengl显示实时视频CPU占用极低。</span></li><li><span>增加了地图上设备点位置的调整。</span></li><li><span>设备点双击弹出实时视频预览。</span></li><li><span>增加GPS运动轨迹显示。</span></li><li><span>ffmpeg解码类增加了音频播放采用的QAudioOutput。</span></li></ol><p><strong><span>V20191105</span></strong></p><ol start='' ><li><span>增加云台控制功能,可以上下左右等八个方位控制云台,默认采用相对移动,云台中间按下表示复位。</span></li><li><span>系统设置增加码流类型选择,默认子码流,切换完自动应用。</span></li><li><span>云台控制增加速度功能,值越大,速度越快。</span></li><li><span>增加焦距控制,可放大缩小,速度也可控制。</span></li></ol><h2 id='1-用户登录退出'><span>1 用户登录退出</span></h2><h3 id='11-用户登录'><span>1.1 用户登录</span></h3><p><img src="snap/1-1-1.jpg" referrerpolicy="no-referrer"><span> </span><img src="snap/1-1-2.jpg" referrerpolicy="no-referrer">
<span>系统默认开启了自动登录,可以在系统设置中将自动登录按钮关闭即可,可以在用户登录界面勾选记住密码和自动登录复选框,如果勾选了记住密码,则下次弹出的登录窗体会自动把最后一次的密码填进去,如果勾选了自动登录,则直接以上一次的用户登录到系统。</span></p><h3 id='12-用户退出'><span>1.2 用户退出</span></h3><p><img src="snap/1-2-1.jpg" referrerpolicy="no-referrer">
<span>如果开启了自动登录机制,在单击右上角的关闭按钮,会弹出用户退出窗体,需要输入密码才能退出,也可以在代码中屏蔽掉自动登录的判断,这样任何时候关闭系统都会弹出窗体要求输入密码来退出。用户登录和退出内置了超级密码 a ,在记不住密码或者密码丢失的时候使用。</span></p><h2 id='2-主界面操作'><span>2 主界面操作</span></h2><p><img src="snap/2-0-1.jpg" referrerpolicy="no-referrer">
<img src="snap/2-0-2.jpg" referrerpolicy="no-referrer">
<span>主界面由左侧的设备列表、窗口信息,中间的视频监控画面,底部的画面切换和快捷操作按钮,右侧的云台控制及其他操作功能面板组成,其中左右两侧的面板可以拉伸宽度,上下面板之间也可以拉伸高度,每个带关闭按钮的面板都可以关闭。</span></p><p><strong><span>新增说明</span></strong>
<span>2021-5-8主界面改成了停靠窗体模式拓展性更强可以任意组合多种子模块模块可停靠悬浮在普通模式和全屏模式都有独立的布局文件不同的工作模式都可对应不同的布局文件。</span></p><h3 id='21-面板显示隐藏'><span>2.1 面板显示隐藏</span></h3><p><img src="snap/2-1-1.jpg" referrerpolicy="no-referrer"></p><p><img src="snap/2-1-2.jpg" referrerpolicy="no-referrer">
<span>左侧和右侧的面板可以通过单击面板右上角的关闭按钮来隐藏当隐藏一个面板以后剩余的面板会自动填充布局如果需要重新显示面板则在标题栏鼠标右键就可以对小面板进行显示和隐藏右上角的时间和CPU显示面板可以在系统设置中控制显示隐藏。系统会自动记住最后的布局比如显示的面板和宽高占比下次启动后自动应用。</span>
<strong><span>特别说明</span></strong></p><ol start='' ><li><span>在停靠窗体的标题栏鼠标右键也会弹出子窗体的开启菜单,复选框勾选表示显示,悬浮的窗体没有这个特性,一定要是嵌入在主界面中的子窗体标题栏才有。</span></li><li><span>如果是全屏模式,由于没有了标题栏,想要关闭模块的话,需要将其拖动到边缘嵌入主窗体,然后在标题栏鼠标右键菜单中关闭即可。</span></li></ol><h3 id='22-面板拖动'><span>2.2 面板拖动</span></h3><p><span>面板和面板之间有个分隔条,鼠标移到对应分隔条的地方,会变成可拉动的鼠标指针,此时可以上下左右拉动调整宽高,调整好以后会自动保存宽高比例,下次启动后自动应用最后的配置来显示。</span></p><p><img src="snap/2-2-1.jpg" referrerpolicy="no-referrer"></p><h3 id='23-视频播放'><span>2.3 视频播放</span></h3><p><img src="snap/2-3-1.jpg" referrerpolicy="no-referrer">
<span>视频播放同时支持多种方式:</span></p><ol start='' ><li><span>双击子节点播放单个摄像机,在当前选中通道处播放。</span></li><li><span>双击父节点播放整个录像机的摄像机,依次排列。</span></li><li><span>按住子节点拖曳到对应通道,播放摄像机。</span></li><li><span>本地文件直接拖曳到通道,自动播放本地文件。</span></li><li><span>启动后自动播放最后通道的视频信息。</span></li></ol><h3 id='24-视频截图'><span>2.4 视频截图</span></h3><p><span>在视频监控主界面通道鼠标右键会弹出右键菜单选择截图当前视频或者截图所有视频截图默认保存在可执行文件所在目录下的snap目录。视频面板底部工具栏也有截图按钮触发这个动作。</span>
<span>文件名格式Ch1_2020-07-30-13-41-24.png。</span></p><p><img src="snap/2-4-1.jpg" referrerpolicy="no-referrer"></p><h3 id='25-删除视频'><span>2.5 删除视频</span></h3><p><span>有多种方法可以删除视频:</span></p><ol start='' ><li><span>鼠标右键删除当前视频。</span></li><li><span>鼠标右键删除所有视频。</span></li><li><span>按住通道画面移出视频监控画面。</span></li><li><span>悬浮条关闭按钮。</span></li></ol><p><img src="snap/2-5-1.jpg" referrerpolicy="no-referrer"></p><h3 id='26-画面切换'><span>2.6 画面切换</span></h3><p><span>系统支持多画面切换全屏切换等包括1+4+6+8+9+13+16+25+36+64画面切换如果还需要增加更多的画面比如81+100等可以直接在源码中稍微修改即可。</span></p><ol start='' ><li><span>鼠标右键画面切换。</span></li><li><span>底部左侧画面切换缩略图。</span></li><li><span>快捷键alt+enter全屏。</span></li><li><span>快捷键esc退出全屏。</span></li></ol><p><img src="snap/2-6-1.jpg" referrerpolicy="no-referrer"></p><p><span>64画面效果图</span></p><p><img src="snap/2-6-2.jpg" referrerpolicy="no-referrer"></p><h3 id='27-声音调节'><span>2.7 声音调节</span></h3><p><img src="snap/2-7-1.jpg" referrerpolicy="no-referrer">
<span>在主界面画面栏右下角按下声音图标自动弹出声音调节面板失去焦点自动隐藏拉动声音滚动条来调节声音大小还有静音图标声音调节目前做的是一个界面效果并没有功能具体功能自己实现vlc内核和mpv内核已经封装了声音控制的接口函数。</span></p><h3 id='28-视频轮询'><span>2.8 视频轮询</span></h3><p><span>视频轮询默认4画面轮询如果需要其他画面可以在系统设置中设置即可。</span>
<span>有两种方式可以启动视频轮询功能:</span></p><ol start='' ><li><span>鼠标右键启动轮询。</span></li><li><span>画面右下角轮询按钮。</span></li></ol><p><img src="snap/2-8-1.jpg" referrerpolicy="no-referrer"></p><h3 id='29-通道交换'><span>2.9 通道交换</span></h3><p><img src="snap/2-9-1.jpg" referrerpolicy="no-referrer">
<span>通道交换功能很常用一般用户喜欢调整自己想要的通道显示到前面或者占据画面的更大部分比如6画面8画面的时候左侧有一个画面占据很大的位置一般这个用来显示重要性最高的实时视频如果需要通道交换则按住通道拖动到另外一个通道上面松开鼠标即可会立即应用瞬间切换这里切记不要移出视频画面外移出去表示删除。</span></p><h3 id='210-云台控制'><span>2.10 云台控制</span></h3><p><span>如果需要控制云台移动,先要选择对应的通道,边缘会高亮,进行云台控制的前提是该摄像机要是支持云台的摄像机,很多人以为啥摄像机都可以移动,这是错误的,如果摄像机不支持云台,这个功能就别玩了,玩不起,经常遇到一些人说怎么云台不能用了,一检查尼玛原来摄像机根本没有云台。</span></p><p><img src="snap/2-10-1.jpg" referrerpolicy="no-referrer">
<span>本系统云台控制走的是onvif协议没有使用私有协议上百家厂家的摄像机走私有协议会玩死人的所以统一采用onvif通用协议需要提前在系统设置中的摄像机管理搜索摄像机输入正确的onvif用户信息后一键获取到云台地址。</span></p><h3 id='211-设备控制'><span>2.11 设备控制</span></h3><p><img src="snap/2-11-1.jpg" referrerpolicy="no-referrer">
<span>设备控制部分目前可以获取和设置图片参数、手动校时、重启设备等上面那一堆复选框对应功能需要用厂家sdk去实现后期可能会增加一些onvif能够处理的功能。和云台控制操作一样操作前也是需要选中某个通道然后才是对选中的通道进行设备控制比如图片参数中的明亮度、对比度、饱和度。</span></p><h3 id='212-报警订阅'><span>2.12 报警订阅</span></h3><p><img src="snap/2-12-1.jpg" referrerpolicy="no-referrer">
<span>本系统默认支持海康摄像机的报警事件订阅默认已经订阅如果摄像机已经开启了报警事件的话默认一般是关闭的比如摄像机后面的开关量输入报警接口需要web页面进去设置开启。报警订阅走的是onvif协议默认测试过海康的摄像机其余摄像机有些没有测试成功后期会详细查下原因并改进会持续更新完善。</span></p><h3 id='213-悬浮条操作'><span>2.13 悬浮条操作</span></h3><p><span>本系统中将视频显示这块都封装成了一个控件,每个视频控件都有自己独立的悬浮条,悬浮条的位置可以自行修改两三行代码调整,默认悬浮条在顶部,自动拉伸填充显示,你也可以改成左侧右侧等位置显示,高度可调。悬浮条是一排按钮组成,具体按钮什么名称标识符和功能,可以自定义,控件的封装只是默认放了一排按钮,除了关闭按钮实现了功能外,其余都是信号的形式发出去的,具体操作由程序员本身根据不同的厂家来定义不同的功能。</span></p><p><img src="snap/2-13-1.jpg" referrerpolicy="no-referrer"></p><h3 id='214-标签设置'><span>2.14 标签设置</span></h3><p><img src="snap/2-14-1.jpg" referrerpolicy="no-referrer">
<span>视频控件已经将OSD标签封装好了默认提供两路OSD设置每个OSD都可以设置是否启用、位置、文字内容、文字颜色、图片、文字大小等这些设置都提供了友好的接口设置。</span></p><p><span>在frmvideopanel.cpp文件中有设置示例默认注释的参数含义如下</span></p><ol start='' ><li><span>设置标签可见setOSD1Visible</span></li><li><span>设置文字大小setOSD1FontSize</span></li><li><span>设置文本文字setOSD1Text</span></li><li><span>设置文字颜色setOSD1Color</span></li><li><span>设置标签格式setOSD1Format</span></li><li><span>设置标签位置setOSD1Position</span></li></ol><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.29412px; left: 8.02942px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">enum</span> <span class="cm-def">OSDFormat</span> {</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDFormat_Text</span> <span class="cm-operator">=</span> <span class="cm-number">0</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="cm-comment">//文本</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDFormat_Date</span> <span class="cm-operator">=</span> <span class="cm-number">1</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="cm-comment">//日期</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDFormat_Time</span> <span class="cm-operator">=</span> <span class="cm-number">2</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="cm-comment">//时间</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDFormat_DateTime</span> <span class="cm-operator">=</span> <span class="cm-number">3</span>, &nbsp; &nbsp; &nbsp; &nbsp; <span class="cm-comment">//日期时间</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDFormat_Image</span> <span class="cm-operator">=</span> <span class="cm-number">4</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="cm-comment">//图片</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">};</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text=""></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">enum</span> <span class="cm-def">OSDPosition</span> {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDPosition_Left_Top</span> <span class="cm-operator">=</span> <span class="cm-number">0</span>, &nbsp; &nbsp; &nbsp; <span class="cm-comment">//左上角</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDPosition_Left_Bottom</span> <span class="cm-operator">=</span> <span class="cm-number">1</span>, &nbsp; &nbsp;<span class="cm-comment">//左下角</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDPosition_Right_Top</span> <span class="cm-operator">=</span> <span class="cm-number">2</span>, &nbsp; &nbsp; &nbsp;<span class="cm-comment">//右上角</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">OSDPosition_Right_Bottom</span> <span class="cm-operator">=</span> <span class="cm-number">3</span> &nbsp; &nbsp;<span class="cm-comment">//右下角</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">};</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 316px;"></div><div class="CodeMirror-gutters" style="display: none; height: 316px;"></div></div></div></pre><h2 id='3-视频回放'><span>3 视频回放</span></h2><p><span>视频回放中有多个子模块,分别是不同的含义:</span></p><ol start='' ><li><span>本地回放:回放存储在本地电脑的视频文件。</span></li><li><span>远程回放通过sdk方式回放NVR上的存储录像暂未实现每个厂家不一样</span></li><li><span>设备播放通用的rtsp取流形式的播放实时视频和回放录像文件。</span></li><li><span>图片回放:查找对应文件夹下的所有通道图片,按照设定的间隔回复,类似视频效果,一般用在存储一堆图片序列的应用场景中。</span></li><li><span>视频上传:将查询的本地存储的视频文件上传到云端服务器。类似于将视频文件存储到服务器上,需要手动填写服务器地址和端口。</span></li></ol><h3 id='31-本地回放'><span>3.1 本地回放</span></h3><h4 id='311-视频查询'><span>3.1.1 视频查询</span></h4><p><img src="snap/3-1-1.jpg" referrerpolicy="no-referrer">
<span>本地回放模块主要用来回放存储在本地电脑上的视频,先从右侧选择要回放的通道,默认是所有通道,然后选择类型:存储视频还是报警视频,默认选择存储视频(目前也只有存储的视频,没有报警视频,报警视频的规则还没定好,一般都是买过去自己定义),然后选择要查询的开始时间和结束时间,单击查询按钮,会自动列出来,双击对应的视频文件名称就会播放,除了查询按钮,其余按钮均没有实现具体功能。</span></p><h4 id='312-存储规则'><span>3.1.2 存储规则</span></h4><p><img src="snap/3-1-2-1.jpg" referrerpolicy="no-referrer"></p><ol start='' ><li><span>默认存储主目录 video_normal</span></li><li><span>主目录下按照日期目录存放 比如 2021-04-07 2021-04-08</span></li><li><span>日期目录下是单个的视频文件 比如 Ch1_2021-04-07-14-08-11.mp4。</span></li><li><span>拓展功能可以存储对应的数据文件比如经纬度数据和视频文件一个目录 名称一样 拓展名可以是 txt</span></li></ol><h4 id='313-视频下载'><span>3.1.3 视频下载</span></h4><p><span>视频下载是将查询出来的视频文件,按照勾选了的文件保存到选择的目录中。</span></p><p><img src="snap/3-1-3-1.jpg" referrerpolicy="no-referrer"></p><h3 id='32-远程回放'><span>3.2 远程回放</span></h3><p><img src="snap/3-2-1.jpg" referrerpolicy="no-referrer">
<span>远程回放模块是用来通过sdk的形式回放远程NVR设备上的录像文件这个暂未实现本系统主要是为了兼容性和通用性通过具体sdk形式调用的处理都没有做破坏了移植性到了其他平台就没法使用了本系统sdk使用这块默认用的海康sdk作为示例。</span></p><h3 id='33-设备播放'><span>3.3 设备播放</span></h3><p><img src="snap/3-3-1.jpg" referrerpolicy="no-referrer">
<span>设备播放模块主要是通过rtsp视频流的形式来拉取实时视频和回放视频现在越来越多的NVR支持直接通过取流的形式来拉取实时视频流和回放视频这样使用起来很方便当然在拉取视频流的时候要传入用户信息防止非法获取现在越来越多的应用场景需要通过NVR来调取回放视频传统的SDK的方式非常累厂家太多而国标的形式太繁琐复杂于是rtsp形式的最简单的方式应运而生目前支持的厂家也越来越多每个厂家格式的规则不一样可以自行咨询厂家的规则本程序默认实现了海康、大华和深广的规则。</span></p><h3 id='34-图片回放'><span>3.4 图片回放</span></h3><h4 id='341-图片查询'><span>3.4.1 图片查询</span></h4><p><img src="snap/3-4-1-1.jpg" referrerpolicy="no-referrer">
<span>选择设备通道和时间范围,单击查询按钮,会将查询到的图片序列按照日期的形式作为一行添加到列表结果中,双击可以自动播放,可以调节播放速度。</span></p><h4 id='342-存储规则'><span>3.4.2 存储规则</span></h4><ol start='' ><li><span>默认存储主目录 image_normal</span></li><li><span>主目录下按照日期目录存放 比如 2021-04-07 2021-04-08</span></li><li><span>日期目录下是单个的图片文件 比如 Ch1_2021-04-07-14-08-11-222.jpg。</span></li><li><span>拓展功能可以存储对应的数据文件比如警情文字和图片文件一个目录 名称一样 拓展名可以是 txt 。</span></li></ol><p><img src="snap/3-4-2-1.jpg" referrerpolicy="no-referrer"></p><h4 id='343-图片下载'><span>3.4.3 图片下载</span></h4><p><img src="snap/3-4-3-1.jpg" referrerpolicy="no-referrer">
<span>将勾选的图片序列文件,导出到选择的目录。</span></p><h4 id='344-导出报告'><span>3.4.4 导出报告</span></h4><p><img src="snap/3-4-4-1.jpg" referrerpolicy="no-referrer">
<span>图文混排,可以自定义信息,封装好的类,传入图片队列,图片自适应等比例缩放显示,超过自动分页。</span></p><h3 id='35-视频上传'><span>3.5 视频上传</span></h3><p><span>视频上传功能主要用来将本地存储的视频文件也可以是其他文件通过网络传输默认TCP上传到其他地方比如服务器服务器上要运行接收文件的程序这样就相当于远程备份视频文件的功能视频文件可以勾选需要上传哪一些。</span></p><p><img src="snap/3-5-1.jpg" referrerpolicy="no-referrer"></p><h4 id='351-本地设置'><span>3.5.1 本地设置</span></h4><p><span>本地只需要在视频监控系统客户端上切换到视频上传页面然后选择要查询的日期范围单击查询会将视频文件查询出来显示在左边的表格中可以勾选要上传的视频文件右侧填写好服务器的IP和端口默认6000单击上传按钮会多线程的形式上传文件。</span></p><h4 id='352-远程设置'><span>3.5.2 远程设置</span></h4><p><span>远程需要放置文件传输工具,该工具完整源码如果购买了视频监控系统,可以赠送,该工具同时具备了发送端和接收端的功能,配套视频监控系统使用的是接收端,视频监控系统作为发送端,填好监听端口后,单击监听按钮,一旦有连接文件上传,会自动显示对应的接收进度,文件名称以上传的文件名为准。</span></p><h4 id='353-文件加密'><span>3.5.3 文件加密</span></h4><p><span>默认文件传输过程采用了加密机制,意味着传输的数据是加密后的数据,接收到以后根据设置的秘钥进行解密重新生成文件,防止文件传输过程中被拦截,可自定义加密规则。</span></p><h4 id='354-功能特点'><span>3.5.4 功能特点</span></h4><ol start='' ><li><span>多线程收发文件,支持加密传输。</span></li><li><span>接收端支持监听端口接收文件和主动连接服务器接收文件两种方式。</span></li><li><span>按照 文件开始符+文件大小+文件内容+文件结束符 逐个分包接收。</span></li><li><span>可对接收的加密过的文件包进行解密输出。</span></li><li><span>如果采用连接服务器方式接收文件可指定请求文件。</span></li><li><span>接收端请求文件的形式可以作为通用的程序升级方案。</span></li><li><span>进度条实时更新收发文件的进度。</span></li><li><span>发送端可设置每个包最很大小即切片分包数量。</span></li><li><span>发送端可对文件的每个包进行加密传输。</span></li><li><span>发送端支持对包进行合并发送。</span></li><li><span>可指定目录对客户端发来的请求文件进行搜索。</span></li><li><span>每个功能独立的一个类,接口清晰友好,使用方便。</span></li><li><span>支持任意Qt版本、任意系统、任意编译器。</span></li></ol><p>&nbsp;</p><h2 id='4-电子地图'><span>4 电子地图</span></h2><p><span>电子地图有多个子模块,分别不同的功能,在每个模块上,双击对应的摄像机,都可以弹出实时视频预览画面,支持多个画面同时打开,每个摄像机都一个画面窗体。</span></p><ol start='' ><li><span>图片地图:摄像机分布在平面图上。</span></li><li><span>离线地图:默认采用百度离线瓦片地图,本地使用。</span></li><li><span>在线地图:默认采用百度地图,需要联网使用。</span></li><li><span>路径规划:指定起始点和终点经纬度坐标,查询最优路径并绘制路线,提取路线坐标集合,动态模拟轨迹,比如机器人和飞机轨迹。</span></li></ol><h3 id='41-双击预览'><span>4.1 双击预览</span></h3><p><img src="snap/4-1-1.jpg" referrerpolicy="no-referrer"></p><h3 id='42-图片地图'><span>4.2 图片地图</span></h3><ol start='' ><li><span>图片地图的功能是为了方便直接提供图片文件然后摄像机点位可直接拖动更精确定位的场景图片可以提供鸟瞰图这种看起来更直观大气有3D的感觉。</span></li><li><span>图片文件存放在可执行文件下的map文件夹下如果需要增加或者删除可以直接文件操作即可比如复制新的图片文件到这个目录下即可。</span></li><li><span>具体摄像机对应哪张图片,可以在摄像机管理中设置,对应字段为地图,直接下拉选择对应的地图即可,默认选择无,就是该摄像机不属于任何地图。</span></li></ol><p><img src="snap/4-2-1.jpg" referrerpolicy="no-referrer"></p><h3 id='43-离线地图'><span>4.3 离线地图</span></h3><p><span>功能和在线地图完全一致唯一区别就是地图是离线的不需要联网。离线的地图需要自己准备好可以网上通过瓦片地图下载器来下载需要的地方的离线地图一般离线地图比较大他是一张张图片所以建议离线地图只下载自己需要的即可比如某个县的地图而不是所有的所有的起码有几十GB。</span></p><p><img src="snap/4-3-1.jpg" referrerpolicy="no-referrer"></p><p><strong><span>使用说明</span></strong>
<span>默认系统提供的是上海市的地图,下载地址在下面文章中,会自动更新地址:</span>
<a href='https://blog.csdn.net/feiyangqingyun/article/details/104005917' target='_blank' class='url'>https://blog.csdn.net/feiyangqingyun/article/details/104005917</a>
<span>请下载同目录下的bin_map_tiles.zip压缩包解压到config目录下最后config文件夹下会多出来tiles tiles_hybrid两个文件夹。</span></p><h3 id='44-在线地图'><span>4.4 在线地图</span></h3><p><span>在摄像机管理的界面,可以添加经纬度信息,这样就可以在地图上显示对应的摄像机点位信息,如果发现位置不对,可以在右侧先选择摄像机设备,然后鼠标单击新的位置,右侧目标经度、目标纬度信息会自动更新,然后再单击更新经纬度值则会更新当前下拉选择的设备的经纬度信息,也可以在摄像机管理界面手动填入进行修改。</span>
<span>在右侧还有模拟运动轨迹、开始显示轨迹两个按钮,有可能后期还会增加其他功能,是为了演示如何在地图上实现地图的相关功能,开始显示轨迹采用的定时器来生成轨迹点数据,动态模拟运动轨迹,可以单击显示设备位置按钮还原最初的设备点位图。</span></p><p><img src="snap/4-4-1.jpg" referrerpolicy="no-referrer"></p><p><strong><span>功能特点</span></strong></p><ol start='' ><li><span>同时支持在线地图和离线地图两种模式。</span></li><li><span>同时支持webkit内核、webengine内核、IE内核。</span></li><li><span>支持设置多个标注点,信息包括名称、地址、经纬度。</span></li><li><span>可设置地图是否可单击、拖动、鼠标滚轮缩放。</span></li><li><span>可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。</span></li><li><span>可设置地图缩放比例和级别,缩略图、比例尺、路况信息等控件的可见。</span></li><li><span>支持地图交互,比如鼠标按下获取对应位置的经纬度。</span></li><li><span>支持查询路线,可设置起点位置、终点位置、路线模式、路线方式、路线方案(最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速)。</span></li><li><span>可显示点线面工具,可直接在地图上划线、点、矩形、圆形等。</span></li><li><span>可设置行政区划指定某个城市区域绘制图层在线地图自动输出行政区划边界点集合到js文件给离线地图使用。</span></li><li><span>可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。</span></li><li><span>函数接口友好和统一,使用简单方便,就一个类。</span></li><li><span>支持js动态交互添加点、删除点、清空点、重置点不需要刷新页面。</span></li><li><span>支持任意Qt版本、任意系统、任意编译器。</span></li></ol><h3 id='45-路径规划'><span>4.5 路径规划</span></h3><p><strong><span>基本步骤</span></strong></p><ol start='' ><li><span>输入起点坐标和终点坐标,也可以勾选地图选点,开启后直接在左侧的地图界面鼠标按下自动识别对应的经纬度坐标填入,单选框勾选的起点则填入起点坐标输入框中,勾选的终点就填入终点坐标输入框中。</span></li><li><span>选择路线方式,可选公交、驾车、步行、骑行等方式,默认选择步行。</span></li><li><span>选择路线方案,可选最少时间、最短距离、避开高速等。</span></li><li><span>输入关键点数一般查询返回的路径的经纬度坐标点数非常密集可能非常多我们需要根据输入的关键点数来过滤比如输入30表示从所有经纬度数据中平均提取出来30个数据就行。点数合计查询路线后自动返回所有经纬度坐标的数据个数。</span></li><li><span>单击查询路线,自动返回对应路径的所有经纬度坐标。</span></li><li><span>单击帅选数据,按照填入的关键点数进行数据帅选,在下方可以看到原始数据和最终数据,选中某个数据,自动在左侧生成点预览对应的位置。</span></li><li><span>单击模拟轨迹,会启动定时器,从第一个数据点开始,自动移动设备比如机器人、飞行器等,查看整个轨迹点路径是否正确。</span></li></ol><p><img src="snap/4-5-1.jpg" referrerpolicy="no-referrer"></p><p><img src="snap/4-5-2.jpg" referrerpolicy="no-referrer"><span> </span><img src="snap/4-5-3.jpg" referrerpolicy="no-referrer"><span> </span><img src="snap/4-5-4.jpg" referrerpolicy="no-referrer"></p><h2 id='5-日志查询'><span>5 日志查询</span></h2><h3 id='51-本地日志'><span>5.1 本地日志</span></h3><p><img src="snap/5-1-1.jpg" referrerpolicy="no-referrer">
<span> </span><span>本地日志存放的是本系统的操作日志,比如用户登录退出、记录删除、设备报警等操作,都会有对应的记录存放的数据库,可以在这里选择时间段和日志类型进行查询。查询后的日志记录可以翻页查看,还可以直接支持指定页码跳转,(此翻页组件超级牛逼,外观和功能分离,自动计算页码切换导航,具体可参见对应类的头文件功能描述),每页显示多少条记录在系统设置中可以设置。</span></p><h4 id='511-查询记录'><span>5.1.1 查询记录</span></h4><p><span>可以按照多条件进行查询记录,比如选择设备通道,选择日志的类型(用户操作、运行日志、设备日志、报警日志)、时间范围。</span>
<span>在查询记录的时候如果勾选了前面的复选框则表示启用该选择条件进行查询没有勾选就算后面选择了类型等也是按照where 1=1 条件查询的。</span>
<span>查询后的记录会自动分页显示,而不是一次性显示,可以单击底部的翻页按钮进行翻页查看记录,可以快速切换到第一页、末一页、上一页、下一页、显示的页码切换、指定的页码切换。</span></p><h4 id='512-打印记录'><span>5.1.2 打印记录</span></h4><p><img src="snap/5-1-2-1.jpg" referrerpolicy="no-referrer">
<span>单击打印按钮,会将当前查询的记录打印出来,自动分页。打印前会弹出打印预览对话框,可以最后在这里调整边距、纸张等设置参数。</span></p><h4 id='513-导出记录到xls'><span>5.1.3 导出记录到xls</span></h4><p><span>单击XLS按钮可以将表格中的内容导出到excel表格独创的excel导出数据算法极速导出支持任意系统无依赖。</span></p><p><img src="snap/5-1-3-1.jpg" referrerpolicy="no-referrer"></p><h4 id='514-导出记录到pdf'><span>5.1.4 导出记录到pdf</span></h4><p><img src="snap/5-1-4-1.jpg" referrerpolicy="no-referrer"></p><h4 id='515-删除记录'><span>5.1.5 删除记录</span></h4><p><img src="snap/5-1-5-1.jpg" referrerpolicy="no-referrer">
<span>单击删除按钮,会弹出时间范围选择对话框,选择要删除的记录的开始时间和结束时间,单击确定,会将该时间段内的记录全部删除,结束时间必须大于开始时间。</span></p><h4 id='516-清空记录'><span>5.1.6 清空记录</span></h4><p><span>单击清空按钮会先弹出询问框提示是否需要清空数据,单击确定则自动清空所有的记录,清空后不能恢复。</span></p><p><img src="snap/5-1-6-1.jpg" referrerpolicy="no-referrer"><span> </span><img src="snap/5-1-6-2.jpg" referrerpolicy="no-referrer"></p><h3 id='52-设备日志'><span>5.2 设备日志</span></h3><p><img src="snap/5-2-1.jpg" referrerpolicy="no-referrer">
<span>设备日志是指直接通过sdk协议远程从NVR设备上拉取日志记录到本地显示其余功能和本地日志一致此功能未实现。</span></p><h2 id='6-系统设置'><span>6 系统设置</span></h2><h3 id='61-系统设置'><span>6.1 系统设置</span></h3><p><span>系统设置主界面如下图:</span></p><p><img src="snap/6-1-1.jpg" referrerpolicy="no-referrer"></p><h4 id='611-基本设置'><span>6.1.1 基本设置</span></h4><p><img src="snap/6-1-1-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong></p><ol start='' ><li><span>开机运行:开启以后自动随着系统启动运行,默认开启。</span></li><li><span>自动登录:开启以后会自动以最后登录的用户信息登录到系统,默认关闭。</span></li><li><span>记住密码:开启以后会自动填入最后登录的用户信息到登录窗体,默认关闭。</span></li><li><span>中文标题:软件左上角标题栏的中文标题,改动立即应用。</span></li><li><span>英文标题:软件左上角标题栏的英文标题,改动立即应用。</span></li><li><span>版权所有:当前软件版权所有的公司,目前没有显示在哪里,备用。</span></li><li><span>全屏模式:开启以后,最大化显示自动全屏显示而不是最大化显示,默认关闭。</span></li><li><span>全屏适应开启了以后会自动采用上移一个像素的办法解决opengl的BUG。</span></li><li><span>软件图标自动从logo文件夹读取可以自行选择对应的logo文件。</span></li><li><span>界面样式系统自带17套皮肤可以在这里自动换肤默认视频黑。</span></li><li><span>工作模式:默认视频监控,可选机器人监控、无人机监控等。</span></li><li><span>导航样式:用于选择顶部导航栏和左侧导航栏的样式,上侧+左侧表示顶部导航栏上侧样式(图标在上面,文字在下面),左侧导航栏左侧样式(图标在左侧,文字在右侧)。</span></li><li><span>弹框时间右下角弹出提示信息自动关闭时间0秒表示常驻不关闭。</span></li><li><span>报警声音0表示不启用其余表示报警后播放的声音次数。</span></li><li><span>鼠标隐藏:主界面多久鼠标没有操作过会自动隐藏鼠标指针,一般在全屏轮询的时候需要设置,效果会更好。</span></li><li><span>自动全屏经过多久以后鼠标没有操作过自动全屏0表示不启用。</span></li><li><span>透明度值:停靠窗体的透明度值,可调节,动态应用。</span></li></ol><h4 id='612-视频参数'><span>6.1.2 视频参数</span></h4><p><img src="snap/6-1-2-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong></p><ol start='' ><li><span>保存视频开启以后打开视频自动存储录像文件目录在可执行文件video_normal。</span></li><li><span>存储间隔录像文件按照什么规则存储视频0分钟表示只存储到单个文件。</span></li><li><span>视频边框:视频控件的边框的宽度,值越大边框越粗。</span></li><li><span>报警视频开启以后保存报警视频到可执行文件video_alarm暂未启用。</span></li><li><span>硬件加速当前视频内核采用何种硬件加速方式默认none表示不启用硬件加速常用的所有qsv、dxva2、d3d11va建议用dxva2或者d3d11va具体根据电脑是否支持定</span></li><li><span>通信方式视频流采用何种通信方式默认TCP可靠连接不会丢包缺点就是慢可选UDP不可靠连接容易丢包但是速度快</span></li><li><span>视频回调是否采用回调的形式来解码显示视频比如vlc内核和海康内核都支持回调。</span></li><li><span>码流类型:双击摄像机以什么码流地址加载实时视频,默认子码流。</span></li><li><span>解码方式ffmpeg内核有用可选速度优先、质量优先、均衡处理。</span></li><li><span>播放音频:开启以后可以播放声音,有时候不需要声音的时候可以关闭,节省资源。</span></li><li><span>图片拉伸:默认开启,通道画面按照填充拉伸显示,不开启的话则按照等比例缩放。</span></li><li><span>打开间隔软件启动后挨个加载打开视频的间隔默认1秒钟。</span></li><li><span>重连间隔软件多久检测一次摄像机是否掉线默认10秒钟。</span></li><li><span>事件订阅开启以后会用onvif的机制订阅报警事件。</span></li><li><span>自动校时:开启后摄像机上线立即同步本地时间到摄像机。</span></li></ol><h4 id='613-数据库设置'><span>6.1.3 数据库设置</span></h4><p><img src="snap/6-1-3-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong>
<span>默认提供了视频监控系统的数据库脚本文件拓展名sql结尾的文件单击初始化数据按钮可以对整个数据库进行新建和重置相当于恢复出厂。</span>
<span>系统支持多种数据库默认sqliteQt内置的数据库无需安装可选mysql、postgresql等具体需要Qt对应的数据库插件支持亲测下面的数据库。</span>
<span>除了sqlite数据库外其余数据库都需要输入数据库名称、主机地址、通信端口、用户名称、用户密码信息输入好以后可以单击连接测试按钮测试下是否正常。默认提供的是mysql的动态库libmysql.dll需要放到可执行文件同一目录严格区分32位和64位的动态库。</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.29412px; left: 8.02942px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">//数据库类型枚举</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">enum</span> <span class="cm-def">DbType</span> {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_ODBC</span> <span class="cm-operator">=</span> <span class="cm-number">0</span>, &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//odbc数据源</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_Sqlite</span> <span class="cm-operator">=</span> <span class="cm-number">1</span>, &nbsp; &nbsp; &nbsp;<span class="cm-comment">//sqlite数据库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_MySql</span> <span class="cm-operator">=</span> <span class="cm-number">2</span>, &nbsp; &nbsp; &nbsp; <span class="cm-comment">//mysql数据库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_PostgreSQL</span> <span class="cm-operator">=</span> <span class="cm-number">3</span>, &nbsp;<span class="cm-comment">//postgresql数据库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_SqlServer</span> <span class="cm-operator">=</span> <span class="cm-number">4</span>, &nbsp; <span class="cm-comment">//sqlserver数据库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_Oracle</span> <span class="cm-operator">=</span> <span class="cm-number">5</span>, &nbsp; &nbsp; &nbsp;<span class="cm-comment">//oracle数据库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_KingBase</span> <span class="cm-operator">=</span> <span class="cm-number">6</span>, &nbsp; &nbsp;<span class="cm-comment">//人大金仓数据库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">DbType_Other</span> <span class="cm-operator">=</span> <span class="cm-number">255</span> &nbsp; &nbsp; &nbsp;<span class="cm-comment">//其他数据库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">};</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 248px;"></div><div class="CodeMirror-gutters" style="display: none; height: 248px;"></div></div></div></pre><h4 id='614-地图配置'><span>6.1.4 地图配置</span></h4><p><img src="snap/6-1-4-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong></p><ol start='' ><li><span>地图秘钥:对应百度地图的秘钥,默认内置的作者的秘钥,很多软件系统都用的这个秘钥,用户数较多,可能有并发限制,为了不影响体验,强烈建议改成自己的,可以自行去官网申请,免费。</span></li><li><span>地图中心:默认地图的中心点坐标。</span></li><li><span>地图级别:默认地图打开以后的缩放级别。</span></li></ol><h4 id='615-功能激活'><span>6.1.5 功能激活</span></h4><p><img src="snap/6-1-5-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong>
<span>勾选则表示启用,可以对各种分屏进行功能激活,需要重启应用,没有勾选的,不会显示对应的菜单切换和分屏快捷按钮。多个子界面模块也可以选择显示或者隐藏,以便将不需要的模块隐藏掉,碍眼。</span></p><h4 id='616-颜色配置'><span>6.1.6 颜色配置</span></h4><p><img src="snap/6-1-6-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong>
<span>可以设置不同的场景不同的颜色,比如正常的系统消息显示白色,异常消息红色。</span></p><h4 id='617-串口配置'><span>6.1.7 串口配置</span></h4><p><img src="snap/6-1-7-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong>
<span>系统中可能用到了多个串口通信,可以在这里选择对应的串口号和波特率。</span></p><h4 id='618-网络配置'><span>6.1.8 网络配置</span></h4><p><img src="snap/6-1-8-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong>
<span>系统中可能用到多种网络通信比如软件主动连接服务器需要填写TCP地址和端口也可能软件作为服务端填写TCP或者UDP监听端口。</span></p><p>&nbsp;</p><h3 id='62-录像机管理'><span>6.2 录像机管理</span></h3><p><span>本系统所用的录像机信息,并没有实际的作用,也就是不一定要填写实际的录像机信息,留作备用后期使用,目前仅仅是作为生成设备的树状列表使用(类似于区域),如果一个录像机都没有填写,则会自动生成一个默认的录像机信息。</span></p><p><img src="snap/6-2-1.jpg" referrerpolicy="no-referrer">
<strong><span>字段说明</span></strong></p><ol start='' ><li><span>设备编号:录像机的编号,唯一字段。</span></li><li><span>设备名称:录像机的别名,建议不要重复。</span></li><li><span>设备类型:录像机的厂家类型,可选海康、大华、宇视、其他等。</span></li><li><span>设备地址录像机的IP地址。</span></li><li><span>用户姓名:录像机的登录用户名称。</span></li><li><span>用户密码:录像机的登录用户密码。</span></li><li><span>启用状态:录像机设备是否启用。</span></li><li><span>安装位置:录像机的安装位置。</span></li></ol><h4 id='621-录像机添加'><span>6.2.1 录像机添加</span></h4><p><span>单击添加按钮,会自动规则生成默认的信息,直接表格中修改即可,修改好以后单击保存按钮保存所有的信息。</span></p><h4 id='622-录像机删除'><span>6.2.2 录像机删除</span></h4><p><span>如果要删除某个设备,需要先选中该设备,然后单击删除按钮,删除后会自动保存。</span></p><h4 id='623-录像机清空'><span>6.2.3 录像机清空</span></h4><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.29412px; left: 8.02942px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 23px;"></div><div class="CodeMirror-gutters" style="display: none; height: 23px;"></div></div></div></pre><h4 id='624-录像机信息导入'><span>6.2.4 录像机信息导入</span></h4><p><span>单击导入按钮可以选择之前导出的csv格式的文件导入数据。</span></p><h4 id='625-录像机信息导出'><span>6.2.5 录像机信息导出</span></h4><p><span>单击导出按钮将表格数据导出到csv格式的文件用户可以打开文件编辑然后再次导入这样可以作为简易的备份机制使用也可将繁琐的基础数据录入交给小姑娘去做。</span></p><h4 id='626-录像机信息打印'><span>6.2.6 录像机信息打印</span></h4><p><span>单击打印按钮可以将表格中的内容打印出来,打印前会弹出打印预览界面,可以自行做边距的调整等,可以查看等待打印的内容,翻页切换。</span></p><h4 id='627-导出到excel'><span>6.2.7 导出到Excel</span></h4><p><span>单击导出按钮可以将表格中的内容导出到excel表格独创的excel导出数据算法极速导出支持任意系统无依赖。</span></p><p><img src="snap/6-2-7-1.jpg" referrerpolicy="no-referrer">
<img src="snap/6-2-7-2.jpg" referrerpolicy="no-referrer"></p><h3 id='63-摄像机管理'><span>6.3 摄像机管理</span></h3><p><span>摄像机表信息是整个系统中最核心的表这里管理的所有的摄像机信息并不是所有的字段都显示出来了比如onvif地址、云台地址等都是隐藏的因为无需添加更改需要搜索自动添加的。</span></p><p><img src="snap/6-3-1.jpg" referrerpolicy="no-referrer">
<strong><span>字段说明</span></strong></p><ol start='' ><li><span>设备编号:摄像机的唯一编号。</span></li><li><span>设备名称:摄像机的别名,建议不要重复。</span></li><li><span>录 像 机:该摄像机对应所属的录像机,随便选择一个就行。</span></li><li><span>设备厂家摄像机的厂家类型通过onvif搜索会自动有厂家信息没有的就选择其他。</span></li><li><span>主码流地址:摄像机的主码流地址。</span></li><li><span>子码流地址:摄像机的子码流地址。</span></li><li><span>经 纬 度:摄像机的经纬度信息,用来地图上显示位置,中间用 | 隔开。</span></li><li><span>背景地图:摄像机对应的平面地图,下拉选择。</span></li><li><span>用户姓名:摄像机登录的用户名称。</span></li><li><span>用户密码:摄像机登录的用户密码。</span></li><li><span>启用状态:摄像机是否启用。</span></li><li><span>安装位置:摄像机的安装位置。</span></li></ol><h4 id='631-摄像机添加'><span>6.3.1 摄像机添加</span></h4><p><span>单击添加按钮,会自动规则生成默认的信息,直接表格中修改即可,修改好以后单击保存按钮保存所有的信息。</span></p><h4 id='632-摄像机删除'><span>6.3.2 摄像机删除</span></h4><p><span>如果要删除某个设备,需要先选中该设备,然后单击删除按钮,删除后会自动保存。</span></p><h4 id='633-摄像机清空'><span>6.3.3 摄像机清空</span></h4><p><span>单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。</span></p><h4 id='634-摄像机信息导入'><span>6.3.4 摄像机信息导入</span></h4><p><span>单击导入按钮可以选择之前导出的csv格式的文件导入数据。</span></p><h4 id='635-摄像机信息导出'><span>6.3.5 摄像机信息导出</span></h4><p><span>单击导出按钮将表格数据导出到csv格式的文件用户可以打开文件编辑然后再次导入这样可以作为简易的备份机制使用也可将繁琐的基础数据录入交给小姑娘去做。</span></p><h4 id='636-摄像机信息打印'><span>6.3.6 摄像机信息打印</span></h4><p><span>单击打印按钮可以将表格中的内容打印出来,打印前会弹出打印预览界面,可以自行做边距的调整等,可以查看等待打印的内容,翻页切换。</span></p><h4 id='637-导出到excel'><span>6.3.7 导出到Excel</span></h4><p><span>单击导出按钮可以将表格中的内容导出到excel表格独创的excel导出数据算法极速导出支持任意系统无依赖。</span></p><p><img src="snap/6-3-7-1.jpg" referrerpolicy="no-referrer">
<img src="snap/6-3-7-2.jpg" referrerpolicy="no-referrer"></p><h4 id='638-设备搜索'><span>6.3.8 设备搜索</span></h4><p><img src="snap/6-3-8-1.jpg" referrerpolicy="no-referrer">
<span>如果摄像机已经添加过,则搜索出来的摄像机信息行背后颜色突出显示并且不可选中。</span></p><p><img src="snap/6-3-8-2.jpg" referrerpolicy="no-referrer">
<strong><span>基本步骤</span></strong></p><ol start='' ><li><span>第一步:单击广播搜索按钮,搜索到的设备会显示在左侧表格中。</span></li><li><span>第二步输入onvif用户名和密码注意是onvif的用户信息一个摄像机可能有多种用户比如登录用户远程用户onvif用户务必记得要用onvif用户信息可参阅说明书的末尾海康大华的onvif设置。</span></li><li><span>第三步单击获取所有会自动以填写的onvif用户信息去拉取具体摄像机的码流地址、云台地址等信息可以拉动底部的横向滚动条查看具体是否获取到信息。</span></li><li><span>第四步:单击添加选中按钮将所有勾选了复选框的设备添加到摄像机信息表中。</span></li></ol><p><strong><span>特别说明</span></strong></p><ol start='' ><li><span>如果没有码流地址,是添加不了的,必须有码流地址才能添加。</span></li><li><span>一般一个项目上的摄像机都是同一个品牌的onvif用户信息也都一样所以单击获取所有可以把所有摄像机的信息获取到。</span></li><li><span>可以填入不同的onvif用户信息单击获取当前按钮来指定摄像机获取onvif信息。</span></li><li><span>如果有些设备不支持广播只支持单播比如不是同一网段的设备但是路由器设置过是通的则指定设备右侧填写好IP地址或者onvif地址再单击单播搜索即可。</span></li><li><span>一台电脑可能多个网卡和IP网段可以选择不同的网卡进行搜索。</span></li><li><span>录像机信息和摄像机信息的更改,是自动应用的,无需重启。</span></li><li><span>搜索后的设备信息自动添加到表格中按照IP地址升序排序支持跨网段排序自动将IP地址转为quint32整型进行排序而不是取IP地址末尾。</span></li></ol><p><img src="snap/6-3-8-3.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong></p><ol start='' ><li><span>用户姓名onvif用户的名称默认admin。</span></li><li><span>用户密码onvif用户的密码默认admin。</span></li><li><span>选择网卡选择对应电脑的网卡IP可能有多个网段onvif只能同一个网段。</span></li><li><span>指定设备对指定的IP地址或者onvif地址进行onvif搜索。</span></li><li><span>过滤设备对返回的onvif地址进行过滤一种厂家的类别的设备地址格式一样。</span></li><li><span>搜索间隔默认onvif搜索指令有好几种会重发几次指定发送的间隔。</span></li><li><span>搜索策略默认自动清空每次都重新添加搜索到的设备如果选择设备累加则多次搜索后只会将新增加的设备加到设备列表这个非常有用在很多设备现场建议用设备累加策略而不是自动清空因为onvif协议是udp协议在大量数据的情况下会导致丢包需要多次搜索取最终的设备集合。</span></li><li><span>广播搜索广播搜索指定网卡的所有onvif设备。</span></li><li><span>单播搜索:对指定设备进行单个搜索。</span></li><li><span>获取所有按照当前填入的用户姓名和密码填充到onvif请求鉴权中对所有搜索的设备进行媒体地址的获取、云台控制地址的获取、视频流地址的获取等。</span></li><li><span>获取当前很多时候并不是所有的设备onvif用户信息一样对于不一样的可以先选中设备所在行然后输入不同的用户信息单击获取当前即可会对当前选中的设备重新获取onvif信息。</span></li><li><span>添加选中:搜索到的设备前面都有个复选框,单击添加选中以后会对所有打钩的设备批量添加到摄像机信息表中,会自动过滤已经添加过的设备以及没有视频流地址的设备。</span></li><li><span>添加当前:对应获取当前,一般来说单个添加用户信息不一样的设备,因为批量添加不了,他的信息需要单独获取。</span></li></ol><p>&nbsp;</p><h3 id='64-轮询配置'><span>6.4 轮询配置</span></h3><p><img src="snap/6-4-1.jpg" referrerpolicy="no-referrer">
<span>轮询点管理界面,上侧是轮询点信息表,可以直接添加、删除、修改、清空轮询点信息,下侧是摄像机信息表,会自动加载,当摄像机信息变动后,这里会自动加载最新的数据。右下角是批量生成轮询点和轮询分组管理。</span></p><h4 id='641-轮询点添加'><span>6.4.1 轮询点添加</span></h4><p><span>轮询点的添加有三种方式:手动添加、单个添加、批量添加。</span>
<span>允许重复添加,没有过滤机制。</span></p><ol start='' ><li><span>手动添加:单击添加按钮,在右侧轮询信息表格中自动生成默认轮询点信息,手动输入和修改信息然后单击保存按钮即可。</span></li><li><span>单个添加:左侧摄像机信息表中选中一行,单击添加当前按钮,会将选中的摄像机信息添加到右侧轮询点信息中,自动保存。</span></li><li><span>批量添加:单击添加所有按钮,会将所有摄像机信息添加到右侧轮询点信息中,自动保存。</span></li></ol><h4 id='642-轮询点删除'><span>6.4.2 轮询点删除</span></h4><p><span>如果要删除某个轮询点,需要先选中该轮询点,然后单击删除按钮,删除后会自动保存。</span></p><h4 id='643-轮询点清空'><span>6.4.3 轮询点清空</span></h4><p><span>单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。</span></p><h4 id='644-轮询点信息导入'><span>6.4.4 轮询点信息导入</span></h4><p><span>单击导入按钮可以选择之前导出的csv格式的文件导入数据。</span></p><h4 id='645-轮询点信息导出'><span>6.4.5 轮询点信息导出</span></h4><p><span>单击导出按钮将表格数据导出到csv格式的文件用户可以打开文件编辑然后再次导入这样可以作为简易的备份机制使用也可将繁琐的基础数据录入交给小姑娘去做。</span></p><h4 id='645-轮询点信息打印'><span>6.4.5 轮询点信息打印</span></h4><p><span>单击打印按钮可以将表格中的内容打印出来,打印前会弹出打印预览界面,可以自行做边距的调整等,可以查看等待打印的内容,翻页切换。</span></p><h4 id='647-导出到excel'><span>6.4.7 导出到Excel</span></h4><p><span>单击导出按钮可以将表格中的内容导出到excel表格独创的excel导出数据算法极速导出支持任意系统无依赖。</span></p><h4 id='648-参数设置'><span>6.4.8 参数设置</span></h4><p><img src="snap/6-4-8-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong></p><ol start='' ><li><span>自动轮询:开启以后,启动软件后自动轮询。</span></li><li><span>轮询间隔:画面切换的间隔,单位秒,建议时间长一点。</span></li><li><span>轮询画面轮询的画面数可选1画面、4画面、9画面、16画面。</span></li><li><span>码流类型默认子码流超过4画面建议子码流。</span></li></ol><h4 id='649-批量生成'><span>6.4.9 批量生成</span></h4><p><img src="snap/6-4-9-1.jpg" referrerpolicy="no-referrer"><span> </span><img src="snap/6-4-9-2.jpg" referrerpolicy="no-referrer"><span> </span><img src="snap/6-4-9-3.jpg" referrerpolicy="no-referrer">
<span>轮询表信息可以通过已添加的摄像机信息表选中添加,也可以自定义规则批量生成视频流地址添加,这种应用场景非常多,比如现场是某一种品牌的摄像机,视频流格式固定,只需要设置好主码流子码流的视频流格式,便可批量生成。</span>
<strong><span>参数说明</span></strong></p><ol start='' ><li><span>生成数量: 需要批量生成多少个。</span></li><li><span>起始地址如果选择的是文件则填写对应的数字其他则填写IP地址。</span></li><li><span>地址格式:可选各种厂家类型,还可选择文件,这个用于测试软件非常有用。</span></li></ol><h4 id='6410-分组设置'><span>6.4.10 分组设置</span></h4><p><img src="snap/6-4-10-1.jpg" referrerpolicy="no-referrer">
<strong><span>参数说明</span></strong>
<span>可添加、删除、修改、清空轮询分组名称,相当于轮询预案。</span></p><p>&nbsp;</p><h3 id='65-用户管理'><span>6.5 用户管理</span></h3><p><span>用户管理是后面增加的一个模块,用于设置不同的用户不同的类型+权限可以细分到每个模块的权限勾选表示具有该权限内置了7种权限选择后期还可以在此基础上增加其他权限等。</span></p><p><img src="snap/6-5-1.jpg" referrerpolicy="no-referrer"></p><h4 id='651-用户添加'><span>6.5.1 用户添加</span></h4><p><span>单击添加按钮,会自动规则生成默认的信息,直接表格中修改即可,修改好以后单击保存按钮保存所有的信息。</span></p><h4 id='652-用户删除'><span>6.5.2 用户删除</span></h4><p><span>如果要删除某个用户需要先选中该用户然后单击删除按钮删除后会自动保存。不允许删除内置的admin用户。</span></p><h4 id='653-用户清空'><span>6.5.3 用户清空</span></h4><p><span>单击清空按钮会对整个表进行清空操作,清空后数据不能恢复,慎用。</span></p><h4 id='654-用户信息导入'><span>6.5.4 用户信息导入</span></h4><p><span>单击导入按钮可以选择之前导出的csv格式的文件导入数据。</span></p><h4 id='655-用户信息导出'><span>6.5.5 用户信息导出</span></h4><p><span>单击导出按钮将表格数据导出到csv格式的文件用户可以打开文件编辑然后再次导入这样可以作为简易的备份机制使用也可将繁琐的基础数据录入交给小姑娘去做。</span></p><h4 id='656-用户信息打印'><span>6.5.6 用户信息打印</span></h4><p><span>单击打印按钮可以将表格中的内容打印出来,打印前会弹出打印预览界面,可以自行做边距的调整等,可以查看等待打印的内容,翻页切换。</span></p><p><img src="snap/6-5-6-1.jpg" referrerpolicy="no-referrer"></p><h4 id='657-导出到excel'><span>6.5.7 导出到Excel</span></h4><p><span>单击导出按钮可以将表格中的内容导出到excel表格独创的excel导出数据算法极速导出支持任意系统无依赖。</span></p><p><img src="snap/6-5-7-1.jpg" referrerpolicy="no-referrer"></p><h4 id='658-权限验证'><span>6.5.8 权限验证</span></h4><p><span>假设设置了用户没有退出系统和电子地图的权限,则关闭系统的时候会弹出错误信息提示当前用户没有权限。</span></p><p><img src="snap/6-5-8-1.jpg" referrerpolicy="no-referrer"><span> </span><img src="snap/6-5-8-2.jpg" referrerpolicy="no-referrer"></p><p>&nbsp;</p><h2 id='7-简易使用步骤'><span>7 简易使用步骤</span></h2><h3 id='71-添加摄像机'><span>7.1 添加摄像机</span></h3><ol start='' ><li><span>切换到系统设置-》摄像机管理,单击添加,输入码流地址,单击保存。</span></li><li><span>在不知道主码流和子码流是啥的情况下,两个地方填一样的,其余默认即可。</span></li><li><span>本地文件格式g:/mp4/1.mp4</span></li><li><span>USB摄像机默认ffmpeg内核为 video=USB2.0 PC CAMERA具体要看设备名 如果是vlc内核则为 dshow://:dshow-vdev=&#39;Default&#39;</span></li><li><span>摄像机视频流直接填入rtsp、rtmp、http的视频流地址该地址可以先用vlc播放器或者potplay等播放器先试试是否能正常播放不能的话就别添加了添加了也没卵用别费力气了。</span></li></ol><h3 id='72-视频播放'><span>7.2 视频播放</span></h3><p><span>切换到视频监控主界面,左侧设备列表,双击摄像机,自动通道播放,双击录像机则整个录像机下面的摄像机全部加载。</span></p><h3 id='73-云台控制'><span>7.3 云台控制</span></h3><p><span>云台控制的前提是摄像机是通过onvif搜索的形式添加的不然没有云台地址没法进行云台控制当然也必须要求摄像机带云台不带云台的摄像机是不能进行云台控制的。</span>
<span>先选中要进行云台控制的摄像机通道,边缘高亮,然后再单击右侧的云台控件,可以上下左右等移动,变倍和光圈没有用。</span></p><h3 id='74-自动校时'><span>7.4 自动校时</span></h3><p><span>在系统设置中开启自动校时后,设备自动上线后会自动将本地时间同步到设备。</span></p><h3 id='75-事件订阅'><span>7.5 事件订阅</span></h3><p><span>在系统设置中开启事件订阅后,一旦接收到设备的报警信息会显示到主界面左下角的信息栏,右下角弹出对应的报警信息。</span>
<span>摄像机要响应事件订阅,具体详细设置说明参见说明书其他说明中的摄像机报警输入设置。</span></p><h3 id='76-图片参数'><span>7.6 图片参数</span></h3><p><img src="snap/7-6-1.jpg" referrerpolicy="no-referrer">
<span>用onvif也可以对摄像机的明亮度、对比度、饱和度进行设置和云台控制的操作类型先选中对应的通道然后右下角这里找到设置的区域单击获取参数会自动将对应摄像机的明亮度、对比度、饱和度值读回来显示在对应文本框和滑块中。</span>
<span>如果需要设置图片参数,先移动滑块到需要的值,然后单击设置参数按钮即可,设置完以后会立即应用,传过来的视频流就能看到效果。</span>
<span>下面还有两个按钮可以手动重启设备以及校时。</span></p><h2 id='8-内核模块说明'><span>8 内核模块说明</span></h2><p><span>本系统支持多种内核方便不同的用户选择适应不同的应用场景默认提供的是ffmpeg内核和vlc内核其他内核需要额外购买或者定制支持定制内核。</span>
<span>每个内核实现的功能不一定完全一致,可仔细查看后面的每个内核的功能特点说明。</span></p><h3 id='81-模块-onvif'><span>8.1 模块-onvif</span></h3><h4 id='811-效果图'><span>8.1.1 效果图</span></h4><p><img src="snap/8-1-1-1.jpg" referrerpolicy="no-referrer"></p><h4 id='812-功能介绍'><span>8.1.2 功能介绍</span></h4><ol start='' ><li><span>广播搜索设备支持IPC和NVR依次返回可选择不同的网卡IP。</span></li><li><span>依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。</span></li><li><span>可对指定的Profile获取视频流Rtsp地址比如主码流子码流地址。</span></li><li><span>可对每个设备设置Onvif用户信息用于认证获取详细信息。</span></li><li><span>可实时预览摄像机图像。</span></li><li><span>支持云台控制,可上下左右调节云台,支持绝对移动和相对移动,可放到和缩小图像远近。</span></li><li><span>支持Qt4和Qt5任意Qt版本亲测Qt4.7.0到Qt5.12.4。</span></li><li><span>支持任意编译器亲测mingw、msvc、gcc、clang。</span></li><li><span>支持任意操作系统亲测xp、win7、win10、linux、嵌入式linux、树莓派全志H3等。</span></li><li><span>支持任意Onvif摄像机和NVR亲测海康、大华、宇视、华为、海思芯片内核等可定制开发。</span></li><li><span>支持对指定IP地址进行单播搜索比如跨网段情况下非常有用。</span></li><li><span>纯Qt编写超级小巧轻量总共约2000行代码不依赖任何第三方的库和组件跨平台。</span></li><li><span>封装好了通用的数据发送和接收解析的函数可以非常方便的自行拓展其他Onvif处理比如修改IP等。</span></li><li><span>工具上提供了收发数据文本框,显示收发的数据,方便查看和分析。</span></li><li><span>支持所有Onvif设备代码工整接口友好直接引入pri即可使用。</span></li></ol><h4 id='813-云台说明'><span>8.1.3 云台说明</span></h4><ol start='' ><li><span>x、y、z 范围都在0-1之间。</span></li><li><span>x为负数表示左转x为正数表示右转。</span></li><li><span>y为负数表示下转y为正数表示上转。</span></li><li><span>z为正数表示拉近z为负数表示拉远。</span></li><li><span>通过x和y的组合来实现云台的控制。</span></li><li><span>通过z的组合来实现焦距控制。</span></li></ol><h4 id='814-主要功能'><span>8.1.4 主要功能</span></h4><ol start='' ><li><span>搜索设备,获取设备的信息比如厂家、型号等。</span></li><li><span>获取设备的多个配置文件信息profile。</span></li><li><span>获取对应配置文件的视频流地址rtsp以及分辨率等参数。</span></li><li><span>云台控制,上下左右移动,焦距放大缩小,相对和绝对移动。</span></li><li><span>获取预置位信息,触发预置位。</span></li><li><span>订阅事件接收设备的各种消息尤其是报警事件比如IO口的报警。</span></li><li><span>抓图,获取设备当前的图片。</span></li><li><span>获取、创建、删除用户信息。</span></li><li><span>获取和设备网络配置信息比如IP地址等。</span></li><li><span>获取和设置NTP时间同步。</span></li><li><span>获取和设置设备时间。</span></li><li><span>重启设备。</span></li></ol><h4 id='815-处理流程'><span>8.1.5 处理流程</span></h4><ol start='' ><li><span>绑定组播IP239.255.255.250和端口3702发送固定的xml格式的数据搜索设备。</span></li><li><span>接收到的xml格式的数据解析得到设备的Onvif地址。</span></li><li><span>对Onvif地址发送对应的数据收到数据取出对应的节点数据。</span></li><li><span>请求Onvif地址获取Media地址和Ptz地址Media地址用来获取详细的配置文件Ptz地址用来云台控制。</span></li><li><span>ptz控制是对Ptz地址发送对应的数据即可。</span></li><li><span>设置了用户认证的需要组织用户token信息一块发送每次都需要作鉴权处理。</span></li><li><span>接收到的数据不是标准的xml数据没法按照正常的节点解析来处理只能用QXmlQuery来做。</span></li><li><span>每个厂家设备返回的数据未必完全一致,基本上都不一致,需要进行模糊查找节点值。</span></li><li><span>特意采用底层协议解析因为soap太臃肿函数名称太另类特意做的轻量级的。</span></li><li><span>两个必备工具Onvif Device Manager 和 Onvif Device Test Tool。</span></li></ol><h3 id='82-内核-ffmpeg'><span>8.2 内核-ffmpeg</span></h3><h4 id='821-效果图'><span>8.2.1 效果图</span></h4><p><img src="snap/8-2-1-1.jpg" referrerpolicy="no-referrer"></p><h4 id='822-功能介绍'><span>8.2.2 功能介绍</span></h4><ol start='' ><li><span>多线程实时播放视频流+本地视频+USB摄像头等。</span></li><li><span>支持windows+linux+mac支持ffmpeg3和ffmpeg4支持32位和64位。</span></li><li><span>多线程显示图像,不卡主界面。</span></li><li><span>自动重连网络摄像头。</span></li><li><span>可设置边框大小即偏移量和边框颜色。</span></li><li><span>可设置是否绘制OSD标签即标签文本或图片和标签位置。</span></li><li><span>可设置两种OSD位置和风格。</span></li><li><span>可设置是否保存到文件以及文件名。</span></li><li><span>可直接拖曳文件到ffmpegwidget控件播放。</span></li><li><span>支持h265视频流+rtmp等常见视频流。</span></li><li><span>可暂停播放和继续播放。</span></li><li><span>支持存储单个视频文件和定时存储视频文件。</span></li><li><span>自定义顶部悬浮条,发送单击信号通知,可设置是否启用。</span></li><li><span>可设置画面拉伸填充或者等比例填充。</span></li><li><span>可设置解码是速度优先、质量优先、均衡处理。</span></li><li><span>可对视频进行截图(原始图片)和截屏。</span></li><li><span>录像文件存储支持裸流和MP4文件。</span></li><li><span>音视频完美同步,采用外部时钟同步策略。</span></li><li><span>支持seek定位播放位置。</span></li><li><span>支持在线网络音视频文件比如http开头mp4、mp3结尾的。</span></li><li><span>可选句柄模式GPU绘制、回调模式QPainter绘制</span></li><li><span>GPU绘制模式同时支持拉伸和等比例绘制。</span></li><li><span>支持qsv、dxva2、d3d11va等硬解码。</span></li><li><span>硬解码和GPU组合超低CPU占用支持64路视频。</span></li><li><span>支持安卓和嵌入式linux交叉编译即可。</span></li></ol><h3 id='83-内核-vlc'><span>8.3 内核-vlc</span></h3><h4 id='831-效果图'><span>8.3.1 效果图</span></h4><p><img src="snap/8-3-1-1.jpg" referrerpolicy="no-referrer"></p><h4 id='832-功能介绍'><span>8.3.2 功能介绍</span></h4><ol start='' ><li><span>多线程实时播放视频流+本地视频+USB摄像头等。</span></li><li><span>支持windows+linux+mac支持vlc2和vlc3支持32位和64位。</span></li><li><span>多线程显示图像,不卡主界面。</span></li><li><span>自动重连网络摄像头。</span></li><li><span>可设置边框大小即偏移量和边框颜色。</span></li><li><span>可设置是否绘制OSD标签即标签文本或图片和标签位置。</span></li><li><span>可设置两种OSD位置和风格。</span></li><li><span>可设置是否保存到文件以及文件名。</span></li><li><span>可直接拖曳文件到vlcwidget控件播放。</span></li><li><span>支持h265视频流+rtmp等常见视频流。</span></li><li><span>可暂停播放和继续播放。</span></li><li><span>支持回调模式和句柄两种模式。</span></li><li><span>支持线程读取进度等信息和事件回调两种处理模式。</span></li><li><span>自动将当前播放位置和音量大小是否静音以信号发出去。</span></li><li><span>提供接口设置播放位置和音量及设置静音。</span></li><li><span>支持存储单个视频文件和定时存储视频文件。</span></li><li><span>自定义顶部悬浮条,发送单击信号通知,可设置是否启用。</span></li><li><span>支持auto、any、dxva2、d3d11va等硬解码。</span></li></ol><h3 id='84-内核-mpv'><span>8.4 内核-mpv</span></h3><p><span>不自带,需要额外购买此模块。</span></p><h4 id='841-效果图'><span>8.4.1 效果图</span></h4><p><img src="snap/8-4-1-1.jpg" referrerpolicy="no-referrer"></p><h4 id='842-功能介绍'><span>8.4.2 功能介绍</span></h4><ol start='' ><li><span>多线程实时播放视频流+本地视频等。</span></li><li><span>支持windows+linux+mac。</span></li><li><span>多线程显示图像,不卡主界面。</span></li><li><span>自动重连网络摄像头。</span></li><li><span>可设置是否保存到文件以及文件名。</span></li><li><span>可直接拖曳文件到mpvwidget控件播放。</span></li><li><span>支持h265视频流+rtmp等常见视频流。</span></li><li><span>可暂停播放和继续播放。</span></li><li><span>支持存储单个视频文件和定时存储视频文件。</span></li><li><span>自定义顶部悬浮条,发送单击信号通知,可设置是否启用。</span></li><li><span>可设置画面拉伸填充或者等比例填充。</span></li><li><span>可对视频进行截图(原始图片)和截屏。</span></li><li><span>录像文件存储MP4文件。</span></li><li><span>支持qsv、dxva2、d3d11va等硬解码。</span></li></ol><h3 id='85-内核-海康sdk'><span>8.5 内核-海康sdk</span></h3><p><span>不自带,需要额外购买此模块。</span></p><h4 id='851-效果图'><span>8.5.1 效果图</span></h4><p><img src="snap/8-5-1-1.jpg" referrerpolicy="no-referrer"></p><h4 id='852-功能介绍'><span>8.5.2 功能介绍</span></h4><ol start='' ><li><span>支持播放视频流和本地MP4文件。</span></li><li><span>支持句柄和回调两种模式。</span></li><li><span>多线程显示图像,不卡主界面。</span></li><li><span>自动重连网络摄像头。</span></li><li><span>可设置边框大小即偏移量和边框颜色。</span></li><li><span>可设置是否绘制OSD标签即标签文本或图片和标签位置。</span></li><li><span>可设置两种OSD位置和风格。</span></li><li><span>可设置是否保存到文件以及文件名。</span></li><li><span>可直接拖曳文件到haikangwidget控件播放。</span></li><li><span>支持h264/h265视频流。</span></li><li><span>可暂停播放和继续播放。</span></li><li><span>支持存储单个视频文件和定时存储视频文件。</span></li><li><span>自定义顶部悬浮条,发送单击信号通知,可设置是否启用。</span></li><li><span>可设置画面拉伸填充或者等比例填充。</span></li><li><span>可设置解码是速度优先、质量优先、均衡处理。</span></li><li><span>可对视频进行截图(原始图片)和截屏(视频窗体)。</span></li><li><span>录像文件存储为MP4文件。</span></li><li><span>支持焦距控制、云台控制。</span></li><li><span>可定制功能。</span></li></ol><p><span>下面没有列出功能介绍的是暂时没有实现的内核</span></p><h3 id='86-内核-萤石sdk'><span>8.6 内核-萤石sdk</span></h3><h3 id='87-内核-大华sdk'><span>8.7 内核-大华sdk</span></h3><h3 id='88-内核-宇视sdk'><span>8.8 内核-宇视sdk</span></h3><h3 id='89-内核-easyplayer'><span>8.9 内核-easyplayer</span></h3><h3 id='810-内核-大牛直播'><span>8.10 内核-大牛直播</span></h3><h3 id='811-内核-qtav'><span>8.11 内核-qtav</span></h3><p>&nbsp;</p><h2 id='9-主界面模块说明'><span>9 主界面模块说明</span></h2><p><span>本系统主界面采用QMainWindow停靠窗体模式设计这样可以自定义各种各样的子模块停靠悬浮等不同的工作模式可以对应不同的模块甚至可以拓展成不同的用户权限对应不同的主界面模块。所有子模块都是new出来的支持任意多个。</span></p><h3 id='90-主界面'><span>9.0 主界面</span></h3><h4 id='901-视频监控-普通模式'><span>9.0.1 视频监控-普通模式</span></h4><p><img src="snap/9-0-1-1.jpg" referrerpolicy="no-referrer"></p><h4 id='902-视频监控-全屏模式'><span>9.0.2 视频监控-全屏模式</span></h4><p><img src="snap/9-0-2-1.jpg" referrerpolicy="no-referrer"></p><h4 id='903-机器人监控-普通模式'><span>9.0.3 机器人监控-普通模式</span></h4><p><img src="snap/9-0-3-1.jpg" referrerpolicy="no-referrer"></p><h4 id='904-机器人监控-全屏模式'><span>9.0.4 机器人监控-全屏模式</span></h4><p><img src="snap/9-0-4-1.jpg" referrerpolicy="no-referrer"></p><h4 id='905-无人机监控-普通模式'><span>9.0.5 无人机监控-普通模式</span></h4><p><img src="snap/9-0-5-1.jpg" referrerpolicy="no-referrer"></p><h4 id='906-无人机监控-全屏模式'><span>9.0.6 无人机监控-全屏模式</span></h4><p><img src="snap/9-0-6-1.jpg" referrerpolicy="no-referrer"></p><p>&nbsp;</p><h3 id='91-设备列表'><span>9.1 设备列表</span></h3><p><img src="snap/9-1-1.jpg" referrerpolicy="no-referrer">
<span>设备列表通过读取录像机信息生成父节点相当于区域录像机信息本身在整个系统中目前就一个作为设备列表的区域信息功能用户可以自行拓展作为其他用途。、摄像机信息自动生成设备列表每个摄像机都对应一个主码流和子码流支持各种视频流、本地视频文件、USB摄像机等。</span></p><h3 id='92-窗口信息'><span>9.2 窗口信息</span></h3><p><img src="snap/9-2-1.jpg" referrerpolicy="no-referrer">
<span>窗口信息负责显示一些打印信息,比如串口是否打开成功,摄像机是否异常,各种报警日志等,可以在系统设置中设置不同的文字颜色,窗口信息的信息条数自动计算应用,保证最大可能的适应高度。</span></p><h3 id='93-图文警情'><span>9.3 图文警情</span></h3><p><img src="snap/9-3-1.jpg" referrerpolicy="no-referrer">
<span>图文警情模块负责以图文的形式显示对应的警情或者提示信息,有时间、内容、图片,双击对应图片可以放大查看具体图片,为了方便演示如何使用,在此模块增加了右键菜单,可以添加消息、删除消息、清空消息。</span></p><h3 id='94-云台控制'><span>9.4 云台控制</span></h3><p><img src="snap/9-4-1.jpg" referrerpolicy="no-referrer">
<span>云台控制模块可以对选中的通道的摄像机ONVIF协议进行云台控制可以控制球机的上下左右等各个方位的移动还可以调节变倍步长至于变焦和光圈目前onvif协议中没看到对应的协议支持没有实现。</span></p><h3 id='95-设备控制'><span>9.5 设备控制</span></h3><p><img src="snap/9-5-1.jpg" referrerpolicy="no-referrer">
<span>设备控制模块可以对选中的通道的摄像机ONVIF协议进行获取参数、设置参数、手动校时、重启设备操作可以对摄像机的明亮度、对比度、饱和度进行设置。</span></p><h3 id='96-预置位置'><span>9.6 预置位置</span></h3><p><span>目前空的,后期增加中。</span></p><h3 id='97-巡航设置'><span>9.7 巡航设置</span></h3><p><span>目前空的,后期增加中。</span></p><h3 id='98-悬浮地图'><span>9.8 悬浮地图</span></h3><p><span>悬浮地图子模块,使用的百度地图,支持在线和离线,用于显示对于设备的位置,支持鼠标直接拖动和缩放。</span></p><p><img src="snap/9-8-1.jpg" referrerpolicy="no-referrer">
<span>具体和飞行轨迹模块类似。</span></p><h3 id='99-飞行轨迹'><span>9.9 飞行轨迹</span></h3><p><img src="snap/9-9-1.jpg" referrerpolicy="no-referrer">
<span>专为无人机打造的模块,也可以作为机器人移动模块,通过传入一个经纬度值,实时更新设备的位置和绘制轨迹,模块已经内置了接口进行处理,支持不同设备不同的轨迹颜色(这个功能好)。</span></p><h3 id='910-飞行监控'><span>9.10 飞行监控</span></h3><p><img src="snap/9-10-1.jpg" referrerpolicy="no-referrer">
<span>目前放置的是6个飞行套装控件默认定时器模拟数据可以自行传入真实的数据会自动显示值。</span></p><h3 id='911-数据调试'><span>9.11 数据调试</span></h3><p><img src="snap/9-11-1.jpg" referrerpolicy="no-referrer">
<span>数据调试模块,用于显示通信串口的数据,自定义不同颜色显示,可以勾选过滤某个串口进行数据查看,也可以选择所有数据,还可以勾选暂停显示复选框用来暂停打印显示信息。</span></p><h3 id='912-运动仿真'><span>9.12 运动仿真</span></h3><p><span>此模块留给用户自行填入内容。</span></p><h3 id='913-图像增强'><span>9.13 图像增强</span></h3><p><span>此模块留给用户自行填入内容。</span></p><h3 id='914-网页浏览'><span>9.14 网页浏览</span></h3><p><img src="snap/9-14-1.jpg" referrerpolicy="no-referrer">
<span>网页浏览模块,用于传入一个网页地址,打开对应的网页进行浏览,可用于网页展示信息,支持多个,可以自行增加,代码中演示了一个。</span></p><h2 id='10-各系统运行图'><span>10 各系统运行图</span></h2><h3 id='101-windows-mingw'><span>10.1 windows-mingw</span></h3><p><img src="snap/10-1-1.jpg" referrerpolicy="no-referrer"></p><h3 id='102-windows-msvc'><span>10.2 windows-msvc</span></h3><p><img src="snap/10-2-1.jpg" referrerpolicy="no-referrer"></p><h3 id='103-linux-ubuntu'><span>10.3 linux-ubuntu</span></h3><p><img src="snap/10-3-1.jpg" referrerpolicy="no-referrer">
<img src="snap/10-3-2.jpg" referrerpolicy="no-referrer"></p><h3 id='104-linux-deepin'><span>10.4 linux-deepin</span></h3><p><img src="snap/10-4-1.jpg" referrerpolicy="no-referrer">
<img src="snap/10-4-2.jpg" referrerpolicy="no-referrer"></p><h3 id='105-linux-centeros'><span>10.5 linux-centeros</span></h3><p><img src="snap/10-5-1.jpg" referrerpolicy="no-referrer"></p><h3 id='106-linux-uos'><span>10.6 linux-uos</span></h3><p><img src="snap/10-6-1.jpg" referrerpolicy="no-referrer">
<img src="snap/10-6-2.jpg" referrerpolicy="no-referrer"></p><h3 id='107-linux-kylin'><span>10.7 linux-kylin</span></h3><p><img src="snap/10-7-1.jpg" referrerpolicy="no-referrer">
<img src="snap/10-7-2.jpg" referrerpolicy="no-referrer"></p><h3 id='108-unix-mac'><span>10.8 unix-mac</span></h3><p>&nbsp;</p><p><img src="snap/10-8-1.jpg" referrerpolicy="no-referrer">
<img src="snap/10-8-2.jpg" referrerpolicy="no-referrer">
<img src="snap/10-8-3.jpg" referrerpolicy="no-referrer"></p><h2 id='11-程序框架说明'><span>11 程序框架说明</span></h2><p><span>备注:下面的截图和说明未必是最新的,但是大部分是一致的,整体的框架不会改变,可能会有新增加子模块和代码,具体以最新的代码为准。</span></p><h3 id='111-整体代码结构'><span>11.1 整体代码结构</span></h3><p><img src="snap/11-1-1.jpg" referrerpolicy="no-referrer">
<span>本系统采用模块化的设备有用到第三方开源类库比如串口通信qextserialport全部放在3rd下面有用到很多自己封装完善的通用类库比如ffmpeg视频监控全部放在core下面设备通信和辅助处理全部放在class下面所有界面全部放在ui下面相当于一个个小的组件合起来最终形成了整个监控系统的完整代码。</span></p><h3 id='112-主模块说明'><span>11.2 主模块说明</span></h3><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>3rd</span></td><td><span>一些第三方开源的类库比如串口通信qextserialport。</span></td></tr><tr><td><span>class</span></td><td><span>存放系统初始化、样式控制、自定义控件、设备通信等。</span></td></tr><tr><td><span>core</span></td><td><span>本人一直持续更新完善的通用的类库比如ffmpeg视频监控。</span></td></tr><tr><td><span>ui</span></td><td><span>所有的界面都分门别类放在这里。</span></td></tr></tbody></table></figure><h3 id='113-子模块说明'><span>11.3 子模块说明</span></h3><h4 id='1131-第三方类库'><span>11.3.1 第三方类库</span></h4><p><img src="snap/11-3-1.jpg" referrerpolicy="no-referrer">
<span>这里放的全部是第三方开源的轮子感谢开源、感谢github、gitee等开源社区。</span></p><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>3rd_qextserialport</span></td><td><span>第三方串口通信qextserialport这个类比较稳定可靠经过了几十个项目持续数十年运行的考验不用Qt自带的串口类。</span></td></tr></tbody></table></figure><p><span>具体代码不做过多说明。</span></p><h4 id='1132-通信及辅助类'><span>11.3.2 通信及辅助类</span></h4><p><img src="snap/11-3-2-1.jpg" referrerpolicy="no-referrer">
<span>这里放的都是一些系统初始化、设备通信相关的类。</span></p><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>api</span></td><td><span>存放数据库表映射成对应的全局队列数据、通用的辅助函数类。</span></td></tr><tr><td><span>app</span></td><td><span>全局配置参数管理类、秘钥管理类、通用函数。</span></td></tr><tr><td><span>device</span></td><td><span>设备通信管理,比如机器人通信、无人机通信、人工智能处理等。</span></td></tr><tr><td><span>flight</span></td><td><span>飞行套件控件集合。</span></td></tr><tr><td><span>usercontrol</span></td><td><span>当前系统的自定义控件全部放在这里,其中包括云台仪表盘、通用视频监控等控件。</span></td></tr></tbody></table></figure><h5 id='11321-模块-api'><span>11.3.2.1 模块-api</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>dbdata</span></td><td><span>将数据库表映射到全局变量数据队列比如将摄像机表ipcinfo转成QStringList存放一行行数据这样在程序中运算比较速度极快直接内存比较不用每次都去读取数据库。</span></td></tr><tr><td><span>dbquery</span></td><td><span>所有的数据库查询插入更新等操作都在这里,比如查询摄像机表、插入日志记录等。</span></td></tr><tr><td><span>savelog</span></td><td><span>日志钩子类,将系统中所有的打印信息转为日志存储或者输出到网络等,本系统目前没有用到,后期可以开启用来打印输出日志信息。</span></td></tr><tr><td><span>saveruntime</span></td><td><span>保存运行时间类,用来存储系统启动后每隔一段时间就输出一条记录用来记录启动后软件运行了多久,方便分析问题。</span></td></tr></tbody></table></figure><h5 id='11322-模块-app'><span>11.3.2.2 模块-app</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>appconfig</span></td><td><span>配置参数类整个系统的配置参数存放在ini文件中跨平台所有参数都对应一个变量读取配置参数的时候将值赋值给变量写入的时候将变量值写入到配置文件。</span></td></tr><tr><td><span>appdata</span></td><td><span>全局变量类,系统中无可避免需要一些全局变量方便处理,都放在此类,比如版本号、录像机类型、摄像机类型、当前用户信息、地图宽度高度、左侧右侧顶部底部宽高等。</span></td></tr><tr><td><span>appevent</span></td><td><span>全局事件转发类系统越复杂信号需要传递的层级越多所以需要一个全局事件转发类用来中转这些事件这样永远只需要两层就可以收到信号进行处理而且整个系统看起来干净整洁不会说一个信号传递到了N个地方乱七八糟建议需要跨层级传递的信号都放在这里中转。比如软件退出信号可能多个界面需要收到退出信号进行保存和其他处理如果从关闭界面发出信号传递给需要的界面那不知道要中间层层传递多少次有了这个全局事件转发类你只需要将事件传给appevent需要接收事件的地方关联这个信号就行appevent为全局单例类整个系统唯一。通用的一些信号有软件退出、全局样式改变、主窗体变化0-最小化 1-最大化 2-恢复 3-关闭 4-移动 5-尺寸变化)等。</span></td></tr><tr><td><span>appfun</span></td><td><span>通用辅助函数处理,比如系统重启、导入导出数据、校验权限等。</span></td></tr><tr><td><span>appinit</span></td><td><span>程序初始化类在main函数中会先执行这个初始化的类比如初始化皮肤、字体、数据库、样式等操作这些都是要优先在窗体加载前执行的执行完毕以后再打开窗体主界面。</span></td></tr><tr><td><span>appkey</span></td><td><span>秘钥管理类,指定校验秘钥文件,可设置运行时间、设备数量等限制,支持根据硬件指纹特征生成机器码文件等。</span></td></tr><tr><td><span>appnav</span></td><td><span>菜单导航管理类,用来控制和显示顶部导航栏、左侧导航栏的样式。很多子界面需要用到,所以封装成一个专门管理这个的类。</span></td></tr><tr><td><span>appstyle</span></td><td><span>全局样式管理类整个系统的样式全部放在这里一般加载流程是先读取样式表文件然后将本系统独特的样式比如开关按钮、视频监控、云台仪表盘内容追加到后面最后统一设置全局样式在main函数中加载和appinit类一样放在最前面执行。</span></td></tr></tbody></table></figure><h5 id='11323-模块-device'><span>11.3.2.3 模块-device</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>devicehelper</span></td><td><span>整个系统设备管理辅助类,比如插入窗口消息、加载设备列表、加载图片地图、加载设备按钮、初始化视频控件等。</span></td></tr><tr><td><span>devicemap</span></td><td><span>设备图片地图管理类相当于一次性加载所有图片到内存当要切换或者显示的时候直接从内存取出来设置即可速度极快瞬间相应纯粹是为了加快相应速度以及可能在图片上进行绘制增加的功能比从文件系统读取图片文件显示快N倍。</span></td></tr><tr><td><span>deviceonvif</span></td><td><span>设备onvif通信管理类比如获取当前选中通道的onvif地址、开启事件订阅、校对时间、重启设备、获取视频参数、设置视频参数、云台控制等这里是具体的需要和摄像机信息表及视频通道关联的处理所以不能放到通用的onvif模块中。</span></td></tr><tr><td><span>devicerobot</span></td><td><span>机器人串口通信管理类。</span></td></tr><tr><td><span>devicerobot2</span></td><td><span>机器人串口通信管理类2有串口数据转发功能。</span></td></tr><tr><td><span>devicesmart</span></td><td><span>人工智能处理类,最常见的应用就是设置一个视频控件,然后在视频控件上绘制人脸框、文字信息等,比如设备的实时运行状态。</span></td></tr><tr><td><span>deviceuavsvideo</span></td><td><span>无人机视频监控类,将视频控件设置过来,然后就可以将自己人工智能算法处理后的图片传过来进行绘制,类似于实时视频效果。</span></td></tr></tbody></table></figure><h5 id='11324-模块-flight'><span>11.3.2.4 模块-flight</span></h5><p><span>飞控套件集合,具体代码不做过多说明,具体可购买自定义控件大全参见演示示例。</span></p><h5 id='11325-模块-usercontrol'><span>11.3.2.5 模块-usercontrol</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>gaugecloud</span></td><td><span>云台仪表盘控件。</span></td></tr><tr><td><span>squarelayout</span></td><td><span>正方形布局控件,所有飞机控件都需要用这个布局,不然控件拉伸扁平很难看。</span></td></tr><tr><td><span>videobox</span></td><td><span>视频监控盒子控件,用于统一管理视频监控主界面,包括通道切换等。</span></td></tr><tr><td><span>videoplayback</span></td><td><span>视频回放控件。</span></td></tr><tr><td><span>videowidget</span></td><td><span>通用视频播放控件。</span></td></tr><tr><td><span>widgetsound</span></td><td><span>声音面板控件,主界面右下角单击弹出音量条。</span></td></tr></tbody></table></figure><h4 id='1133-核心通用类库'><span>11.3.3 核心通用类库</span></h4><p><img src="snap/11-3-3-1.jpg" referrerpolicy="no-referrer">
<span>这里放的全部是个人一直持续更新完善的独创的轮子,所有的项目都公用这些轮子,用到哪个就包含哪个进来,更新只需要更新轮子代码就行。</span>
<span>视频监控系统包含的轮子超级丰富给力物超所值涵盖了数据导出模块、数据库应用、视频监控、ONVIF通信、TCP文件传输、地图应用、通用浏览器内核等。</span></p><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>core_control</span></td><td><span>通用自定义控件,很多系统经常用到的控件全部放在这里。</span></td></tr><tr><td><span>core_dataout</span></td><td><span>数据导入导出到xls/pdf和打印类库极速、跨平台、无依赖。</span></td></tr><tr><td><span>core_db</span></td><td><span>数据库通用类库比如数据库线程管理、数据清理、数据采集等。</span></td></tr><tr><td><span>core_ffmpeg</span></td><td><span>视频监控内核ffmpeg版本本系统默认采用的内核。</span></td></tr><tr><td><span>core_vlc</span></td><td><span>视频监控内核vlc版本本系统自带该内核。</span></td></tr><tr><td><span>core_mpv</span></td><td><span>视频监控内核mpv版本需要额外购买不在视频监控系统中。</span></td></tr><tr><td><span>core_haikang</span></td><td><span>视频监控内核海康sdk版本需要额外购买不在视频监控系统中。</span></td></tr><tr><td><span>core_map</span></td><td><span>地图综合应用类库百度地图支持在线离线和echart封装类等。</span></td></tr><tr><td><span>core_onvif</span></td><td><span>onvif功能封装类包括设备搜索、云台控制、设备参数设置等。</span></td></tr><tr><td><span>core_opengl</span></td><td><span>opengl封装类支持打开yuv/nv12文件绘制yuv/nv12帧数据一般搭配ffmpeg视频内核视频直接走GPU绘制。</span></td></tr><tr><td><span>core_tcpfile</span></td><td><span>文件多线程收发类,支持多个并发。</span></td></tr><tr><td><span>core_video</span></td><td><span>通用的视频监控管理类,封装了通用的视频控件和多通道统一管理。</span></td></tr><tr><td><span>core_webview</span></td><td><span>通用浏览器控件类同时支持webkit、wenengine、miniblink三种内核打通了所有的Qt版本。</span></td></tr></tbody></table></figure><h5 id='11331-模块-corecontrol'><span>11.3.3.1 模块-core_control</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>bottomwidget</span></td><td><span>通用底部状态栏控件,可以设置软件名称、版本号、运行时间等。</span></td></tr><tr><td><span>colorcombobox</span></td><td><span>颜色下拉框控件,在系统设置中有。</span></td></tr><tr><td><span>cpumemorylabel</span></td><td><span>CPU和内存使用情况标签控件主界面右上角显示。</span></td></tr><tr><td><span>customtitlebar</span></td><td><span>停靠窗体自定义标题栏控件。</span></td></tr><tr><td><span>devicebutton</span></td><td><span>设备按钮控件,比如图片地图模块中用到,可设置不同的图标样式和状态等,双击发出信号进行相应处理比如弹出对应视频预览等。</span></td></tr><tr><td><span>framelesswidget</span></td><td><span>无边框窗体管理类,无边框拖动+拉伸,主界面就用到了这个类。</span></td></tr><tr><td><span>lcddatetime</span></td><td><span>软件右上角显示时间的控件。</span></td></tr><tr><td><span>panelwidget</span></td><td><span>面板容器控件主界面子模块表格消息就用到此控件用于将一堆widget放到此容器进行管理自动形成滚动条等。</span></td></tr><tr><td><span>switchbutton</span></td><td><span>开关按钮控件,在系统设置中存在大量该控件。</span></td></tr><tr><td><span>xslider</span></td><td><span>滑动条控件,在原有滑动条基础上增加了鼠标按下立即定位等。</span></td></tr></tbody></table></figure><h5 id='11332-模块-coredataout'><span>11.3.3.2 模块-core_dataout</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>datacreat</span></td><td><span>通用数据报表内容创建类比如生成表格格式的html内容然后赋值给dataprint直接打印里面举例了图文混排的报告内容后期会不断增加其他模板也可以自行增加其他模板数据。</span></td></tr><tr><td><span>datacsv</span></td><td><span>导入导出数据csv格式可设置分隔符。拓展名。过滤条件等。</span></td></tr><tr><td><span>datahead</span></td><td><span>当前组件通用头文件。</span></td></tr><tr><td><span>datahelper</span></td><td><span>辅助类,比如校验规则函数,通用数据导出+打印函数。</span></td></tr><tr><td><span>dataprint</span></td><td><span>数据打印到pdf及纸张支持多线程。</span></td></tr><tr><td><span>dataxls</span></td><td><span>数据导出到xls类支持多线程导出。</span></td></tr></tbody></table></figure><h5 id='11333-模块-coredb'><span>11.3.3.3 模块-core_db</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>dbcleanthread</span></td><td><span>自动清理数据线程类。</span></td></tr><tr><td><span>dbconnthread</span></td><td><span>数据库通信管理线程类。</span></td></tr><tr><td><span>dbdelegate</span></td><td><span>自定义委托全家桶,包括复选框、下拉框、密码框、按钮等。</span></td></tr><tr><td><span>dbhead</span></td><td><span>当前组件通用头文件。</span></td></tr><tr><td><span>dbhelper</span></td><td><span>各种数据库应用函数封装比如初始化数据库、执行sql语句等。</span></td></tr><tr><td><span>dbhttpthread</span></td><td><span>网络请求数据采集类。</span></td></tr><tr><td><span>dbpage</span></td><td><span>数据库通用翻页类。</span></td></tr><tr><td><span>dbpagemodel</span></td><td><span>数据库翻页类数据模型。</span></td></tr><tr><td><span>navpage</span></td><td><span>分页导航控件。</span></td></tr></tbody></table></figure><h5 id='11334-模块-coreffmpeg'><span>11.3.3.4 模块-core_ffmpeg</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>ffmpegconvert</span></td><td><span>各种转换处理函数封装。</span></td></tr><tr><td><span>ffmpeghead</span></td><td><span>当前组件通用头文件。</span></td></tr><tr><td><span>ffmpeghelper</span></td><td><span>辅助类包括版本号校验url地址、获取流索引等。</span></td></tr><tr><td><span>ffmpegsync</span></td><td><span>音视频同步类,包括了同步以及发出当前播放进度信号。</span></td></tr><tr><td><span>ffmpegthread</span></td><td><span>核心解码类,主要代码都在这,包括音视频的解码。</span></td></tr><tr><td><span>ffmpegtool</span></td><td><span>工具类用于执行ffmpeg的命令获取结果。</span></td></tr><tr><td><span>ffmpegwidget</span></td><td><span>视频显示窗体类解码后到这里显示依赖ffmpegthread。</span></td></tr><tr><td><span>videoffmpeg</span></td><td><span>多通道管理类。</span></td></tr></tbody></table></figure><h5 id='11335-模块-coremap'><span>11.3.3.5 模块-core_map</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>echartjs</span></td><td><span>echart模块中用到的json文件转js文件获取js文件中的名字和经纬度等处理。</span></td></tr><tr><td><span>echarts</span></td><td><span>echart封装类可加载仪表盘、闪烁点图、迁徙图、世界地图、区域地图等每个点可自定义颜色和提示信息等。</span></td></tr><tr><td><span>mapbaidu</span></td><td><span>百度地图封装类,支持在线和离线两种模式。</span></td></tr></tbody></table></figure><h5 id='11336-模块-coreonvif'><span>11.3.3.6 模块-core_onvif</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>onvifbase</span></td><td><span>基础类,用于获取设备信息、服务文件地址、能力文件地址、媒体文件地址、视频流地址等。</span></td></tr><tr><td><span>onvifdevice</span></td><td><span>设备类核心处理及管理包括设置用户信息请求onvif地址、获取设备信息、云台控制、事件订阅、抓拍图片等。</span></td></tr><tr><td><span>onvifevent</span></td><td><span>事件订阅具体实现类,可设置请求超时时间等。</span></td></tr><tr><td><span>onvifhead</span></td><td><span>当前组件通用头文件。</span></td></tr><tr><td><span>onvifhelper</span></td><td><span>辅助类比如获取UUID用于请求、判断IP合法、获取本机IP地址集合、管理系统中所有onvif设备对象等。</span></td></tr><tr><td><span>onvifmedia</span></td><td><span>获取媒体文件具体解析类。</span></td></tr><tr><td><span>onvifother</span></td><td><span>其他处理类比如系统重启、NTP校时、获取和设置网络信息、获取和设备时间、获取和设置图片参数等。</span></td></tr><tr><td><span>onvifptz</span></td><td><span>云台控制实现类,包括绝对移动、相对移动等。</span></td></tr><tr><td><span>onvifquery</span></td><td><span>数据查询类用于将接收到的xml数据解析并赋值字符串比如命名空间、设备地址、媒体地址、事件地址等。</span></td></tr><tr><td><span>onvifrequest</span></td><td><span>网络请求类包括设置用户信息、获取用户token数据、获取xml头部数据等通用的请求数据返回结果函数。</span></td></tr><tr><td><span>onvifsearch</span></td><td><span>设备搜索类,支持广播搜索、指定地址搜索,可获取设备信息集合、获取设备地址集合。</span></td></tr><tr><td><span>onvifservices</span></td><td><span>服务类,用于获取媒体地址、云台地址等。</span></td></tr><tr><td><span>onvifsnap</span></td><td><span>图片抓拍实现类,包括获取抓图地址、抓拍图片等。</span></td></tr></tbody></table></figure><h5 id='11337-模块-coreopengl'><span>11.3.3.7 模块-core_opengl</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>openglhead</span></td><td><span>当前组件通用头文件。</span></td></tr><tr><td><span>nv12glwidget</span></td><td><span>继承自QGLWidget的NV12格式OPENGL绘制窗体。</span></td></tr><tr><td><span>nv12openglwidget</span></td><td><span>继承自QOpenGLWidget的NV12格式OPENGL绘制窗体。</span></td></tr><tr><td><span>yuvglwidget</span></td><td><span>继承自QGLWidget的YUV格式OPENGL绘制窗体。</span></td></tr><tr><td><span>yuvopenglwidget</span></td><td><span>继承自QOpenGLWidget的YUV格式OPENGL绘制窗体。</span></td></tr></tbody></table></figure><h5 id='11338-模块-corequi'><span>11.3.3.8 模块-core_qui</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>iconfont</span></td><td><span>图形字体类,对应阿里巴巴的图形字体文件,系统中大量运用,将字体中的值转成图片显示。</span></td></tr><tr><td><span>iconhelper</span></td><td><span>图形字体类对应国际开源的fontawesome图形字体。</span></td></tr><tr><td><span>quiconfig</span></td><td><span>存储当前组件的配置参数信息,比如全局的字体名称、字号、无边框窗体的最小化最大化关闭等图标、样式表的颜色值。</span></td></tr><tr><td><span>quidateselect</span></td><td><span>自定义日期范围选择对话框。</span></td></tr><tr><td><span>quihead</span></td><td><span>当前组件通用头文件。</span></td></tr><tr><td><span>quihelper</span></td><td><span>项目通用辅助类,各种常用函数的封装,比如获取当前屏幕分辨率、设置字体、设置编码、加载翻译文件、各种进制数据转换、弹出各种对话框、设置延时时间等。</span></td></tr><tr><td><span>quiinputbox</span></td><td><span>自定义输入框窗体,可指定不同的输入类型比如文本框、下拉框等。</span></td></tr><tr><td><span>quimessagebox</span></td><td><span>自定义信息消息框窗体,可设置关闭倒计时,不同的类型比如信息框、询问框、错误框等。</span></td></tr><tr><td><span>quistyle</span></td><td><span>当前组件通用样式设置管理类,可以指定枚举类型样式、传入样式内容设置、获取样式表文件对应的颜色值等。当前组件样式相关的处理函数都放在这里,统一管理。</span></td></tr><tr><td><span>quitipbox</span></td><td><span>自定义右下角信息对话框,可设置对齐方式、关闭倒计时等。</span></td></tr><tr><td><span>quiwidget</span></td><td><span>自定义无边框窗体,可设置标题,各种图标等。</span></td></tr></tbody></table></figure><h5 id='11339-模块-coretcpfile'><span>11.3.3.9 模块-core_tcpfile</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>tcpfilehead</span></td><td><span>当前组件通用头文件。</span></td></tr><tr><td><span>tcpfilehelper</span></td><td><span>辅助类包括将字节转为MB单位、初始化表格控件、生成表格行、数据加密解密、解压文件、重启系统等。</span></td></tr><tr><td><span>tcpreceivefileserver</span></td><td><span>接收文件服务类,管理多个接收文件线程,支持监听端口被动接收文件和主动连接服务器接收文件。</span></td></tr><tr><td><span>tcpreceivefilethread</span></td><td><span>接收文件线程类,根据发送的文件名、包编号、块大小、挨个接收数据最终形成文件,可设置保存文件夹等。</span></td></tr><tr><td><span>tcpsearchfileserver</span></td><td><span>搜索文件服务类,目前没用,用于接收请求搜索文件是否存在。</span></td></tr><tr><td><span>tcpsendfilethread</span></td><td><span>发送文件线程类,按照 文件开始符+文件大小+文件内容+文件结束符 逐个分包发送,可对文件的每个包进行加密传输。</span></td></tr></tbody></table></figure><h5 id='113310-模块-corevideo'><span>11.3.3.10 模块-core_video</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>commonvideomanage</span></td><td><span>通用视频管理类,比如定时器排队打开视频、排队重连视频,可设置超时时间、打开间隔、重连间隔等。</span></td></tr><tr><td><span>commonvideowidget</span></td><td><span>通用视频控件类,视频监控系统支持多种内核,每种内核对应的视频控件接口一样,根据预定义关键字识别具体的视频控件类,搞个通用的视频控件类,就不用每个用到该控件的代码文件去挨个判断预定义变量生成对应的视频控件,很大减少重复冗余代码量。</span></td></tr></tbody></table></figure><h5 id='113311-模块-corewebview'><span>11.3.3.11 模块-core_webview</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>webcore.pri</span></td><td><span>通用的根据不同的Qt版本、不同的编译器环境、不同的操作系统加载对应的浏览器内核模块和定义不同的变量。</span></td></tr><tr><td><span>miniblink</span></td><td><span>miniblink封装处理类。</span></td></tr><tr><td><span>webhelper</span></td><td><span>经纬度转换、获取小数点经纬度值等常用处理函数。</span></td></tr><tr><td><span>webjsdata</span></td><td><span>通用的浏览器控件和Qt程序交互数据中转类。</span></td></tr><tr><td><span>webview</span></td><td><span>通用浏览器控件支持webkit、webengine、miniblink。</span></td></tr></tbody></table></figure><h4 id='1134-界面ui'><span>11.3.4 界面UI</span></h4><p><img src="snap/11-3-4-1.jpg" referrerpolicy="no-referrer">
<span>这里分门别类存放的各种功能集合的界面类每个类都一个ui文件、一个h头文件、一个cpp实现文件方便快速查找对应功能的界面也方便拓展增加界面。</span>
<span>不仅分文件夹存放的而且命名也尽量按照对应功能打头比如系统设置模块中的都用frmconfig打头外层文件夹是整齐的内部代码也是整齐的。</span></p><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmconfig</span></td><td><span>系统设置模块,包括基本设置、录像机管理、摄像机管理、轮询管理、用户管理、视频上传等。</span></td></tr><tr><td><span>frmdata</span></td><td><span>日志查询模块,包括本地日志、设备日志等。</span></td></tr><tr><td><span>frmdemo</span></td><td><span>演示demo示例用于演示具体控件或者功能的使用方便学习参考比如视频图片、视频控件、视频存储都单独的使用demo。</span></td></tr><tr><td><span>frmipc</span></td><td><span>存放摄像机处理相关的模块比如设备控制云台控制、预置位、巡航设置等。之前放在frmmodule模块中后面独立出来管理更方便。</span></td></tr><tr><td><span>frmmain</span></td><td><span>主界面模块,包括登录登出界面、主界面、右上角时间组件、欢迎组件等。</span></td></tr><tr><td><span>frmmap</span></td><td><span>地图模块,包括通用地图内核界面、图片地图、在线地图、离线地图、路径规划等。</span></td></tr><tr><td><span>frmmodule</span></td><td><span>停靠子窗体模块,包括停靠窗体管理核心类、设备列表、窗口信息、图文警情、设备轨迹、网页浏览等模块。将摄像机、机器人、无人机相关的模块放到了对应的模块文件夹,这里放的是系统通用的模块。</span></td></tr><tr><td><span>frmrobot</span></td><td><span>无人机模块,包括图像增强、飞行监控等模块。</span></td></tr><tr><td><span>frmuavs</span></td><td><span>无人机模块,包括图像增强、飞行监控等模块。</span></td></tr><tr><td><span>frmvideo</span></td><td><span>视频监控模块,所有视频监控相关的都放在这里,包括主界面的视频监控布局窗体、视频回放、远程回放、图片回放等。</span></td></tr></tbody></table></figure><h5 id='11341-模块-frmconfig'><span>11.3.4.1 模块-frmconfig</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmconfig</span></td><td><span>系统设置模块主界面,采用堆栈窗体形式,加载多个子界面比如摄像机管理、轮询管理等。</span></td></tr><tr><td><span>frmconfigdb</span></td><td><span>数据库设置,独立出来,很多系统通用。</span></td></tr><tr><td><span>frmconfigipc</span></td><td><span>摄像机管理,可以增加、删除、修改、清空、导入、导出、打印摄像机信息。</span></td></tr><tr><td><span>frmconfigipcsearch</span></td><td><span>onvif设备搜索独立出来的窗体可以搜索局域网内的所有onvif摄像机信息搜索完以后获取摄像机的视频流地址等最后可以单个添加或者批量选中添加到摄像机信息表格中。</span></td></tr><tr><td><span>frmconfignvr</span></td><td><span>录像机管理,可以增加、删除、修改、清空、导入、导出、打印录像机信息。</span></td></tr><tr><td><span>frmconfigpoll</span></td><td><span>轮询管理,可以增加、删除、修改、清空、导入、导出、打印轮询点信息。可以按照设定规则批量生成轮询点信息。</span></td></tr><tr><td><span>frmconfigpollplus</span></td><td><span>将轮询管理中的轮询参数配置、分组管理、批量添加等独立出来的界面,方便管理和拓展。</span></td></tr><tr><td><span>frmconfigsave</span></td><td><span>录像计划,目前空的,等想好了怎么设计好在实现。</span></td></tr><tr><td><span>frmconfigsystem</span></td><td><span>系统设置,包括基本设置、视频参数、数据库设置、地图配置、功能激活、颜色配置、串口配置、网络配置等。</span></td></tr><tr><td><span>frmconfiguser</span></td><td><span>用户管理,可以增加、删除、修改、清空、导入、导出、打印用户信息。每个用户可以勾选不同的模块权限。</span></td></tr></tbody></table></figure><h5 id='11342-模块-frmdata'><span>11.3.4.2 模块-frmdata</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmdata</span></td><td><span>日志查询模块主界面,采用堆栈窗体形式,加载多个子界面包括本地日志、设备日志等。</span></td></tr><tr><td><span>frmdatadevice</span></td><td><span>设备日志通过私有协议从NVR取对应设备日志信息。</span></td></tr><tr><td><span>frmdatauser</span></td><td><span>本地地址,用户操作的日志信息,可查询和导出打印数据记录。</span></td></tr></tbody></table></figure><h5 id='11343-模块-frmdemo'><span>11.3.4.3 模块-frmdemo</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmdemo</span></td><td><span>单独的功能演示示例主窗体,加载多个子界面比如视频控件等。</span></td></tr><tr><td><span>frmdemovideoimage</span></td><td><span>视频图片示例,从图片文件夹读取图片集合,定时器绘制取出图片发给视频控件绘制。</span></td></tr><tr><td><span>frmdemovideosave</span></td><td><span>视频保存示例,演示如何对视频控件进行视频保存,可动态保存。</span></td></tr><tr><td><span>frmdemovideowidget</span></td><td><span>视频控件示例,演示视频控件如何使用。</span></td></tr></tbody></table></figure><h5 id='11344-模块-frmipc'><span>11.3.4.4 模块-frmipc</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmipccontrol</span></td><td><span>设备控制模块可对选中设备进行图片参数调节、NTP校时、设备重启、抓拍图片ONVIF抓图等。</span></td></tr><tr><td><span>frmipcnavigate</span></td><td><span>巡航管理模块,暂未实现,后期完善。</span></td></tr><tr><td><span>frmipcreset</span></td><td><span>预置位管理模块,暂未实现,后期完善。</span></td></tr><tr><td><span>frmipcptz</span></td><td><span>云台控制模块,可对选中的摄像机进行云台控制。</span></td></tr></tbody></table></figure><h5 id='11345-模块-frmmain'><span>11.3.4.5 模块-frmmain</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmlogin</span></td><td><span>用户登录界面,三次错误关闭,下拉可选用户,内置超级密码。</span></td></tr><tr><td><span>frmlogout</span></td><td><span>用户退出界面,三次错误关闭,下拉可选用户,内置超级密码。</span></td></tr><tr><td><span>frmmain</span></td><td><span>系统主界面,采用堆栈窗体,加载各个子模块。</span></td></tr><tr><td><span>frmmain1</span></td><td><span>备用模块1界面根据参数设置决定是否启用。</span></td></tr><tr><td><span>frmtimecpu</span></td><td><span>右上角日期时间+CPU内存显示。</span></td></tr><tr><td><span>frmwelcome</span></td><td><span>右上角欢迎信息界面。</span></td></tr></tbody></table></figure><h5 id='11346-模块-frmmap'><span>11.3.4.6 模块-frmmap</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmmap</span></td><td><span>地图管理主界面,采用堆栈窗体形式,加载各个子界面比如图片地图、在线地图、离线地图、路径规划等。</span></td></tr><tr><td><span>frmmapcore</span></td><td><span>通用百度地图内核界面,用来加载百度地图,可设置在线、离线模式,有很多个窗体用到类似功能特意封装到一个类,重复利用,比如悬浮地图、飞行轨迹、路径规划等模块都用到了此内核。</span></td></tr><tr><td><span>frmmapdevice</span></td><td><span>通用的设备地图界面,在线地图和离线地图界面公用这个界面,唯一区别就是设置下地图的模式是在线还是离线。</span></td></tr><tr><td><span>frmmapimage</span></td><td><span>图片地图界面,设备作为一个个按钮点显示在对应地图上,可以拖动,双击弹出预览实时视频。</span></td></tr><tr><td><span>frmmaplocal</span></td><td><span>离线地图界面,可更新经纬度值、模拟运动轨迹等。</span></td></tr><tr><td><span>frmmapweb</span></td><td><span>在线地图界面,可更新经纬度值、模拟运动轨迹等。</span></td></tr><tr><td><span>frmmaproute</span></td><td><span>路径规划界面,可查询路线得到路线的经纬度坐标集合。</span></td></tr></tbody></table></figure><h5 id='11347-模块-frmmodule'><span>11.3.4.7 模块-frmmodule</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmdevicegps</span></td><td><span>设备轨迹模块,对设定的设备随机模拟轨迹,也可传入经纬度坐标值自动移动并绘制轨迹线条,不同设备可以不同颜色。</span></td></tr><tr><td><span>frmdevicetree</span></td><td><span>设备列表模块,读取设备信息加载形成树状列表,双击或者拖动到视频监控窗体直接播放视频,提供右键菜单作为演示如何使用。</span></td></tr><tr><td><span>frmmodule</span></td><td><span>主界面中心部分窗体采用QMainWindow类中间加载的视频监控面板其余new出来每个子模块子模块可停靠和悬浮拖动等。不同工作模式下的各种子模块都在此加载。同时负责管理模块的显示隐藏菜单。</span></td></tr><tr><td><span>frmmsglist</span></td><td><span>图文警情模块,也叫消息列表模块,带有右键菜单添加、删除、清空列表中的消息,双击可以弹出大图预览。</span></td></tr><tr><td><span>frmmsglistitem</span></td><td><span>图文警情模块子类都是由一个个item组成放到panelwidget面板控件中自动形成滚动条。</span></td></tr><tr><td><span>frmmsgtable</span></td><td><span>窗口消息模块,也叫表格消息模块,表格形式显示打印信息,不同的内容可以不同颜色区分。</span></td></tr><tr><td><span>frmwebview</span></td><td><span>网页浏览模块传入一个url地址打开对应的网页比如打开一个3D的网页。</span></td></tr></tbody></table></figure><h5 id='11348-模块-frmrobot'><span>11.3.4.8 模块-frmrobot</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmrobotdata</span></td><td><span>仿真数据模块,启动机器人通信服务,接收数据解析显示。</span></td></tr><tr><td><span>frmrobotdebug</span></td><td><span>数据调试模块,可模拟发送轨迹数据测试解析类。</span></td></tr><tr><td><span>frmrobotdebug2</span></td><td><span>新数据调试模块,打印多个串口数据,不同颜色显示。</span></td></tr><tr><td><span>frmrobotemulate</span></td><td><span>运动仿真模块预留给用户实现一般放个3D效果。</span></td></tr><tr><td><span>frmrobotlog</span></td><td><span>机器人实时数据模块,预留给用户实现。</span></td></tr></tbody></table></figure><h5 id='11349-模块-frmuavs'><span>11.3.4.9 模块-frmuavs</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmuavsflight</span></td><td><span>飞行套件控件面板,放了多个飞行仪表,默认自动模拟数据,可以传入对应数据显示。</span></td></tr><tr><td><span>frmuavsimage</span></td><td><span>图像增强模块,预留给用户实现。</span></td></tr><tr><td><span>frmuavspanel</span></td><td><span>飞行监控面板。</span></td></tr></tbody></table></figure><h5 id='113410-模块-frmvideo'><span>11.3.4.10 模块-frmvideo</span></h5><figure><table><thead><tr><th><span>名称</span></th><th><span>说明</span></th></tr></thead><tbody><tr><td><span>frmvideo</span></td><td><span>视频回放模块主界面,堆栈窗体形式,加载多个子界面比如本地回放、远程回放、设备播放等。</span></td></tr><tr><td><span>frmvideopanel</span></td><td><span>视频监控面板,主界面中间部分,这是核心,管理多个通道,通道可移除删除,拖曳打开,拖曳交换等。</span></td></tr><tr><td><span>frmvideopaneltool</span></td><td><span>视频监控底部工具栏,独立出来一个类专门管理。</span></td></tr><tr><td><span>frmvideoplayimage</span></td><td><span>图片回放模块,按照规则查询图片目录,然后可设定播放速度进行图片序列播放。</span></td></tr><tr><td><span>frmvideoplaylocal</span></td><td><span>本地回放模块,查询对应通道的本地存储的视频文件,双击播放,可暂停和拖动进度条位置。</span></td></tr><tr><td><span>frmvideoplaynvr</span></td><td><span>远程回放模块需要用厂家sdk去实现从NVR回放录像。</span></td></tr><tr><td><span>frmvideoplayweb</span></td><td><span>设备播放模块通过RTSP视频流的形式从远程设备取视频进行播放支持摄像机和录像机手动填入地址也行。</span></td></tr><tr><td><span>frmvideopreview</span></td><td><span>视频预览窗体,比如图片或者地图上双击设备弹出的视频预览,可以多个,关闭的时候自动释放资源。</span></td></tr><tr><td><span>frmvideoupload</span></td><td><span>视频上传,将本地存储的视频文件上传到服务器。</span></td></tr></tbody></table></figure><h2 id='12-二次开发说明'><span>12 二次开发说明</span></h2><h3 id='121-开发环境搭建'><span>12.1 开发环境搭建</span></h3><h4 id='1211-常规通用步骤'><span>12.1.1 常规通用步骤</span></h4><ol start='' ><li><span>第一步安装系统推荐用vmware虚拟机。</span></li><li><span>第二步安装qt环境可以直接用官方下载的run安装包安装有些要求用命令行安装。</span></li><li><span>第三步:写个空白窗体程序测试下是否环境正常。</span></li><li><span>第四步编译ffmpeg生成对应的动态库或者静态库。</span></li><li><span>第五步打开video_system.pro项目进行编译。</span></li><li><span>第六步打包发布为了发布方便推荐用静态编译的Qt+静态编译的ffmpeg这样打包发布很清爽就一个可执行文件。</span></li></ol><h4 id='1212-windowsmingw'><span>12.1.2 windows+mingw</span></h4><h4 id='1213-windowsmsvc'><span>12.1.3 windows+msvc</span></h4><h4 id='1214-linuxubuntu'><span>12.1.4 linux+ubuntu</span></h4><h4 id='1215-linuxdeepin'><span>12.1.5 linux+deepin</span></h4><h4 id='1216-linuxcenteros'><span>12.1.6 linux+centeros</span></h4><h4 id='1217-linuxuos'><span>12.1.7 linux+uos</span></h4><h4 id='1218-linux银河麒麟'><span>12.1.8 linux+银河麒麟</span></h4><h3 id='122-通用模块使用'><span>12.2 通用模块使用</span></h3><h3 id='123-人工智能集成'><span>12.3 人工智能集成</span></h3><h2 id='13-其他说明'><span>13 其他说明</span></h2><h3 id='131-海康onvif设置'><span>13.1 海康onvif设置</span></h3><p><span>新版的海康的摄像机默认onvif是关闭的需要手动开启开启以后记得添加onvif用户并重启摄像机应用。提示海康旗下的萤石目前暂时不支持onvif协议。</span></p><p><img src="snap/13-1-1.jpg" referrerpolicy="no-referrer"></p><h3 id='132-大华onvif设置'><span>13.2 大华onvif设置</span></h3><p><span>大华摄像机需要在用户管理中添加onvif用户添加好以后建议重启摄像机应用。</span></p><p><img src="snap/13-2-1.jpg" referrerpolicy="no-referrer"></p><h3 id='133-国际onvif工具'><span>13.3 国际onvif工具</span></h3><p><span>工具的名字叫ONVIF Device Manager可以自行搜索下载此工具位国际官方工具如果此工具搜索不到摄像机则说明该摄像机不是真正的onvif摄像机不是标准的摄像机目前市面上的绝大部分网络摄像机都支持onvif。</span></p><p><img src="snap/13-3-1.jpg" referrerpolicy="no-referrer"></p><h3 id='134-报警输入设置'><span>13.4 报警输入设置</span></h3><p><span>默认摄像机IO输入或者开关量输入是关闭的需要手动开启一般都是登录到摄像机的web页面找到开关量的地方可能描述不一样但是大致的意思差不多一般摄像机会有两组开关量输入而且开关量报警有常开常闭两种都需要自己手动选择如果是常开的话意味着闭合是属于报警反之亦然。找两个导线接在对应口子详见摄像机厂家的说明书摄像机背面板也会有对应字样标识一般叫 in短接或者扒开都会有反应onvif工具都能接收到信息前提是单击过订阅事件按钮而且顺利返回了订阅地址才行会收到LogicalState关键字的信息true或者1表示报警false或者0表示正常可能每个厂家会有所区别需要自己拿到数据后做特殊处理但是大部分厂家都是相似的实在不行无非搞个contains方法判断好了。</span></p><p>&nbsp;</p><p><img src="snap/13-4-1.jpg" referrerpolicy="no-referrer">
<img src="snap/13-4-1.jpg" referrerpolicy="no-referrer">
<img src="snap/13-4-1.jpg" referrerpolicy="no-referrer"></p><h3 id='135-环境使用qtvs'><span>13.5 环境使用qt+vs</span></h3><p><span>打开项目QT VS TOOLS Open Qt Project File 选择 video_system.pro,然后等待项目加载完毕。</span></p><p><img src="snap/13-5-1.jpg" referrerpolicy="no-referrer">
<span>由于项目中用到了ffmpeg和vlc引用了对应的lib库所以在用vs+qt的开发环境中很可能报错提示 映像是不安全的 编译通不过,需要做个设置。</span></p><p><strong><span>解决方法</span></strong></p><ol start='' ><li><span>第一步:打开该项目的“属性页”对话框。</span></li><li><span>第二步:单击“链接器”文件夹。</span></li><li><span>第三步:单击“命令行”属性页。</span></li><li><span>第四步:将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。</span></li><li><span>如果设置完发现还是不行,那应该是没有一开始就设置这个步骤,你需要打开项目以后就设置好这个步骤,再去编译,建议重新解压项目来一遍。</span></li></ol><p><img src="snap/13-5-1.jpg" referrerpolicy="no-referrer"></p><h3 id='136-数据库设置mysql'><span>13.6 数据库设置mysql</span></h3><p><img src="snap/13-6-1.jpg" referrerpolicy="no-referrer">
<span>如果在数据库设置中选择了mysql数据库需要对mysql数据库做个设置就是将编码设置成utf8已设置可以跳过不然很可能数据库无法正常使用。</span></p></div></div>
<script>(function(){var e=document.body.parentElement,t=[],n=null,i=document.body.classList.contains("typora-export-collapse-outline"),r=function(e,t,n){document.addEventListener(e,function(e){if(!e.defaultPrevented)for(var i=e.target;i&&i!=this;i=i.parentNode)if(i.matches(t)){!1===n.call(i,e)&&(e.preventDefault(),e.stopPropagation());break}},!1)};function o(){return e.scrollTop}r("click",".outline-expander",function(e){var t=this.closest(".outline-item-wrapper").classList;return t.contains("outline-item-open")?t.remove("outline-item-open"):t.add("outline-item-open"),d(),!1}),r("click",".outline-item",function(e){var t=this.querySelector(".outline-label");if(location.hash="#"+t.getAttribute("href"),i){var n=this.closest(".outline-item-wrapper").classList;n.contains("outline-item-open")||n.add("outline-item-open"),c(),n.add("outline-item-active")}});var a,s,l=function(){var e=o();n=null;for(var i=0;i<t.length&&t[i][1]-e<60;i++)n=t[i]},c=function(){document.querySelectorAll(".outline-item-active").forEach(e=>e.classList.remove("outline-item-active")),document.querySelectorAll(".outline-item-single.outline-item-open").forEach(e=>e.classList.remove("outline-item-open"))},d=function(){if(n){c();var e=document.querySelector('.outline-label[href="#'+(CSS.escape?CSS.escape(n[0]):n[0])+'"]');if(e)if(i){var t=e.closest(".outline-item-open>ul>.outline-item-wrapper");if(t)t.classList.add("outline-item-active");else{for(var r=(e=e.closest(".outline-item-wrapper")).parentElement.closest(".outline-item-wrapper");r;)r=(e=r).parentElement.closest(".outline-item-wrapper");e.classList.add("outline-item-active")}}else e.closest(".outline-item-wrapper").classList.add("outline-item-active")}};window.addEventListener("scroll",function(e){a&&clearTimeout(a),a=setTimeout(function(){l(),d()},300)});var u=function(){s=setTimeout(function(){!function(){t=[];var e=o();document.querySelector("#write").querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(n=>{var i=n.getAttribute("id");t.push([i,e+n.getBoundingClientRect().y])})}(),l(),d()},300)};window.addEventListener("resize",function(e){s&&clearTimeout(s),u()}),u()})();</script></body>
</html>