hldy_vue/public/static/tums-player/tums-player使用说明.html

367 lines
160 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>tums-player使用说明</title><style type='text/css'>html {overflow-x: initial !important;}:root { --node-fill: #ECECFF; --node-border: #CCCCFF; --note-fill: #fff5ad; --note-border: #aaaa33; --cluster-fill: #ffffde !important; --cluster-border: #aaaa33 !important; }
.mermaid .label { color: var(--text-color); }
.node rect, .node circle, .node ellipse, .node polygon { fill: var(--node-fill); stroke: var(--node-border); stroke-width: 1px; }
.edgePath .path { stroke: var(--text-color); }
.edgeLabel { background-color: var(--bg-color); }
.cluster rect { fill: rgb(255, 255, 222) !important; rx: 4 !important; stroke: rgb(170, 170, 51) !important; stroke-width: 1px !important; }
.cluster text { fill: var(--text-color); }
.actor { stroke: var(--node-border); fill: var(--node-fill); }
text.actor { fill: var(--text-color); stroke: none; }
.actor-line { stroke: grey; }
.messageLine0 { stroke-width: 1.5; stroke: var(--text-color); }
.messageLine1 { stroke-width: 1.5; stroke: var(--text-color); }
#arrowhead { fill: var(--text-color); }
#crosshead path { fill: var(--text-color) !important; stroke: var(--text-color) !important; }
.messageText { fill: var(--text-color); stroke: none; }
.labelBox { stroke: var(--node-border); fill: var(--node-fill); }
.labelText { fill: var(--text-color); stroke: none; }
.loopText { fill: var(--text-color); stroke: none; }
.loopLine { stroke-width: 2; stroke: var(--node-border); }
.note { stroke: var(--note-border); fill: var(--note-fill); }
.noteText { fill: var(--text-color); stroke: none; font-size: 14px; }
.section { stroke: none; opacity: 0.2; }
.section0 { fill: rgba(102, 102, 255, 0.49); }
.section2 { fill: rgb(255, 244, 0); }
.section1, .section3 { fill: white; opacity: 0.2; }
.sectionTitle0 { fill: var(--text-color); }
.sectionTitle1 { fill: var(--text-color); }
.sectionTitle2 { fill: var(--text-color); }
.sectionTitle3 { fill: var(--text-color); }
.sectionTitle { text-anchor: start; font-size: 11px; }
.grid .tick { stroke: lightgrey; opacity: 0.3; shape-rendering: crispedges; }
.grid path { stroke-width: 0; }
.today { fill: none; stroke: red; stroke-width: 2px; }
.task { stroke-width: 2; }
.taskText { text-anchor: middle; font-size: 11px; }
.taskTextOutsideRight { fill: black; text-anchor: start; font-size: 11px; }
.taskTextOutsideLeft { fill: black; text-anchor: end; font-size: 11px; }
.taskText0, .taskText1, .taskText2, .taskText3 { fill: white; }
.task0, .task1, .task2, .task3 { fill: rgb(138, 144, 221); stroke: rgb(83, 79, 188); }
.taskTextOutside0, .taskTextOutside2 { fill: var(--text-color); }
.taskTextOutside1, .taskTextOutside3 { fill: var(--text-color); }
.active0, .active1, .active2, .active3 { fill: rgb(191, 199, 255); stroke: rgb(83, 79, 188); }
.activeText0, .activeText1, .activeText2, .activeText3 { fill: black !important; }
.done0, .done1, .done2, .done3 { stroke: grey; fill: lightgrey; stroke-width: 2; }
.doneText0, .doneText1, .doneText2, .doneText3 { fill: black !important; }
.crit0, .crit1, .crit2, .crit3 { stroke: rgb(255, 136, 136); fill: red; stroke-width: 2; }
.activeCrit0, .activeCrit1, .activeCrit2, .activeCrit3 { stroke: rgb(255, 136, 136); fill: rgb(191, 199, 255); stroke-width: 2; }
.doneCrit0, .doneCrit1, .doneCrit2, .doneCrit3 { stroke: rgb(255, 136, 136); fill: lightgrey; stroke-width: 2; cursor: pointer; shape-rendering: crispedges; }
.doneCritText0, .doneCritText1, .doneCritText2, .doneCritText3 { fill: black !important; }
.activeCritText0, .activeCritText1, .activeCritText2, .activeCritText3 { fill: black !important; }
.titleText { text-anchor: middle; font-size: 18px; fill: black; }
.node text { font-size: 14px; }
div.mermaidTooltip { position: absolute; text-align: center; max-width: 200px; padding: 2px; font-size: 12px; background: rgb(255, 255, 222); border: 1px solid rgb(170, 170, 51); border-radius: 2px; pointer-events: none; z-index: 100; }
#write .md-diagram-panel .md-diagram-panel-preview div { width: initial; }
:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; }
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: 40px; }
#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; }
@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; }
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: 2; }
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 !important; }
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-diagram-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 { 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; }
#write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
.typora-export * { -webkit-print-color-adjust: exact; }
html.blink-to-pdf { font-size: 13px; }
.typora-export #write { padding-left: 32px; padding-right: 32px; padding-bottom: 0px; break-after: avoid; }
.typora-export #write::after { height: 0px; }
}
.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; }
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; }
[contenteditable="true"]:active, [contenteditable="true"]: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-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: hidden; 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; zoom: 90%; 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; }
.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="mermaid"] svg, [lang="flow"] 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; }
.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); }
@media print {
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}
:root { --side-bar-bg-color: #fafafa; --control-text-color: #777; }
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: 0px auto; padding: 30px 30px 100px; }
#write > ul:first-child, #write > ol:first-child { margin-top: 30px; }
a { color: rgb(65, 131, 196); }
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 { padding-bottom: 0.3em; font-size: 2.25em; line-height: 1.2; border-bottom: 1px solid rgb(238, 238, 238); }
h2 { padding-bottom: 0.3em; font-size: 1.75em; line-height: 1.225; border-bottom: 1px solid rgb(238, 238, 238); }
h3 { font-size: 1.5em; line-height: 1.43; }
h4 { font-size: 1.25em; }
h5 { font-size: 1em; }
h6 { font-size: 1em; color: rgb(119, 119, 119); }
p, blockquote, ul, ol, dl, table { margin: 0.8em 0px; }
li > ol, li > ul { margin: 0px; }
hr { height: 2px; padding: 0px; margin: 16px 0px; background-color: rgb(231, 231, 231); border: 0px 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: 0px; }
ul:last-child, ol:last-child { margin-bottom: 0px; }
blockquote { border-left: 4px solid rgb(223, 226, 229); padding: 0px 15px; color: rgb(119, 119, 119); }
blockquote blockquote { padding-right: 0px; }
table { padding: 0px; word-break: initial; }
table tr { border-top: 1px solid rgb(223, 226, 229); margin: 0px; padding: 0px; }
table tr:nth-child(2n), thead { background-color: rgb(248, 248, 248); }
table tr th { font-weight: bold; border-width: 1px 1px 0px; border-top-style: solid; border-right-style: solid; border-left-style: solid; border-top-color: rgb(223, 226, 229); border-right-color: rgb(223, 226, 229); border-left-color: rgb(223, 226, 229); border-image: initial; border-bottom-style: initial; border-bottom-color: initial; text-align: left; margin: 0px; padding: 6px 13px; }
table tr td { border: 1px solid rgb(223, 226, 229); text-align: left; margin: 0px; padding: 6px 13px; }
table tr th:first-child, table tr td:first-child { margin-top: 0px; }
table tr th:last-child, table tr td:last-child { margin-bottom: 0px; }
.CodeMirror-lines { padding-left: 4px; }
.code-tooltip { box-shadow: rgba(0, 28, 36, 0.3) 0px 1px 1px 0px; border-top: 1px solid rgb(238, 242, 242); }
.md-fences, code, tt { border: 1px solid rgb(231, 234, 237); background-color: rgb(248, 248, 248); border-radius: 3px; padding: 2px 4px 0px; font-size: 0.9em; }
code { background-color: rgb(243, 244, 244); padding: 0px 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 { break-inside: avoid; }
pre { overflow-wrap: break-word; }
}
.md-fences { background-color: rgb(248, 248, 248); }
#write pre.md-meta-block { padding: 1rem; font-size: 85%; line-height: 1.45; background-color: rgb(247, 247, 247); border: 0px; border-radius: 3px; color: rgb(119, 119, 119); margin-top: 0px !important; }
.mathjax-block > .code-tooltip { bottom: 0.375rem; }
.md-mathjax-midline { background: rgb(250, 250, 250); }
#write > h3.md-focus::before { left: -1.5625rem; top: 0.375rem; }
#write > h4.md-focus::before { left: -1.5625rem; top: 0.285714rem; }
#write > h5.md-focus::before { left: -1.5625rem; top: 0.285714rem; }
#write > h6.md-focus::before { left: -1.5625rem; top: 0.285714rem; }
.md-image > .md-meta { border-radius: 3px; padding: 2px 0px 0px 4px; font-size: 0.9em; color: inherit; }
.md-tag { color: rgb(167, 167, 167); opacity: 1; }
.md-toc { margin-top: 20px; padding-bottom: 20px; }
.sidebar-tabs { border-bottom: none; }
#typora-quick-open { border: 1px solid rgb(221, 221, 221); background-color: rgb(248, 248, 248); }
#typora-quick-open-item { background-color: rgb(250, 250, 250); border-color: rgb(254, 254, 254) rgb(229, 229, 229) rgb(229, 229, 229) rgb(238, 238, 238); border-style: solid; border-width: 1px; }
.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: var(--side-bar-bg-color); }
.md-lang { color: rgb(180, 101, 77); }
.html-for-mac .context-menu { --item-hover-bg-color: #E6F0FE; }
#md-notification .btn { border: 0px; }
.dropdown-menu .divider { border-color: rgb(229, 229, 229); }
</style>
</head>
<body class='typora-export os-windows' >
<div id='write' class = 'is-node'><h1><a name="tums-player-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E" class="md-header-anchor"></a><span>tums-player 使用说明</span></h1><div class='md-toc' mdtype='toc'><p class="md-toc-content"><span class="md-toc-item md-toc-h1" data-ref="n0"><a class="md-toc-inner" style="cursor: pointer;" href="#tums-player-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">tums-player 使用说明</a></span><span class="md-toc-item md-toc-h2" data-ref="n35"><a class="md-toc-inner" style="cursor: pointer;" href="#1.-%E7%AE%80%E4%BB%8B">1. 简介</a></span><span class="md-toc-item md-toc-h2" data-ref="n45"><a class="md-toc-inner" style="cursor: pointer;" href="#2.-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95">2. 使用方法</a></span><span class="md-toc-item md-toc-h3" data-ref="n46"><a class="md-toc-inner" style="cursor: pointer;" href="#2.1-%E6%9C%AC%E5%9C%B0%E8%BF%90%E8%A1%8Cdemo">2.1 本地运行demo</a></span><span class="md-toc-item md-toc-h3" data-ref="n54"><a class="md-toc-inner" style="cursor: pointer;" href="#2.2-%E6%AD%A3%E5%BC%8F%E9%83%A8%E7%BD%B2">2.2 正式部署</a></span><span class="md-toc-item md-toc-h2" data-ref="n65"><a class="md-toc-inner" style="cursor: pointer;" href="#3.-%E4%BB%A3%E7%A0%81%E7%A4%BA%E4%BE%8B------demo.html">3. 代码示例——demo.html</a></span><span class="md-toc-item md-toc-h2" data-ref="n78"><a class="md-toc-inner" style="cursor: pointer;" href="#4.-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">4. 使用说明</a></span><span class="md-toc-item md-toc-h3" data-ref="n79"><a class="md-toc-inner" style="cursor: pointer;" href="#4.1-%E5%8F%82%E6%95%B0">4.1 参数</a></span><span class="md-toc-item md-toc-h3" data-ref="n331"><a class="md-toc-inner" style="cursor: pointer;" href="#4.2-%E4%BA%8B%E4%BB%B6">4.2 事件</a></span><span class="md-toc-item md-toc-h3" data-ref="n386"><a class="md-toc-inner" style="cursor: pointer;" href="#4.3-%E6%96%B9%E6%B3%95">4.3 方法</a></span><span class="md-toc-item md-toc-h2" data-ref="n616"><a class="md-toc-inner" style="cursor: pointer;" href="#5.-%E6%8E%A5%E5%85%A5tp-link%E5%95%86%E7%94%A8%E4%BA%91%E5%B9%B3%E5%8F%B0%E6%8C%87%E5%8D%97">5. 接入TP-LINK商用云平台指南</a></span><span class="md-toc-item md-toc-h3" data-ref="n628"><a class="md-toc-inner" style="cursor: pointer;" href="#5.1-%E9%A2%84%E8%A7%88%E6%B5%81%E7%A8%8B">5.1 预览流程</a></span><span class="md-toc-item md-toc-h3" data-ref="n636"><a class="md-toc-inner" style="cursor: pointer;" href="#5.2-%E5%9B%9E%E6%94%BE%E6%B5%81%E7%A8%8B">5.2 回放流程</a></span><span class="md-toc-item md-toc-h2" data-ref="n644"><a class="md-toc-inner" style="cursor: pointer;" href="#6.%E6%8E%A5%E5%85%A5tp-link-tums%E5%B9%B3%E5%8F%B0%E6%8C%87%E5%8D%97">6.接入TP-LINK TUMS平台指南</a></span><span class="md-toc-item md-toc-h2" data-ref="n657"><a class="md-toc-inner" style="cursor: pointer;" href="#7.-%E9%99%84%E5%BD%95">7. 附录</a></span><span class="md-toc-item md-toc-h3" data-ref="n658"><a class="md-toc-inner" style="cursor: pointer;" href="#7.1-%E9%94%99%E8%AF%AF%E7%A0%81">7.1 错误码</a></span><span class="md-toc-item md-toc-h3" data-ref="n795"><a class="md-toc-inner" style="cursor: pointer;" href="#7.2-%E4%BA%8B%E4%BB%B6%E7%B1%BB%E5%9E%8B%E7%BA%A6%E6%9D%9F">7.2 事件类型约束</a></span></p></div><figure><table><thead><tr><th><span>版本</span></th><th><span>备注</span></th></tr></thead><tbody><tr><td><span>V1.0.0</span></td><td><span>1. 创建文档</span><br><span>2. 支持预览功能</span></td></tr><tr><td><span>V1.1.0</span></td><td><span>1. 增加商云接口调用流程</span><br><span>2. 增加回放功能相关参数和方法</span></td></tr><tr><td><span>V1.2.0</span></td><td><span>1. 增加语音对讲相关参数和方法</span></td></tr><tr><td><span>V1.3.0</span></td><td><span>1. 增加本地平台回放功能</span></td></tr><tr><td><span>V1.4.0</span></td><td><span>1. 增加鱼眼画面显示模式相关参数和方法</span></td></tr><tr><td><span>V1.5.0</span></td><td><span>1. 增加云台功能相关参数和方法</span></td></tr><tr><td><span>V1.5.1</span></td><td><span>1. 补充语音对讲详细参数说明</span></td></tr><tr><td><span>V2.0.0</span></td><td><span>1. 增加webcodecs解码方案及相关参数配置</span></td></tr><tr><td><span>V2.0.1</span></td><td><span>1. 增加画面旋转、镜头遮蔽、画面镜像功能</span></td></tr></tbody></table></figure><p>&nbsp;</p><h2><a name="1.-%E7%AE%80%E4%BB%8B" class="md-header-anchor"></a><span>1. 简介</span></h2><p><span>tums-player是基于TP-LINK平台封装的视频播放组件使用过程中不必学习专业的业务概念更不用调用繁琐的接口能够以极简的嵌入方式快速在应用中集成视频功能。</span></p><p><span>覆盖的平台包含H5/web</span></p><p><span>浏览器支持:</span></p><ul><li><span>Chrome 60+</span></li><li><span>FireFox 55+</span></li></ul><p>&nbsp;</p><h2><a name="2.-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95" class="md-header-anchor"></a><span>2. 使用方法</span></h2><h3><a name="2.1-%E6%9C%AC%E5%9C%B0%E8%BF%90%E8%A1%8Cdemo" class="md-header-anchor"></a><span>2.1 本地运行demo</span></h3><ol start='' ><li><span>下载tums-player-demo</span></li><li><span>解压代码</span></li><li><span>参考readme.pdf启动demo</span></li></ol><h3><a name="2.2-%E6%AD%A3%E5%BC%8F%E9%83%A8%E7%BD%B2" class="md-header-anchor"></a><span>2.2 正式部署</span></h3><ol start='' ><li><span>下载tums-player</span></li><li><span>将压缩包移至服务器或前端项目后解压需注意播放器资源路径要求为xxx/tums-player/</span></li><li><span>参照代码示例开发页面</span></li><li><span>运行服务器使用</span></li></ol><p>&nbsp;</p><h2><a name="3.-%E4%BB%A3%E7%A0%81%E7%A4%BA%E4%BE%8B------demo.html" class="md-header-anchor"></a><span>3. 代码示例——demo.html</span></h2><p><strong><span>创建dom</span></strong></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="html"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="html"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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"></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-tag cm-bracket">&lt;</span><span class="cm-tag">html</span><span class="cm-tag cm-bracket">&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">body</span><span class="cm-tag cm-bracket">&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">div</span> <span class="cm-attribute">id</span>=<span class="cm-string">"video-container"</span><span class="cm-tag cm-bracket">&gt;&lt;/</span><span class="cm-tag">div</span><span class="cm-tag cm-bracket">&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-tag cm-bracket">&lt;/</span><span class="cm-tag">body</span><span class="cm-tag cm-bracket">&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tag cm-bracket">&lt;/</span><span class="cm-tag">html</span><span class="cm-tag cm-bracket">&gt;</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 115px;"></div><div class="CodeMirror-gutters" style="display: none; height: 115px;"></div></div></div></pre><p><strong><span>引入sdk</span></strong></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="html"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="html"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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 class="cm-comment">&lt;!-- 假设sdk在/static/tums-player/路径下 --&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">script</span> <span class="cm-attribute">src</span>=<span class="cm-string">"/static/tums-player/tums-player.umd.min.js"</span><span class="cm-tag cm-bracket">&gt;&lt;/</span><span class="cm-tag">script</span><span class="cm-tag cm-bracket">&gt;</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 46px;"></div><div class="CodeMirror-gutters" style="display: none; height: 46px;"></div></div></div></pre><p><strong><span>初始化播放器</span></strong></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="html" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="html"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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"><span><span></span>x</span></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-tag cm-bracket">&lt;</span><span class="cm-tag">script</span><span class="cm-tag cm-bracket">&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">TumsPlayer</span> <span class="cm-operator">=</span> <span class="cm-variable">window</span>[<span class="cm-string">'tums-player'</span>].<span class="cm-property">default</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">player</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable">TumsPlayer</span>(<span class="cm-string">'video-container'</span>, {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-property">type</span>: <span class="cm-string">'relay'</span>, <span class="cm-comment">// 协议类型rtsp/relay</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-property">url</span>: <span class="cm-string">'https://xxx/requestRelayUrl?token=xxx'</span> <span class="cm-comment">// 取流地址</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">pluginPath</span>: <span class="cm-string">'/static'</span> <span class="cm-comment">// 当sdk资源不在根路径下时需配置pluginPath</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; });</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tag cm-bracket">&lt;/</span><span class="cm-tag">script</span><span class="cm-tag cm-bracket">&gt;</span></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></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">script</span><span class="cm-tag cm-bracket">&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">TumsPlayer</span> <span class="cm-operator">=</span> <span class="cm-variable">window</span>[<span class="cm-string">'tums-player'</span>].<span class="cm-property">default</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">player</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable">TumsPlayer</span>(<span class="cm-string">'video-container'</span>);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">player</span>.<span class="cm-property">init</span>({</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-property">type</span>: <span class="cm-string">'relay'</span>, <span class="cm-comment">// 协议类型rtsp/relay</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-property">url</span>: <span class="cm-string">'https://xxx/requestRelayUrl?token=xxx'</span> <span class="cm-comment">// 取流地址</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; });</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tag cm-bracket">&lt;/</span><span class="cm-tag">script</span><span class="cm-tag cm-bracket">&gt;</span></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;">// 对接TUMS平台</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">script</span><span class="cm-tag cm-bracket">&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">TumsPlayer</span> <span class="cm-operator">=</span> <span class="cm-variable">window</span>[<span class="cm-string">'tums-player'</span>].<span class="cm-property">default</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">var</span> <span class="cm-def">player</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable">TumsPlayer</span>(<span class="cm-string">'video-container'</span>, {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-property">type</span>: <span class="cm-string">'rtsp'</span>, <span class="cm-comment">// 协议类型rtsp/relay</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-property">url</span>: <span class="cm-string">'rtsp://xxx'</span> <span class="cm-comment">// 取流地址</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">socket</span>: <span class="cm-string">'wss://xxx/ws'</span>, <span class="cm-comment">// websocket地址</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">pluginPath</span>: <span class="cm-string">'/static'</span> <span class="cm-comment">// 当sdk资源不在根路径下时需配置pluginPath</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; });</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tag cm-bracket">&lt;/</span><span class="cm-tag">script</span><span class="cm-tag cm-bracket">&gt;</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 667px;"></div><div class="CodeMirror-gutters" style="display: none; height: 667px;"></div></div></div></pre><blockquote><p><span>对接TUMS平台若websocket地址为IP或缺少TLS/SSL证书的域名首次连接会出现失败的情况需浏览器先主动访问</span><a href='https://xxx/ws' target='_blank' class='url'>https://xxx/ws</a><span> (wss替换为https),然后选择高级-继续前往对当前https地址进行授权</span></p></blockquote><p><strong><span>方法调用</span></strong></p><p><span>示例:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="javascript"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="javascript"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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-variable">player</span>.<span class="cm-property">start</span>(); <span class="cm-comment">// 开始播放(autoplay为false时可调用此方法)</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable">player</span>.<span class="cm-property">pause</span>(); <span class="cm-comment">// 暂停</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable">player</span>.<span class="cm-property">play</span>(); <span class="cm-comment">// 继续播放</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable">player</span>.<span class="cm-property">destroy</span>().<span class="cm-property">then</span>(() <span class="cm-operator">=&gt;</span> {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-comment">// do something</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}); <span class="cm-comment">// 销毁</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable">player</span>.<span class="cm-property">on</span>(<span class="cm-string">'ready'</span>, (<span class="cm-def">evt</span>) <span class="cm-operator">=&gt;</span> {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">console</span>.<span class="cm-property">log</span>(<span class="cm-variable-2">evt</span>.<span class="cm-property">detail</span>);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}); <span class="cm-comment">// 事件监听</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 207px;"></div><div class="CodeMirror-gutters" style="display: none; height: 207px;"></div></div></div></pre><p>&nbsp;</p><h2><a name="4.-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E" class="md-header-anchor"></a><span>4. 使用说明</span></h2><h3><a name="4.1-%E5%8F%82%E6%95%B0" class="md-header-anchor"></a><span>4.1 参数</span></h3><p><span>TumsPlayer类</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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;">TumsPlayer(node, options);</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><p><span>options说明</span></p><figure><table><thead><tr><th><span>参数</span></th><th><span>说明</span></th><th><span>类型</span></th><th><span>可选值</span></th><th><span>默认值</span></th><th><span>是否必选</span></th></tr></thead><tbody><tr><td><span>type</span></td><td><span>视频流类型。目前取值有: rtsp对接TP-LINK TUMS平台使用 relay对接TP-LINK商用云平台使用</span></td><td><span>String</span></td><td><span>rtsp/relay</span></td><td><span>rtsp</span></td><td><span>Y</span></td></tr><tr><td><span>url</span></td><td><span>取流地址: TP-LINK TUMS平台使用提供的getPreviewUrl/getPlaybackUrl/getMultitransUrl接口获取 TP-LINK商用云平台通过提供的requestStreamUrl接口获取</span></td><td><span>String</span></td><td><span>--</span></td><td><span>--</span></td><td><span>Y</span></td></tr><tr><td><span>socket</span></td><td><span>websocket连接地址type为rtsp时必填</span></td><td><span>String</span></td><td><span>--</span></td><td><span>--</span></td><td><span>N</span></td></tr><tr><td><span>decoderType</span></td><td><span>解码类型目前取值有wasmwebAssembly软解webcodecswebcodecs API硬解仅少数浏览器支持</span><br><span>未配置此参数会自动根据当前浏览器环境使用对应解码方式。</span><br><span>配置此参数会判断当前浏览器是否支持,若不支持会出现报错。</span></td><td><span>String</span></td><td><span>wasm/webcodecs</span></td><td><span>--</span></td><td><span>N</span></td></tr><tr><td><span>pluginPath</span></td><td><span>sdk资源地址默认是在根路径下。比如sdk路径为/static/tums-player则pluginPath值为/static</span></td><td><span>String</span></td><td><span>--</span></td><td><span>/</span></td><td><span>N</span></td></tr><tr><td><span>autoplay</span></td><td><span>自动播放</span></td><td><span>Boolean</span></td><td><span>--</span></td><td><span>true</span></td><td><span>N</span></td></tr><tr><td><span>resolution</span></td><td><span>分辨率目前取值有VGA子码流HD主码流初始传入此值仅用于标记当前实例的分辨率实际播放效果以url为准</span></td><td><span>String</span></td><td><span>VGA/HD</span></td><td><span>&#39;&#39;</span></td><td><span>N</span></td></tr><tr><td><span>cover</span></td><td><span>显示的画面是否覆盖父节点宽高,默认按画面原始比例显示</span></td><td><span>Boolean</span></td><td><span>--</span></td><td><span>false</span></td><td><span>N</span></td></tr><tr><td><span>streamType</span></td><td><span>流类型目前取值有video预览sdvod回放仅支持TP-LINK商用云平台</span></td><td><span>String</span></td><td><span>video/sdvod</span></td><td><span>video</span></td><td><span>N</span></td></tr><tr><td><span>userId</span></td><td><span>searchVideo接口返回的用户idtype为relay且streamType为sdvod时必填</span></td><td><span>Number</span></td><td><span>--</span></td><td><span>--</span></td><td><span>N</span></td></tr><tr><td><span>startTime</span></td><td><span>回放开始时间戳见注1</span></td><td><span>Number</span></td><td><span>--</span></td><td><span>当天00:00</span></td><td><span>N</span></td></tr><tr><td><span>endTime</span></td><td><span>回放结束时间戳</span></td><td><span>Number</span></td><td><span>--</span></td><td><span>--</span></td><td><span>N</span></td></tr><tr><td><span>eventType</span></td><td><span>回放事件类型(仅支持TP-LINK商用云平台 TP-LINK TUMS平台 需要在获取回放url时设置)</span></td><td><span>Number[]</span></td><td><span>见注2</span></td><td><span>[1, 2]</span></td><td><span>N</span></td></tr><tr><td><span>scale</span></td><td><span>回放倍速</span></td><td><span>Number</span></td><td><span>[0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16]</span></td><td><span>1</span></td><td><span>N</span></td></tr><tr><td><span>talkEnable</span></td><td><span>语音对讲使能</span></td><td><span>Boolean</span></td><td><span>--</span></td><td><span>true</span></td><td><span>N</span></td></tr><tr><td><span>screenshotEnable</span></td><td><span>截图使能</span></td><td><span>Boolean</span></td><td><span>--</span></td><td><span>true</span></td><td><span>N</span></td></tr><tr><td><span>volume</span></td><td><span>音量</span></td><td><span>Number</span></td><td><span>[1, 100]</span></td><td><span>50</span></td><td><span>N</span></td></tr><tr><td><span>fishEyeDisplayMode</span></td><td><span>鱼眼画面显示模式</span></td><td><span>String</span></td><td><span>&#39;ORIGIN&#39;: 原图;</span><br><span>FISHEYE_360D顶装360度全景</span><br><span>FISHEYE_180D顶装180度全景</span><br><span>FISHEYE_WIN_PLANE_T</span><br><span>OP_QUAD顶装四分屏</span><br><span>FISHEYE_LONGITUDE壁装全景拉伸</span></td><td><span>ORIGIN</span></td><td><span>N</span></td></tr><tr><td><span>authSessionId</span></td><td><span>鉴权Id(/tums/account/v1/login登录接口获取的sessionIdTP-LINK TUMS平台回放功能必选)</span></td><td><span>String</span></td><td><span>--</span></td><td><span>&#39;&#39;</span></td><td><span>N</span></td></tr><tr><td><span>queryAddress</span></td><td><span>回放api访问前缀(TP-LINK TUMS平台回放功能必选)</span></td><td><span>String</span></td><td><span>--</span></td><td><span>&#39;&#39;</span></td><td><span>N</span></td></tr><tr><td><span>videoSessionId</span></td><td><span>回放功能视频数据会话id(通过addPlaybackChn接口获取,TP-LINK TUMS平台回放功能必选)</span></td><td><span>String</span></td><td><span>--</span></td><td><span>&#39;&#39;</span></td><td><span>N</span></td></tr><tr><td><span>videoDevId</span></td><td><span>设备id(TP-LINK TUMS平台回放功能必选)</span></td><td><span>String</span></td><td><span>--</span></td><td><span>&#39;&#39;</span></td><td><span>N</span></td></tr><tr><td><span>storageDevId</span></td><td><span>回放数据存储设备id</span></td><td><span>String</span></td><td><span>--</span></td><td><span>&#39;&#39;</span></td><td><span>N</span></td></tr><tr><td><span>useMultitrans</span></td><td><span>本地平台回放功能是否使用Multitrans协议</span></td><td><span>Boolean</span></td><td><span>--</span></td><td><span>false</span></td><td><span>N</span></td></tr></tbody></table></figure><p>&nbsp;</p><p><span>对接TP-LINK商用云平台使用云台功能需传递以下参数</span></p><figure><table><thead><tr><th><span>参数</span></th><th><span>说明</span></th><th><span>类型</span></th><th><span>可选值</span></th><th><span>默认值</span></th><th><span>是否必选</span></th></tr></thead><tbody><tr><td><span>appKey</span></td><td><span>从商用云平台获取的开发者密钥ID (AK)</span></td><td><span>String</span></td><td><span>-</span></td><td><span>-</span></td><td><span>Y</span></td></tr><tr><td><span>appSecret</span></td><td><span>从商用云平台获取的开发者密钥SK</span></td><td><span>String</span></td><td><span>-</span></td><td><span>-</span></td><td><span>Y</span></td></tr><tr><td><span>proxyServer</span></td><td><span>商用云平台地址</span></td><td><span>String</span></td><td><span>-</span></td><td><span>&#39;</span><a href='https://api-smbcloud.tplinkcloud.com.cn/' target='_blank' class='url'>https://api-smbcloud.tplinkcloud.com.cn/</a><span>&#39;</span></td><td><span>N</span></td></tr></tbody></table></figure><p><span>使用镜头遮蔽、画面镜像、画面旋转时需要传递以下参数:</span></p><figure><table><thead><tr><th><span>参数</span></th><th><span>说明</span></th><th><span>类型</span></th><th><span>可选值</span></th><th><span>默认值</span></th><th><span>是否必选</span></th></tr></thead><tbody><tr><td><span>parentId</span></td><td><span>nvr设备id</span></td><td><span>String</span></td><td><span>-</span></td><td><span>-</span></td><td><span>ipc通过nvr接入时需传递</span></td></tr><tr><td><span>channel</span></td><td><span>ipc通道号</span></td><td><span>Number</span></td><td><span>-</span></td><td><span>-</span></td><td><span>ipc通过nvr接入时需传递</span></td></tr><tr><td><span>devId</span></td><td><span>ipc设备id</span></td><td><span>String</span></td><td><span>-</span></td><td><span>-</span></td><td><span>Y</span></td></tr></tbody></table></figure><p><span>注:</span></p><ol start='' ><li><p><span>时间戳指从1970年1月1日开始所经过的毫秒数。</span></p></li><li><p><span>事件类型定义需要区分直连IPC和NVR通道。</span></p><p><span>直连IPC取值范围见6.2</span></p><p><span>数组包含指定事件类型即可。eg: [1, 2, 3] 表示同时回放定时、移动侦测和遮挡侦测类型。</span></p><p><span>NVR通道</span></p><p><span>目前仅支持1 定时类型2 动检类型。传值[1, 0]表示只回放定时类型,[2, 0]表示只回放动检类型,[3, 0]表示同时回放两种类型。</span></p></li></ol><p>&nbsp;</p><h3><a name="4.2-%E4%BA%8B%E4%BB%B6" class="md-header-anchor"></a><span>4.2 事件</span></h3><figure><table><thead><tr><th><span>事件</span></th><th><span>说明</span></th><th><span>回调参数</span></th></tr></thead><tbody><tr><td><span>ready</span></td><td><span>当播放器实例化完成时触发</span></td><td><span>event: {detail: player实例 }</span></td></tr><tr><td><span>play</span></td><td><span>当媒介数据将要开始播放时触发</span></td><td><span>event: {detail: player实例 }</span></td></tr><tr><td><span>pause</span></td><td><span>当媒介数据暂停时触发</span></td><td><span>event: {detail: player实例 }</span></td></tr><tr><td><span>stream</span></td><td><span>开始推流时触发</span></td><td><span>event: {detail: player实例 }</span></td></tr><tr><td><span>playing</span></td><td><span>当媒介数据已开始播放时触发</span></td><td><span>event: {detail: player实例 }</span></td></tr><tr><td><span>error</span></td><td><span>发生错误时触发</span></td><td><span>event: {detail: {code: 0, message: &#39;&#39;, type: &#39;audio&#39;/&#39;video&#39;}}code详见错误码列表 type默认为video</span></td></tr><tr><td><span>warning</span></td><td><span>发生警告时触发</span></td><td><span>event: {detail: {code: 0, message: &#39;&#39;}}code详见错误码列表</span></td></tr><tr><td><span>disconnected</span></td><td><span>与服务器断开连接时触发</span></td><td><span>event: { detail: { code: 0, reason: &#39;&#39; } }</span></td></tr><tr><td><span>ended</span></td><td><span>当媒介数据播放结束时触发</span></td><td><span>event: {detail: player实例 }</span></td></tr><tr><td><span>zoom</span></td><td><span>当画面放大时触发</span></td><td><span>event: {detail: {scale: 放大的倍率见注3} }</span></td></tr><tr><td><span>videoRecordFinished</span></td><td><span>录制文件下载时触发目前录制超过10min将会自动下载</span></td><td><span></span></td></tr></tbody></table></figure><p><span>注:</span></p><ol start='3' ><li><span>进入电子放大状态后,在画面中单击鼠标左键放大画面,右键缩小画面,也可使用滚轮操作;放大范围:[1, 5]粒度为0.25。</span></li></ol><p>&nbsp;</p><h3><a name="4.3-%E6%96%B9%E6%B3%95" class="md-header-anchor"></a><span>4.3 方法</span></h3><figure><table><thead><tr><th><span>方法</span></th><th><span>说明</span></th><th><span>参数</span></th><th><span>返回值</span></th></tr></thead><tbody><tr><td><span>init</span></td><td><span>播放器初始化</span></td><td><span>同options</span></td><td><span></span></td></tr><tr><td><span>destroy</span></td><td><span>播放器销毁</span></td><td><span></span></td><td><span>Promise</span></td></tr><tr><td><span>start</span></td><td><span>开始播放</span></td><td><span></span></td><td><span></span></td></tr><tr><td><span>stop</span></td><td><span>停止播放</span></td><td><span></span></td><td><span></span></td></tr><tr><td><span>pause</span></td><td><span>暂停播放</span></td><td><span></span></td><td><span></span></td></tr><tr><td><span>play</span></td><td><span>继续播放</span></td><td><span></span></td><td><span></span></td></tr><tr><td><span>fullscreen</span></td><td><span>全屏放大</span></td><td><span>(controlEl: HtmlDomElement, forceRotate: Boolean)</span><br><span>controlEl: 全屏放大后在画面中插入的dom节点可选</span><br><span>forceRotate: 是否强制横屏默认为false</span></td><td><span></span></td></tr><tr><td><span>exitFullscreen</span></td><td><span>退出全屏</span></td><td><span></span></td><td><span></span></td></tr><tr><td><span>screenshot</span></td><td><span>视频截图</span></td><td><span>(download: Boolean)</span><br><span>download: 是否自动下载截图默认为true</span></td><td><span>base64格式图片数据png格式</span></td></tr><tr><td><span>on</span></td><td><span>监听事件,与事件列表对应</span></td><td><span>(eventName: String, callback: Function)</span></td><td><span></span></td></tr><tr><td><span>off</span></td><td><span>注销事件</span></td><td><span>(eventName: String, callback: Function)</span></td><td><span></span></td></tr><tr><td><span>setResolution</span></td><td><span>设置分辨率</span></td><td><span>(url: String, resolution: String)</span><br><span>url: 新分辨率对应视频流地址,</span><br><span>resolution: VGA(子码流)、HD主码流可选</span></td><td><span></span></td></tr><tr><td><span>setPlaybackConfig</span></td><td><span>设置回放参数</span></td><td><span>(options: Object)</span><br><span>options参数内容如下</span><br><span>startTime、endTime、scale、eventType可任意组合</span></td><td><span></span></td></tr><tr><td><span>getPlaybackTime</span></td><td><span>获取当前回放时间戳</span></td><td><span></span></td><td><span>timestampNumber</span></td></tr><tr><td><span>toggleZoomState</span></td><td><span>切换电子放大状态见注3</span></td><td><span>(state: Number)</span><br><span>state: 1进入放大状态0退出放大状态</span></td><td><span></span></td></tr><tr><td><span>setZoomScale</span></td><td><span>设置放大倍率</span></td><td><span>(scale: Number)</span><br><span>scale: 取值[1, 5],超过范围的值不生效</span></td><td><span></span></td></tr><tr><td><span>startVoiceIntercom</span></td><td><span>开始语音对讲</span></td><td><span>(options: Object</span><br><span>详细内容见下方语音对讲参数说明</span></td><td><span></span></td></tr><tr><td><span>stopVoiceIntercom</span></td><td><span>结束语音对讲</span></td><td><span></span></td><td><span></span></td></tr><tr><td><span>playAudio</span></td><td><span>移动端需在用户操作页面触发touch等事件后在事件回调中执行此方法开始播放音频</span></td><td><span></span></td><td><span></span></td></tr><tr><td><span>getVolume</span></td><td><span>获取当前播放音量</span></td><td><span></span></td><td><span>volume: Number</span></td></tr><tr><td><span>setVolume</span></td><td><span>设置播放音量</span></td><td><span>(volume: Number)</span><br><span>volume: 取值[0, 100]</span></td><td><span></span></td></tr><tr><td><span>setFishEyeDisplayMode</span></td><td><span>设置鱼眼画面显示模式</span></td><td><span>(mode: String)</span></td><td><span></span></td></tr><tr><td><span>startRecording</span></td><td><span>开启预览录像。受浏览器内存限制建议录像时间不超过1分钟</span></td><td><span>(options: Object)</span><br><span>options参数内容如下</span><br><span>micStream: Boolean是否录制麦克风声音默认false</span></td><td><span>Promise</span><br><span>开始录像后resolve</span></td></tr><tr><td><span>stopRecording</span></td><td><span>停止预览录像并下载录像文件</span></td><td><span>(fileName: String, download: Boolean)</span><br><span>fileName: 文件名,最终下载文件名格式为</span><code>${文件名}_${时间戳}.mp4</code><br><span>download: 是否自动下载文件默认true</span></td><td><span>Promise</span><br><span>返回录像文件blob类型数据</span></td></tr><tr><td><span>getRecordInfo</span></td><td><span>获取预览录像信息</span></td><td><span></span></td><td><span>recordInfo: Object</span><br><span>包含参数内容如下:</span><br><span>time: 录像时间,单位毫秒</span><br><span>size: 录像文件大小单位kb</span></td></tr><tr><td><span>getLensMaskValue</span></td><td><span>获取镜头遮蔽状态</span></td><td><span></span></td><td><span>Promise</span><br><span>设备不支持时将返回error_code信息</span><br><span>设备支持时可从 result.lens_mask.lens_mask_info.enabled中取得具体状态</span></td></tr><tr><td><span>setLensMaskValue</span></td><td><span>设置镜头遮蔽状态</span></td><td><span>(maskStatus: String)</span><br><span>maskStatus: on/off</span></td><td><span>Promise</span><br><span>根据返回的error_code信息判断设置成功或者失败</span></td></tr><tr><td><span>getImageSwitch</span></td><td><span>获取图像切换配置,目前可包含镜像和画面旋转</span></td><td><span></span></td><td><span>Promise</span><br><span>失败时返回相关error_code信息</span><br><span>成功时可以通过result.flip_type和result.rotate_type分别取得镜像状态和旋转状态。</span></td></tr><tr><td><span>saveImageSwitch</span></td><td><span>设置图像切换配置,目前可包含镜像和画面旋转</span></td><td><span>(config: Object)</span><br><span>config.flip_type: 镜像状态</span><br><span>取值:</span><br><span>off关闭</span><br><span>left_and_right左右</span><br><span>up_and_down上下</span><br><span>center中心</span><br><span>config.rotate_type旋转状态</span><br><span>off :关闭</span><br><span>anticlockwise_180 逆时针旋转180</span><br><span>clockwise_90 顺时针旋转90</span><br><span>anticlockwise_90 逆时针旋转90</span></td><td><span>Promise</span><br><span>根据返回的error_code信息判断设置成功或者失败</span></td></tr><tr><td><span>getModuleSpec</span></td><td><span>获取设备能力集目前包含镜像和镜头遮蔽画面旋转默认全部ipc均支持</span></td><td><span></span></td><td><span>Promise</span><br><span>失败时返回相关error_code信息</span><br><span>成功时返回data</span><br><span>data. lensMaskEnable: 镜头遮蔽使能</span><br><span>data. flipEnable: 画面镜像使能</span><br><span>data.rotateEnable: 画面旋转使能</span></td></tr></tbody></table></figure><p>&nbsp;</p><p><strong><span>语音对讲参数说明</span></strong></p><p><span>对接TP-LINK商用云平台</span></p><figure><table><thead><tr><th><span>参数</span></th><th><span>说明</span></th><th><span>类型</span></th><th><span>是否必选</span></th></tr></thead><tbody><tr><td><span>url</span></td><td><span>通过requestStreamUrl接口获取的语音对接地址</span></td><td><span>String</span></td><td><span></span></td></tr><tr><td><span>mode</span></td><td><span>通话模式,取值:</span><br><span>half_duplex半双工模式</span><br><span>vadVAD人声检测模式</span><br><span>aecAEC全双工模式</span><br><span>默认为aec双向语音对讲</span></td><td><span>String</span></td><td><span></span></td></tr></tbody></table></figure><p><span>示例:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="javascript"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="javascript"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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">// 获取url流程</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">...</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">// player为播放器实例</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable">player</span>.<span class="cm-property">startVoiceIntercom</span>({</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-property">url</span>: <span class="cm-string">'https://xxx/requestRelayUrl?token=xxx'</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: 138px;"></div><div class="CodeMirror-gutters" style="display: none; height: 138px;"></div></div></div></pre><p><span>对接TP-LINK TUMS平台接口调用详见第6节</span></p><figure><table><thead><tr><th><span>参数</span></th><th><span>说明</span></th><th><span>类型</span></th><th><span>是否必选</span></th></tr></thead><tbody><tr><td><span>url</span></td><td><span>rtsp地址</span><br><span>使用getMultitransUrl接口获取的rtspUrl或</span><br><span>使用requestBidirectionStream接口获取的参数拼接</span><br><code>${protocol}://${serverUrl}:${port}/</code></td><td><span>String</span></td><td><span></span></td></tr><tr><td><span>wssUrl</span></td><td><span>websocket地址</span><br><span>使用getMultitransUrl接口获取的wssUrl或</span><br><span>使用requestBidirectionStream接口获取的参数拼接</span><br><code>wss://${serverUrl}:${port}/ws/</code></td><td><span>String</span></td><td><span></span></td></tr><tr><td><span>slpData</span></td><td><span>requestBidirectionStream接口响应的result数据</span><br><span>使用getMultitransUrl接口获取url时不需要传此参数</span></td><td><span>String</span></td><td><span></span></td></tr><tr><td><span>mode</span></td><td><span>同上</span></td><td><span>String</span></td><td><span></span></td></tr></tbody></table></figure><p><span>示例:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="javascript"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="javascript"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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">// 获取url流程</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">...</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">// player为播放器实例</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable">player</span>.<span class="cm-property">startVoiceIntercom</span>({</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-property">url</span>: <span class="cm-string">'rtsp://xxxx'</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-property">wssUrl</span>: <span class="cm-string">'wss://xxx/ws'</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: 161px;"></div><div class="CodeMirror-gutters" style="display: none; height: 161px;"></div></div></div></pre><p>&nbsp;</p><p><strong><span>云台方法</span></strong><span>(仅对接TP-LINK商用云平台支持)</span></p><figure><table><thead><tr><th><span>方法</span></th><th><span>说明</span></th><th><span>参数</span></th><th><span>参数详解</span></th><th><span>返回值</span></th></tr></thead><tbody><tr><td><span>setPtzParams</span></td><td><span>云台的转动、调焦</span></td><td><span>(options: Object)</span><br><span>options参数内容如下</span><br><span> id 、 direction 、 startOrNot、speed</span></td><td><span>id设备索引可通过getDeviceInRegionWithPermission等接口获取</span><br><span>direction移动方向 0表示左上、1表示上、2表示右上 、 3表示左、4表示持续水平转动、5表示右 、 6表示左下、7表示下、8表示右下 、 9表示缩小画面、10表示放大画面、 11表示聚焦近处、12表示聚焦远处 </span><br><span>startOrNot :开始或停止移动( 0表示停止1表示开始 ;</span><br><span>speed移动速度浮点型字符串0-1之间默认值0.571</span></td><td><span>Promise设备不支持相关指令时将返回error_code信息</span></td></tr><tr><td><span>resetPtzDevicePosition</span></td><td><span>云台复位</span></td><td><span>(id: String)</span></td><td><span>id设备索引可通过getDeviceInRegionWithPermission等接口获取;</span></td><td><span>Promise设备不支持相关指令时将返回error_code信息</span></td></tr></tbody></table></figure><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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;">// mousedown 开始移动</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">player.setPtzParams({</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; id: '574674137700770163',</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; direction: 3,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; startOrNot: 1</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}).then((response) =&gt; {</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; // Do something</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;">// mouseup 停止移动</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">player.setPtzParams({</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; id: '574674137700770163',</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; direction: 3,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; startOrNot: 0</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: 322px;"></div><div class="CodeMirror-gutters" style="display: none; height: 322px;"></div></div></div></pre><p>&nbsp;</p><h2><a name="5.-%E6%8E%A5%E5%85%A5tp-link%E5%95%86%E7%94%A8%E4%BA%91%E5%B9%B3%E5%8F%B0%E6%8C%87%E5%8D%97" class="md-header-anchor"></a><span>5. 接入TP-LINK商用云平台指南</span></h2><p><span>用户需注册TP-LINK商用云平台账号成为开发者。</span></p><p><span>该账号需要安全保存,因为后续所有的开发流程都需要基于此账号进行,更重要的是,后续添加的设备与购买的服务,都归属于该账号。该账号还将作为超级管理员,可以创建子账号,从而实现应用内权限 的分配与管理:</span></p><ol start='' ><li><span>设备添加到开发者账号下。</span></li><li><span>开发者账号授权设备权限给子账户A。</span></li><li><span>用户A通过子账户A的权限来操作设备</span></li></ol><p><span>开发者后台通过账户登录TP-LINK商用云平台后可通过相关协议文档获取到用于预览的视频流地址和鉴权token等信息。具体流程如下</span></p><p>&nbsp;</p><h3><a name="5.1-%E9%A2%84%E8%A7%88%E6%B5%81%E7%A8%8B" class="md-header-anchor"></a><span>5.1 预览流程</span></h3><p><span>开发者获取到AK/SK并计算出请求签名后可参考以下请求流程获取预览链接</span></p><div class="md-diagram-panel"><svg id="mermaidChart0" xmlns="http://www.w3.org/2000/svg" height="100%" viewBox="0 0 582.7109375 843" style=""><style></style><style>#mermaidChart0 {
color: rgb(51, 51, 51);
font: normal normal 400 normal 14.4px / 23.04px "Lucida Console", Consolas, Courier, monospace;
}</style><g transform="translate(32, 32)"><g class="output"><g class="clusters"></g><g class="edgePaths"><g class="edgePath" style="opacity: 1;"><path class="path" d="M309.8203125,63L309.8203125,99.5L309.8203125,136" marker-end="url(#arrowhead41)" style="fill:none"></path><defs><marker id="arrowhead41" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M309.8203125,179L309.8203125,215.5L309.8203125,252" marker-end="url(#arrowhead42)" style="fill:none"></path><defs><marker id="arrowhead42" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M271.5379175646552,295L206.546875,331.5L206.546875,368" marker-end="url(#arrowhead43)" style="fill:none"></path><defs><marker id="arrowhead43" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M206.546875,411L206.546875,447.5L271.5379175646552,484" marker-end="url(#arrowhead44)" style="fill:none"></path><defs><marker id="arrowhead44" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M348.1027074353448,295L413.09375,331.5L413.09375,389.5L413.09375,447.5L348.1027074353448,484" marker-end="url(#arrowhead45)" style="fill:none"></path><defs><marker id="arrowhead45" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M309.8203125,527L309.8203125,563.5L309.8203125,600" marker-end="url(#arrowhead46)" style="fill:none"></path><defs><marker id="arrowhead46" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M309.8203125,643L309.8203125,679.5L309.8203125,716" marker-end="url(#arrowhead47)" style="fill:none"></path><defs><marker id="arrowhead47" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(309.8203125,99.5)" style="opacity: 1;"><g transform="translate(-73.7578125,-11.5)" class="label"><foreignObject width="147.515625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getEnterpriseList</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(309.8203125,215.5)" style="opacity: 1;"><g transform="translate(-73.7578125,-11.5)" class="label"><foreignObject width="147.515625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getAllProjectInfo</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(206.546875,331.5)" style="opacity: 1;"><g transform="translate(-173.53125,-11.5)" class="label"><foreignObject width="347.0625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getRootRegionsExcludeEmptyWithPermission</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(206.546875,447.5)" style="opacity: 1;"><g transform="translate(-186.546875,-11.5)" class="label"><foreignObject width="373.09375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getRegionChildrenExcludeEmptyWithPermission</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(309.8203125,563.5)" style="opacity: 1;"><g transform="translate(-134.4921875,-11.5)" class="label"><foreignObject width="268.984375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getDeviceInRegionWithPermission</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(309.8203125,679.5)" style="opacity: 1;"><g transform="translate(-69.4140625,-11.5)" class="label"><foreignObject width="138.828125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">requestStreamUrl</span></div></foreignObject></g></g></g><g class="nodes"><g class="node" id="a" transform="translate(309.8203125,41.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-188.890625" y="-21.5" width="377.78125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-178.890625,-11.5)"><foreignObject width="357.78125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取企业列表, 请求头需携带X-Authorization,下同</div></foreignObject></g></g></g><g class="node" id="b" transform="translate(309.8203125,157.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-53.203125" y="-21.5" width="106.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-43.203125,-11.5)"><foreignObject width="86.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取项目列表</div></foreignObject></g></g></g><g class="node" id="c" transform="translate(309.8203125,273.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-175.6015625" y="-21.5" width="351.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-165.6015625,-11.5)"><foreignObject width="331.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取项目内区域根节点去除特定权限设备为空的区域</div></foreignObject></g></g></g><g class="node" id="d" transform="translate(206.546875,389.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-161.203125" y="-21.5" width="322.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-151.203125,-11.5)"><foreignObject width="302.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取区域的子区域去除有特定权限设备为空区域</div></foreignObject></g></g></g><g class="node" id="e" transform="translate(309.8203125,505.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-103.6015625" y="-21.5" width="207.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-93.6015625,-11.5)"><foreignObject width="187.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取区域内有指定权限的设备</div></foreignObject></g></g></g><g class="node" id="f" transform="translate(309.8203125,621.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-67.6015625" y="-21.5" width="135.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-57.6015625,-11.5)"><foreignObject width="115.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取设备预览地址</div></foreignObject></g></g></g><g class="node" id="g" transform="translate(309.8203125,737.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-93.6328125" y="-21.5" width="187.265625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-83.6328125,-11.5)"><foreignObject width="167.265625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">预览url传给sdk即可播放</div></foreignObject></g></g></g></g></g></g></svg></div><p><span>requestStreamUrl请求和响应参数示例</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="json" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="json"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-string cm-property">"clientType"</span>:<span class="cm-string">"browser"</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"clientUUID"</span>:<span class="cm-string">"8cb18a36-8cc4-143b-2214-641945094566"</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"devInfoId"</span>:<span class="cm-string">"574674137700825011"</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"resolution"</span>:<span class="cm-number">2</span>, <span class="cm-comment">// 0流畅2高清</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"streamType"</span>:<span class="cm-string">"video"</span>, <span class="cm-comment">// video: 预览sdvod回放</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"cloudDomain"</span>:<span class="cm-string">"smbcloud.tp-link.com.cn"</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"windowUUID"</span>:<span class="cm-string">"c01984bd-0f28-8384-f66d-78f9325bf434"</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></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"result"</span>:{</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-string cm-property">"sdkStreamUrl"</span>:<span class="cm-string">"https://smbcloud.tp-link.com.cn/tums/relay/v1/sdk/requestRelayUrl?token=12931-e3NhbHQgPSAtMTQyMzI0MTM3O2NsaWVu-4f17ec1306694dc5a0390a06f4a56f22&amp;devInfoId=574674137700825011&amp;clientUUID=8cb18a36-8cc4-143b-2214-641945094566&amp;clientType=browser&amp;streamType=video"</span> <span class="cm-comment">// url传入sdk即可播放</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; },</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string cm-property">"error_code"</span>:<span class="cm-number">0</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: 437px;"></div><div class="CodeMirror-gutters" style="display: none; height: 437px;"></div></div></div></pre><blockquote><p><span>预览时清晰度默认为流畅若要修改清晰度需重新调用requestStreamUrl接口配置resolution以获取新的播放地址</span></p></blockquote><p>&nbsp;</p><h3><a name="5.2-%E5%9B%9E%E6%94%BE%E6%B5%81%E7%A8%8B" class="md-header-anchor"></a><span>5.2 回放流程</span></h3><p><span>获取设备前的流程与预览一致前端拿到设备ID之后可查询设备存储的录像并进行播放</span></p><div class="md-diagram-panel"><svg id="mermaidChart1" xmlns="http://www.w3.org/2000/svg" height="100%" viewBox="0 0 444.484375 797" style=""><style></style><style>#mermaidChart1 {
color: rgb(51, 51, 51);
font: normal normal 400 normal 14.4px / 23.04px "Lucida Console", Consolas, Courier, monospace;
}</style><g transform="translate(32, 32)"><g class="output"><g class="clusters"></g><g class="edgePaths"><g class="edgePath" style="opacity: 1;"><path class="path" d="M190.2421875,63L190.2421875,99.5L190.2421875,136" marker-end="url(#arrowhead86)" style="fill:none"></path><defs><marker id="arrowhead86" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M190.2421875,179L190.2421875,215.5L190.2421875,252" marker-end="url(#arrowhead87)" style="fill:none"></path><defs><marker id="arrowhead87" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M166.73959455818965,295L126.83984375,331.5L166.73959455818965,368" marker-end="url(#arrowhead88)" style="fill:none"></path><defs><marker id="arrowhead88" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M213.74478044181035,368L253.64453125,331.5L213.74478044181035,295" marker-end="url(#arrowhead89)" style="fill:none"></path><defs><marker id="arrowhead89" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M190.2421875,411L190.2421875,436L190.2421875,461" marker-end="url(#arrowhead90)" style="fill:none"></path><defs><marker id="arrowhead90" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M190.2421875,504L190.2421875,529L190.2421875,554" marker-end="url(#arrowhead91)" style="fill:none"></path><defs><marker id="arrowhead91" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M190.2421875,597L190.2421875,633.5L190.2421875,670" marker-end="url(#arrowhead92)" style="fill:none"></path><defs><marker id="arrowhead92" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(190.2421875,99.5)" style="opacity: 1;"><g transform="translate(-134.4921875,-11.5)" class="label"><foreignObject width="268.984375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getDeviceInRegionWithPermission</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(190.2421875,215.5)" style="opacity: 1;"><g transform="translate(-43.3828125,-11.5)" class="label"><foreignObject width="86.765625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">searchYear</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(126.83984375,331.5)" style="opacity: 1;"><g transform="translate(-47.7265625,-11.5)" class="label"><foreignObject width="95.453125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">searchVideo</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(253.64453125,331.5)" style="opacity: 1;"><g transform="translate(-59.078125,-11.5)" class="label"><foreignObject width="118.15625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">是, 继续查询录像</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(190.2421875,633.5)" style="opacity: 1;"><g transform="translate(-69.4140625,-11.5)" class="label"><foreignObject width="138.828125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">requestStreamUrl</span></div></foreignObject></g></g></g><g class="nodes"><g class="node" id="a" transform="translate(190.2421875,41.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-103.6015625" y="-21.5" width="207.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-93.6015625,-11.5)"><foreignObject width="187.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取区域内有指定权限的设备</div></foreignObject></g></g></g><g class="node" id="b" transform="translate(190.2421875,157.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-112.28125" y="-21.5" width="224.5625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-102.28125,-11.5)"><foreignObject width="204.5625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">查询设备具有录像的日期, 可选</div></foreignObject></g></g></g><g class="node" id="c" transform="translate(190.2421875,273.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-118" y="-21.5" width="236" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-108,-11.5)"><foreignObject width="216" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">查询设备在某天所存储的录像片段</div></foreignObject></g></g></g><g class="node" id="d" transform="translate(190.2421875,389.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-170.2421875" y="-21.5" width="340.484375" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-160.2421875,-11.5)"><foreignObject width="320.484375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">响应的录像片段长度 == endIdx - startIdx?</div></foreignObject></g></g></g><g class="node" id="e" transform="translate(190.2421875,482.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-146.984375" y="-21.5" width="293.96875" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-136.984375,-11.5)"><foreignObject width="273.96875" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">查询完成, 记录userId, 显示录像时间轴</div></foreignObject></g></g></g><g class="node" id="f" transform="translate(190.2421875,575.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-53.203125" y="-21.5" width="106.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-43.203125,-11.5)"><foreignObject width="86.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取回放地址</div></foreignObject></g></g></g><g class="node" id="g" transform="translate(190.2421875,691.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-93.6328125" y="-21.5" width="187.265625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-83.6328125,-11.5)"><foreignObject width="167.265625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">回放url传给sdk即可播放</div></foreignObject></g></g></g></g></g></g></svg></div><p><span>回放时sdk传参必填项如下</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="javascript"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="javascript"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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">var</span> <span class="cm-def">player</span> <span class="cm-operator">=</span> <span class="cm-keyword">new</span> <span class="cm-variable">TumsPlayer</span>(<span class="cm-string">'video-container'</span>, {</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-property">type</span>: <span class="cm-string">'relay'</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text=" "> </span><span class="cm-property">url</span>: <span class="cm-string">'https://xxx/requestRelayUrl?token=xxx&amp;&amp;streamType=sdvod'</span> <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">streamType</span>: <span class="cm-string">'sdvod'</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">userId</span>: <span class="cm-string">'1'</span>, <span class="cm-comment">// searchVideo接口获取</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: 138px;"></div><div class="CodeMirror-gutters" style="display: none; height: 138px;"></div></div></div></pre><p><span>回放常用功能示例:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="javascript"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="javascript"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 8px;"><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-variable">player</span>.<span class="cm-property">getPlaybackTime</span>(); <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-variable">player</span>.<span class="cm-property">setPlaybackConfig</span>({</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-property">startTime</span>: <span class="cm-string">'xxx'</span> <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 class="cm-variable">player</span>.<span class="cm-property">setPlaybackConfig</span>({</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-property">startTime</span>: <span class="cm-string">'xxx'</span>,</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-property">scale</span>: <span class="cm-number">0.5</span> <span class="cm-comment">// 配置可组合跳转时间并开启1/2倍速播放</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: 184px;"></div><div class="CodeMirror-gutters" style="display: none; height: 184px;"></div></div></div></pre><p>&nbsp;</p><h2><a name="6.%E6%8E%A5%E5%85%A5tp-link-tums%E5%B9%B3%E5%8F%B0%E6%8C%87%E5%8D%97" class="md-header-anchor"></a><span>6.接入TP-LINK TUMS平台指南</span></h2><p><span>回放/预览接口调用流程:</span></p><div class="md-diagram-panel"><svg id="mermaidChart2" xmlns="http://www.w3.org/2000/svg" height="100%" viewBox="0 0 1149.7289123535156 2771.42813873291" style=""><style></style><style>#mermaidChart2 {
color: rgb(51, 51, 51);
font: normal normal 400 normal 14.4px / 23.04px "Lucida Console", Consolas, Courier, monospace;
}</style><g transform="translate(32, 32)"><g class="output"><g class="clusters"></g><g class="edgePaths"><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,63L392.3703155517578,99.5L392.3703155517578,136" marker-end="url(#arrowhead213)" style="fill:none"></path><defs><marker id="arrowhead213" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,179L392.3703155517578,215.5L392.3703155517578,252" marker-end="url(#arrowhead214)" style="fill:none"></path><defs><marker id="arrowhead214" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,295L392.3703155517578,331.5L392.3703155517578,368" marker-end="url(#arrowhead215)" style="fill:none"></path><defs><marker id="arrowhead215" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,411L392.3703155517578,447.5L392.3703155517578,484" marker-end="url(#arrowhead216)" style="fill:none"></path><defs><marker id="arrowhead216" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,527L392.3703155517578,563.5L392.3703155517578,600" marker-end="url(#arrowhead217)" style="fill:none"></path><defs><marker id="arrowhead217" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,643L392.3703155517578,691L392.3703155517578,739" marker-end="url(#arrowhead218)" style="fill:none"></path><defs><marker id="arrowhead218" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,782L392.3703155517578,807L392.3703155517578,832" marker-end="url(#arrowhead219)" style="fill:none"></path><defs><marker id="arrowhead219" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,875L392.3703155517578,911.5L392.3703155517578,948" marker-end="url(#arrowhead220)" style="fill:none"></path><defs><marker id="arrowhead220" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M338.9875030517578,978.6417550847902L120.8359375,1016L120.8359375,1041" marker-end="url(#arrowhead221)" style="fill:none"></path><defs><marker id="arrowhead221" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M120.8359375,1084L120.8359375,1109L120.8359375,1134" marker-end="url(#arrowhead222)" style="fill:none"></path><defs><marker id="arrowhead222" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M120.8359375,1177L120.8359375,1225L120.8359375,1372.1984405517578" marker-end="url(#arrowhead223)" style="fill:none"></path><defs><marker id="arrowhead223" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,991L392.3703155517578,1016L392.3703155517578,1041" marker-end="url(#arrowhead224)" style="fill:none"></path><defs><marker id="arrowhead224" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,1084L392.3703155517578,1109L392.3703155517578,1134" marker-end="url(#arrowhead225)" style="fill:none"></path><defs><marker id="arrowhead225" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M392.3703155517578,1177L392.3703155517578,1225L392.8703155517578,1273.500003051758" marker-end="url(#arrowhead226)" style="fill:none"></path><defs><marker id="arrowhead226" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M344.6992885386235,1466.725851038623L295.6007843017578,1539.3968811035156L295.6007843017578,1655.5375061035156" marker-end="url(#arrowhead227)" style="fill:none"></path><defs><marker id="arrowhead227" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M295.6007843017578,1698.5375061035156L295.6007843017578,1826.1781311035156L379.1351656700389,1961.8765716552734" marker-end="url(#arrowhead228)" style="fill:none"></path><defs><marker id="arrowhead228" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M441.04134012896526,1466.7258473710353L489.1398468017578,1539.3968811035156L489.1398468017578,1655.5375061035156" marker-end="url(#arrowhead229)" style="fill:none"></path><defs><marker id="arrowhead229" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M489.1398468017578,1698.5375061035156L489.1398468017578,1826.1781311035156L405.60546543347675,1961.8765716552734" marker-end="url(#arrowhead230)" style="fill:none"></path><defs><marker id="arrowhead230" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M445.7531280517578,975.2256783798181L825.9085998535156,1016L825.9085998535156,1041" marker-end="url(#arrowhead231)" style="fill:none"></path><defs><marker id="arrowhead231" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M825.9085998535156,1084L825.9085998535156,1109L825.9085998535156,1134" marker-end="url(#arrowhead232)" style="fill:none"></path><defs><marker id="arrowhead232" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M825.9085998535156,1177L825.9085998535156,1225L825.9085998535156,1372.1984405517578" marker-end="url(#arrowhead233)" style="fill:none"></path><defs><marker id="arrowhead233" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M825.9085998535156,1415.1984405517578L825.9085998535156,1539.3968811035156L826.4085998535156,1564.8968811035156" marker-end="url(#arrowhead234)" style="fill:none"></path><defs><marker id="arrowhead234" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M786.6210502344445,1750.3905814844445L744.4578170776367,1826.1781311035156L744.957817077636,1863.1781341552737" marker-end="url(#arrowhead235)" style="fill:none"></path><defs><marker id="arrowhead235" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M716.3792857163108,2075.996477793947L695.6898498535156,2140.5750122070312L695.6898498535156,2177.0750122070312" marker-end="url(#arrowhead236)" style="fill:none"></path><defs><marker id="arrowhead236" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M695.6898498535156,2220.0750122070312L695.6898498535156,2268.0750122070312L695.6898498535156,2316.0750122070312" marker-end="url(#arrowhead237)" style="fill:none"></path><defs><marker id="arrowhead237" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M883.0814594353144,1733.5052715217168L976.9281311035156,1826.1781311035156L976.9281311035156,1983.3765716552734L976.9281311035156,2140.5750122070312L963.8379842823949,2177.0750122070312" marker-end="url(#arrowhead238)" style="fill:none"></path><defs><marker id="arrowhead238" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M799.6420857299004,2049.890734399495L874.6765670776367,2140.5750122070312L925.9343872728019,2177.0750122070312" marker-end="url(#arrowhead239)" style="fill:none"></path><defs><marker id="arrowhead239" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M956.1273498535156,2220.0750122070312L956.1273498535156,2268.0750122070312L956.1273498535156,2316.0750122070312" marker-end="url(#arrowhead240)" style="fill:none"></path><defs><marker id="arrowhead240" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M956.1273498535156,2359.0750122070312L956.1273498535156,2407.0750122070312L956.6273498535146,2455.5750129699704" marker-end="url(#arrowhead241)" style="fill:none"></path><defs><marker id="arrowhead241" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath" style="opacity: 1;"><path class="path" d="M956.6273498535145,2571.9281364440917L956.1273498535156,2607.92813873291L956.1273498535156,2644.42813873291" marker-end="url(#arrowhead242)" style="fill:none"></path><defs><marker id="arrowhead242" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(392.3703155517578,99.5)" style="opacity: 1;"><g transform="translate(-21.6953125,-11.5)" class="label"><foreignObject width="43.390625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">login</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(392.3703155517578,215.5)" style="opacity: 1;"><g transform="translate(-73.7578125,-11.5)" class="label"><foreignObject width="147.515625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getAllProjectInfo</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(392.3703155517578,331.5)" style="opacity: 1;"><g transform="translate(-112.796875,-11.5)" class="label"><foreignObject width="225.59375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getRootRegionsExcludeEmpty</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(392.3703155517578,447.5)" style="opacity: 1;"><g transform="translate(-125.8125,-11.5)" class="label"><foreignObject width="251.625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getRegionChildrenExcludeEmpty</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(392.3703155517578,563.5)" style="opacity: 1;"><g transform="translate(-73.7578125,-11.5)" class="label"><foreignObject width="147.515625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">setCurrentProject</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(392.3703155517578,691)" style="opacity: 1;"><g transform="translate(-138.828125,-23)" class="label"><foreignObject width="277.65625" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getDeviceInRegionWithPermission <br> 注5</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(392.3703155517578,911.5)" style="opacity: 1;"><g transform="translate(-69.4140625,-11.5)" class="label"><foreignObject width="138.828125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getIpcCapability</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(120.8359375,1225)" style="opacity: 1;"><g transform="translate(-56.3984375,-11.5)" class="label"><foreignObject width="112.796875" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getPreviewUrl</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(295.6007843017578,1826.1781311035156)" style="opacity: 1;"><g transform="translate(-69.4140625,-11.5)" class="label"><foreignObject width="138.828125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getMultitransUrl</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(489.1398468017578,1826.1781311035156)" style="opacity: 1;"><g transform="translate(-104.125,-11.5)" class="label"><foreignObject width="208.25" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">requestBidirectionStream</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(825.9085998535156,1225)" style="opacity: 1;"><g transform="translate(-69.4140625,-23)" class="label"><foreignObject width="138.828125" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getStoragesById <br> 注1</span></div></foreignObject></g></g><g class="edgeLabel" transform="" style="opacity: 1;"><g transform="translate(0,0)" class="label"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(744.4578170776367,1826.1781311035156)" style="opacity: 1;"><g transform="translate(-7.203125,-11.5)" class="label"><foreignObject width="14.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(695.6898498535156,2140.5750122070312)" style="opacity: 1;"><g transform="translate(-14.40625,-11.5)" class="label"><foreignObject width="28.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">支持</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(695.6898498535156,2268.0750122070312)" style="opacity: 1;"><g transform="translate(-73.7578125,-23)" class="label"><foreignObject width="147.515625" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getMultitransUrl <br> 注4</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(976.9281311035156,1983.3765716552734)" style="opacity: 1;"><g transform="translate(-7.203125,-11.5)" class="label"><foreignObject width="14.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(874.6765670776367,2140.5750122070312)" style="opacity: 1;"><g transform="translate(-21.6015625,-11.5)" class="label"><foreignObject width="43.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">不支持</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(956.1273498535156,2268.0750122070312)" style="opacity: 1;"><g transform="translate(-65.078125,-23)" class="label"><foreignObject width="130.15625" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">addPlaybackChn <br> 注2</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(956.1273498535156,2407.0750122070312)" style="opacity: 1;"><g transform="translate(-65.078125,-23)" class="label"><foreignObject width="130.15625" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">getPlaybackUrl <br> 注3</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(956.1273498535156,2607.92813873291)" style="opacity: 1;"><g transform="translate(-14.40625,-11.5)" class="label"><foreignObject width="28.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span class="edgeLabel">成功</span></div></foreignObject></g></g></g><g class="nodes"><g class="node" id="A" transform="translate(392.3703155517578,41.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-77.8515625" y="-21.5" width="155.703125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-67.8515625,-11.5)"><foreignObject width="135.703125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">登录获取sessionId</div></foreignObject></g></g></g><g class="node" id="a" transform="translate(392.3703155517578,157.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-53.203125" y="-21.5" width="106.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-43.203125,-11.5)"><foreignObject width="86.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取项目信息</div></foreignObject></g></g></g><g class="node" id="b" transform="translate(392.3703155517578,273.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-60.40625" y="-21.5" width="120.8125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-50.40625,-11.5)"><foreignObject width="100.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取根分组信息</div></foreignObject></g></g></g><g class="node" id="c" transform="translate(392.3703155517578,389.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-60.40625" y="-21.5" width="120.8125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-50.40625,-11.5)"><foreignObject width="100.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取子分组信息</div></foreignObject></g></g></g><g class="node" id="d" transform="translate(392.3703155517578,505.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-53.203125" y="-21.5" width="106.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-43.203125,-11.5)"><foreignObject width="86.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">设置当前项目</div></foreignObject></g></g></g><g class="node" id="f" transform="translate(392.3703155517578,621.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-103.6015625" y="-21.5" width="207.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-93.6015625,-11.5)"><foreignObject width="187.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取分组下有预览权限的设备</div></foreignObject></g></g></g><g class="node" id="f1" transform="translate(392.3703155517578,760.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-38.8046875" y="-21.5" width="77.609375" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-28.8046875,-11.5)"><foreignObject width="57.609375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">选择设备</div></foreignObject></g></g></g><g class="node" id="f2" transform="translate(392.3703155517578,853.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-60.40625" y="-21.5" width="120.8125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-50.40625,-11.5)"><foreignObject width="100.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取设备能力集</div></foreignObject></g></g></g><g class="node" id="f3" transform="translate(392.3703155517578,969.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-53.3828125" y="-21.5" width="106.765625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-43.3828125,-11.5)"><foreignObject width="86.765625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">capability</div></foreignObject></g></g></g><g class="node" id="e" transform="translate(120.8359375,1062.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-24.40625" y="-21.5" width="48.8125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-14.40625,-11.5)"><foreignObject width="28.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">预览</div></foreignObject></g></g></g><g class="node" id="h" transform="translate(120.8359375,1155.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-51.8203125" y="-21.5" width="103.640625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-41.8203125,-11.5)"><foreignObject width="83.640625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取预览url</div></foreignObject></g></g></g><g class="node" id="i" transform="translate(120.8359375,1393.6984405517578)" style="opacity: 1;"><rect rx="0" ry="0" x="-100.8359375" y="-21.5" width="201.671875" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-90.8359375,-11.5)"><foreignObject width="181.671875" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">预览url传递给sdk即可播放</div></foreignObject></g></g></g><g class="node" id="e2" transform="translate(392.3703155517578,1062.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-38.8046875" y="-21.5" width="77.609375" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-28.8046875,-11.5)"><foreignObject width="57.609375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">语音对讲</div></foreignObject></g></g></g><g class="node" id="h1" transform="translate(392.3703155517578,1155.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-66.21875" y="-21.5" width="132.4375" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-56.21875,-11.5)"><foreignObject width="112.4375" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取语音对讲url</div></foreignObject></g></g></g><g class="node" id="h2" transform="translate(392.3703155517578,1393.6984405517578)" style="opacity: 1;"><polygon points="120.6984375,0 241.396875,-120.6984375 120.6984375,-241.396875 0,-120.6984375" rx="5" ry="5" transform="translate(-120.6984375,120.6984375)"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-91.109375,-23)"><foreignObject width="182.21875" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">capability.multitrans<br>判断是否支持multitrans</div></foreignObject></g></g></g><g class="node" id="i1" transform="translate(295.6007843017578,1677.0375061035156)" style="opacity: 1;"><rect rx="0" ry="0" x="-24.40625" y="-21.5" width="48.8125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-14.40625,-11.5)"><foreignObject width="28.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">支持</div></foreignObject></g></g></g><g class="node" id="i3" transform="translate(392.3703155517578,1983.3765716552734)" style="opacity: 1;"><rect rx="0" ry="0" x="-145.6953125" y="-21.5" width="291.390625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-135.6953125,-11.5)"><foreignObject width="271.390625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">调用startVoiceIntercom方法开始对讲</div></foreignObject></g></g></g><g class="node" id="i2" transform="translate(489.1398468017578,1677.0375061035156)" style="opacity: 1;"><rect rx="0" ry="0" x="-31.6015625" y="-21.5" width="63.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-21.6015625,-11.5)"><foreignObject width="43.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">不支持</div></foreignObject></g></g></g><g class="node" id="e1" transform="translate(825.9085998535156,1062.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-24.40625" y="-21.5" width="48.8125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-14.40625,-11.5)"><foreignObject width="28.8125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">回放</div></foreignObject></g></g></g><g class="node" id="k" transform="translate(825.9085998535156,1155.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-89.203125" y="-21.5" width="178.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-79.203125,-11.5)"><foreignObject width="158.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取设备录像的存储位置</div></foreignObject></g></g></g><g class="node" id="l" transform="translate(825.9085998535156,1393.6984405517578)" style="opacity: 1;"><rect rx="0" ry="0" x="-53.203125" y="-21.5" width="106.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-43.203125,-11.5)"><foreignObject width="86.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">选择存储位置</div></foreignObject></g></g></g><g class="node" id="m" transform="translate(825.9085998535156,1677.0375061035156)" style="opacity: 1;"><polygon points="112.640625,0 225.28125,-112.640625 112.640625,-225.28125 0,-112.640625" rx="5" ry="5" transform="translate(-112.640625,112.640625)"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-82.15625,-23)"><foreignObject width="164.3125" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">存储位置是否是nvr设备?<br>通过storageType判断</div></foreignObject></g></g></g><g class="node" id="n" transform="translate(744.4578170776367,1983.3765716552734)" style="opacity: 1;"><polygon points="120.6984375,0 241.396875,-120.6984375 120.6984375,-241.396875 0,-120.6984375" rx="5" ry="5" transform="translate(-120.6984375,120.6984375)"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-91.109375,-23)"><foreignObject width="182.21875" height="46"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">capability.multitrans<br>判断是否支持multitrans</div></foreignObject></g></g></g><g class="node" id="p" transform="translate(695.6898498535156,2198.5750122070312)" style="opacity: 1;"><rect rx="0" ry="0" x="-109.6015625" y="-21.5" width="219.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-99.6015625,-11.5)"><foreignObject width="199.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取回放url,即wss与socket</div></foreignObject></g></g></g><g class="node" id="q" transform="translate(695.6898498535156,2337.5750122070312)" style="opacity: 1;"><rect rx="0" ry="0" x="-100.8359375" y="-21.5" width="201.671875" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-90.8359375,-11.5)"><foreignObject width="181.671875" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">回放url传递给sdk即可播放</div></foreignObject></g></g></g><g class="node" id="r1" transform="translate(956.1273498535156,2198.5750122070312)" style="opacity: 1;"><rect rx="0" ry="0" x="-53.203125" y="-21.5" width="106.40625" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-43.203125,-11.5)"><foreignObject width="86.40625" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">添加回放通道</div></foreignObject></g></g></g><g class="node" id="r2" transform="translate(956.1273498535156,2337.5750122070312)" style="opacity: 1;"><rect rx="0" ry="0" x="-109.6015625" y="-21.5" width="219.203125" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-99.6015625,-11.5)"><foreignObject width="199.203125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取回放url 即wss与socket</div></foreignObject></g></g></g><g class="node" id="r3" transform="translate(956.1273498535156,2513.2515754699707)" style="opacity: 1;"><polygon points="58.1765625,0 116.353125,-58.1765625 58.1765625,-116.353125 0,-58.1765625" rx="5" ry="5" transform="translate(-58.1765625,58.1765625)"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-33.140625,-11.5)"><foreignObject width="66.28125" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">获取成功?</div></foreignObject></g></g></g><g class="node" id="r4" transform="translate(956.1273498535156,2665.92813873291)" style="opacity: 1;"><rect rx="0" ry="0" x="-100.8359375" y="-21.5" width="201.671875" height="43"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-90.8359375,-11.5)"><foreignObject width="181.671875" height="23"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">回放url传递给sdk即可播放</div></foreignObject></g></g></g></g></g></g></svg></div><p><span>注1</span></p><p><span>getStoragesById传递devId获取设备数据存储位置即存储设备idstorageDevId</span></p><p><span>注2</span></p><p><span>addPlaybackChn传递设备id、存储设备id、事件类型、回放起止时间、回放速率目前传递&#39;1/1&#39;即可获取回放通道标识即sessionId。</span></p><p><span>注3</span></p><p><span>getPlaybackUrl传递addPlaybackChnsessionId、设备id、storageDevId获取的获取回放url准备传给sdk。</span></p><p><span>注4</span></p><p><span>getMultitransUrl传递devId可以直接获取到httpsPort与socket地址若无httpsPort则使用默认值10180 wss地址拼接格式如下</span><code>ws://${host}:${httpsPort}/ws/</code><span>其中host是socket中的ip部分。</span></p><p><span>注5</span>
<span>getDeviceInRegionWithPermission接口可以根据预览权限进行设备列表查询permissionList传</span><code>[0]</code><span>代表预览,传</span><code>[1]</code><span>代表回放。</span></p><p>&nbsp;</p><h2><a name="7.-%E9%99%84%E5%BD%95" class="md-header-anchor"></a><span>7. 附录</span></h2><h3><a name="7.1-%E9%94%99%E8%AF%AF%E7%A0%81" class="md-header-anchor"></a><span>7.1 错误码</span></h3><figure><table><thead><tr><th><span>code</span></th><th><span>含义</span></th></tr></thead><tbody><tr><td><span>1001</span></td><td><span>请求中止</span></td></tr><tr><td><span>1002</span></td><td><span>网络异常</span></td></tr><tr><td><span>1003</span></td><td><span>媒体资源解析错误</span></td></tr><tr><td><span>1004</span></td><td><span>不支持的媒体源</span></td></tr><tr><td><span>1005</span></td><td><span>媒体资源已加密</span></td></tr><tr><td><span>1006</span></td><td><span>媒体数据传输错误</span></td></tr><tr><td><span>1007</span></td><td><span>连接服务器失败</span></td></tr><tr><td><span>1008</span></td><td><span>不支持的解码类型</span></td></tr><tr><td><span>1101</span></td><td><span>商云服务器内部错误</span></td></tr><tr><td><span>1102</span></td><td><span>token过期或不存在</span></td></tr><tr><td><span>1104</span></td><td><span>设备ID无效</span></td></tr><tr><td><span>1105</span></td><td><span>达到带宽限制</span></td></tr><tr><td><span>1106</span></td><td><span>请求预览地址参数错误</span></td></tr><tr><td><span>1107</span></td><td><span>连接relay服务器失败</span></td></tr><tr><td><span>1108</span></td><td><span>取流失败</span></td></tr><tr><td><span>1109</span></td><td><span>暂不支持此视频流协议版本</span></td></tr><tr><td><span>1110</span></td><td><span>已达到拉流请求上限</span></td></tr><tr><td><span>1111</span></td><td><span>已长时间观看</span></td></tr><tr><td><span>1112</span></td><td><span>VIP窗口预览数达到上限</span></td></tr><tr><td><span>1113</span></td><td><span>VIP预览客户端数量达到上限</span></td></tr><tr><td><span>1114</span></td><td><span>分享时段结束</span></td></tr><tr><td><span>1115</span></td><td><span>权限不足</span></td></tr><tr><td><span>1120</span></td><td><span>多媒体数据加密状态发生变化</span></td></tr><tr><td><span>1121</span></td><td><span>设备正在通话中</span></td></tr><tr><td><span>1122</span></td><td><span>解绑设备</span></td></tr><tr><td><span>1201</span></td><td><span>设备不支持语音对讲</span></td></tr><tr><td><span>1202</span></td><td><span>用户拒绝提供信息</span></td></tr><tr><td><span>1203</span></td><td><span>浏览器不支持硬件设备</span></td></tr><tr><td><span>1204</span></td><td><span>无法发现指定的硬件设备</span></td></tr><tr><td><span>1205</span></td><td><span>无法打开麦克风</span></td></tr><tr><td><span>1206</span></td><td><span>通话模式不支持</span></td></tr><tr><td><span>1207</span></td><td><span>音频设备正忙,无法发起通话</span></td></tr><tr><td><span>1208</span></td><td><span>浏览器获取麦克风权限被拒绝</span></td></tr><tr><td><span>1301</span></td><td><span>设备离线</span></td></tr><tr><td><span>1302</span></td><td><span>设备被移除</span></td></tr><tr><td><span>1303</span></td><td><span>设备密码被修改</span></td></tr><tr><td><span>1401</span></td><td><span>未知错误</span></td></tr><tr><td><span>1402</span></td><td><span>操作超时</span></td></tr><tr><td><span>1403</span></td><td><span>网络异常</span></td></tr><tr><td><span>1404</span></td><td><span>服务器内部错误</span></td></tr><tr><td><span>1405</span></td><td><span>session过期或不存在</span></td></tr><tr><td><span>1501</span></td><td><span>回放配置失败</span></td></tr><tr><td><span>2001</span></td><td><span>分辨率过高导致视频卡顿</span></td></tr><tr><td><span>2002</span></td><td><span>网络不稳定导致视频卡顿</span></td></tr><tr><td><span>2003</span></td><td><span>解码性能不足</span></td></tr></tbody></table></figure><h3><a name="7.2-%E4%BA%8B%E4%BB%B6%E7%B1%BB%E5%9E%8B%E7%BA%A6%E6%9D%9F" class="md-header-anchor"></a><span>7.2 事件类型约束</span></h3><figure><table><thead><tr><th><span>eventType</span></th><th><strong><span>事件类型</span></strong></th><th><span>eventType</span></th><th><strong><span>事件类型</span></strong></th></tr></thead><tbody><tr><td><span>1</span></td><td><span>定时</span></td><td><span>2</span></td><td><span>移动侦测</span></td></tr><tr><td><span>3</span></td><td><span>遮挡侦测</span></td><td><span>4</span></td><td><span>越界侦测</span></td></tr><tr><td><span>5</span></td><td><span>区域入侵</span></td><td><span>6</span></td><td><span>进入区域</span></td></tr><tr><td><span>7</span></td><td><span>离开区域</span></td><td><span>8</span></td><td><span>徘徊侦测</span></td></tr><tr><td><span>9</span></td><td><span>人员聚集</span></td><td><span>10</span></td><td><span>快速移动</span></td></tr><tr><td><span>11</span></td><td><span>停车侦测</span></td><td><span>12</span></td><td><span>物品遗留</span></td></tr><tr><td><span>13</span></td><td><span>物品拿取</span></td><td><span>14</span></td><td><span>音频异常</span></td></tr><tr><td><span>15</span></td><td><span>虚焦侦测</span></td><td><span>16</span></td><td><span>场景变更</span></td></tr><tr><td><span>17</span></td><td><span>人脸侦测</span></td><td><span>18</span></td><td><span>报警</span></td></tr><tr><td><span>19</span></td><td><span>过线统计</span></td><td><span>20</span></td><td><span>登陆异常</span></td></tr><tr><td><span>21</span></td><td><span>SD卡满</span></td><td><span>22</span></td><td><span>SD卡错误</span></td></tr><tr><td><span>23</span></td><td><span>SD卡拔出</span></td><td><span>24</span></td><td><span>网线断开</span></td></tr><tr><td><span>25</span></td><td><span>IP冲突</span></td><td><span>26</span></td><td><span>人形检测</span></td></tr><tr><td><span>27</span></td><td><span>车辆侦测</span></td><td><span>28</span></td><td><span>物品遗漏拿取侦测</span></td></tr><tr><td><span>29</span></td><td><span>移动侦测云存</span></td><td><span>30</span></td><td><span>迎宾播报</span></td></tr><tr><td><span>31</span></td><td><span>视频留言</span></td><td><span>32</span></td><td><span>移动侦测人形加强</span></td></tr><tr><td><span>33</span></td><td><span>移动侦测车辆加强</span></td><td><span>34</span></td><td><span>区域入侵人形加强</span></td></tr><tr><td><span>35</span></td><td><span>区域入侵车辆加强</span></td><td><span>36</span></td><td><span>越界侦测人形加强</span></td></tr><tr><td><span>37</span></td><td><span>越界侦测车辆加强</span></td><td><span>38</span></td><td><span>人脸比对</span></td></tr><tr><td><span>39</span></td><td><span>人脸相册</span></td><td><span>40</span></td><td><span>进入区域人形加强</span></td></tr><tr><td><span>41</span></td><td><span>进入区域车辆加强</span></td><td><span>42</span></td><td><span>离开区域人形加强</span></td></tr><tr><td><span>43</span></td><td><span>离开区域车辆加强</span></td><td><span>44</span></td><td><span>客流量统计</span></td></tr><tr><td><span>45</span></td><td><span>门铃呼叫</span></td><td><span>46</span></td><td><span>人员到访</span></td></tr><tr><td><span>47</span></td><td><span>车位占用</span></td><td><span>48</span></td><td><span>哭声检测</span></td></tr><tr><td><span>49</span></td><td><span>人形相册</span></td><td><span>50</span></td><td><span>紧急呼救</span></td></tr></tbody></table></figure></div>
</body>
</html>