xytSk-App/static/h5Player/doc/H5playerV2.1.2开发指南.html

2009 lines
67 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters!

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

<!DOCTYPE html>
<html>
<head>
<title>no title</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview ul{list-style:disc}.markdown-preview ul ul{list-style:circle}.markdown-preview ul ul ul{list-style:square}.markdown-preview ol{list-style:decimal}.markdown-preview ol ol,.markdown-preview ul ol{list-style-type:lower-roman}.markdown-preview ol ol ol,.markdown-preview ol ul ol,.markdown-preview ul ol ol,.markdown-preview ul ul ol{list-style-type:lower-alpha}.markdown-preview .newpage,.markdown-preview .pagebreak{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center!important}.markdown-preview:not([data-for=preview]) .code-chunk .code-chunk-btn-group{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .status{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .output-div{margin-bottom:16px}.markdown-preview .md-toc{padding:0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link div,.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}.markdown-preview .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0;min-height:100vh}@media screen and (min-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{font-size:14px!important;padding:1em}}@media print{html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc{padding:0 16px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link div,html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 300px / 2);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}code[class*=language-],pre[class*=language-]{color:#333;background:0 0;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.4;-moz-tab-size:8;-o-tab-size:8;tab-size:8;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:.8em;overflow:auto;border-radius:3px;background:#f5f5f5}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal;background:#f5f5f5}.token.blockquote,.token.comment{color:#969896}.token.cdata{color:#183691}.token.doctype,.token.macro.property,.token.punctuation,.token.variable{color:#333}.token.builtin,.token.important,.token.keyword,.token.operator,.token.rule{color:#a71d5d}.token.attr-value,.token.regex,.token.string,.token.url{color:#183691}.token.atrule,.token.boolean,.token.code,.token.command,.token.constant,.token.entity,.token.number,.token.property,.token.symbol{color:#0086b3}.token.prolog,.token.selector,.token.tag{color:#63a35c}.token.attr-name,.token.class,.token.class-name,.token.function,.token.id,.token.namespace,.token.pseudo-class,.token.pseudo-element,.token.url-reference .token.variable{color:#795da3}.token.entity{cursor:help}.token.title,.token.title .token.punctuation{font-weight:700;color:#1d3e81}.token.list{color:#ed6a43}.token.inserted{background-color:#eaffea;color:#55a532}.token.deleted{background-color:#ffecec;color:#bd2c00}.token.bold{font-weight:700}.token.italic{font-style:italic}.language-json .token.property{color:#183691}.language-markup .token.tag .token.punctuation{color:#333}.language-css .token.function,code.language-css{color:#0086b3}.language-yaml .token.atrule{color:#63a35c}code.language-yaml{color:#183691}.language-ruby .token.function{color:#333}.language-markdown .token.url{color:#795da3}.language-makefile .token.symbol{color:#795da3}.language-makefile .token.variable{color:#183691}.language-makefile .token.builtin{color:#0086b3}.language-bash .token.keyword{color:#0086b3}pre[data-line]{position:relative;padding:1em 0 1em 3em}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.emoji{height:.8em}html body{font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ol,html body>ul{margin-bottom:16px}html body ol,html body ul{padding-left:2em}html body ol.no-list,html body ul.no-list{padding:0;list-style-type:none}html body ol ol,html body ol ul,html body ul ol,html body ul ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:700;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::after,html body code::before{letter-spacing:-.2em;content:'\00a0'}html body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:0 0;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:after,html body pre code:before,html body pre tt:after,html body pre tt:before{content:normal}html body blockquote,html body dl,html body ol,html body p,html body pre,html body ul{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body code,html body pre{word-wrap:break-word;white-space:pre}}
/* Please visit the URL below for more information: */
/* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
</style>
<!-- The content below will be included at the end of the <head> element. --><html><head><script type="text/javascript">
document.addEventListener("DOMContentLoaded", function () {
// your code here
});
</script></head><body></body></html>
</head>
<body for="html-export">
<div class="crossnote markdown-preview">
<html><head></head><body><div>
<div class="md-toc">
<details style="padding:0;;padding-left:0px;" open="">
<summary class="md-toc-link-wrapper">
<a href="#h5player" class="md-toc-link"><p>h5player</p>
</a>
</summary>
<div>
<div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#描述" class="md-toc-link">
<p>描述</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#版本" class="md-toc-link">
<p>版本</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#媒体版本限制" class="md-toc-link">
<p>媒体版本限制</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#使用注意事项" class="md-toc-link">
<p>使用注意事项</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#浏览器限制以及编解码支持情况" class="md-toc-link">
<p>浏览器限制以及编解码支持情况</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#接口调用流程图" class="md-toc-link">
<p>接口调用流程图</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#引入" class="md-toc-link">
<p>引入</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#创建实例" class="md-toc-link">
<p>创建实例</p>
</a></div><details style="padding:0;;padding-left:24px;" open="">
<summary class="md-toc-link-wrapper">
<a href="#接口说明" class="md-toc-link"><p>接口说明</p>
</a>
</summary>
<div>
<div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#事件初始化-js_setwindowcontrolcallbackevents" class="md-toc-link">
<p>事件初始化: JS_SetWindowControlCallback(events)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#play" class="md-toc-link">
<p>播放: JS_Play(url, config, windowIndex, startTime, endTime)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#stop" class="md-toc-link">
<p>停止播放: JS_Stop(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#停止所有播放-js_stoprealplayall" class="md-toc-link">
<p>停止所有播放: JS_StopRealPlayAll()</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#开启声音-js_opensoundwindowindex" class="md-toc-link">
<p>开启声音: JS_OpenSound(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#关闭声音-js_closesoundwindowindex" class="md-toc-link">
<p>关闭声音: JS_CloseSound(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#设置音量-js_setvolumewindowindex-volumn" class="md-toc-link">
<p>设置音量: JS_SetVolume(windowIndex, volumn)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#获取当前音量-js_getvolumewindowindex" class="md-toc-link">
<p>获取当前音量: JS_GetVolume(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#录像-js_startsaveexwindowindex-filename-idsttype" class="md-toc-link">
<p>录像: JS_StartSaveEx(windowIndex, fileName, idstType)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#停止录像并保存文件-js_stopsavewindowindex" class="md-toc-link">
<p>停止录像并保存文件: JS_StopSave(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#抓图-js_capturepicturewindowindex-filename-filetype-callback" class="md-toc-link">
<p>抓图: JS_CapturePicture(windowIndex, fileName, fileType, callback)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#回放js_playplay" class="md-toc-link">
</a><p><a href="#回放js_playplay" class="md-toc-link">回放:</a><a href="#play">JS_Play()</a></p>
</div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#停止回放js_stopstop" class="md-toc-link">
</a><p><a href="#停止回放js_stopstop" class="md-toc-link">停止回放:</a><a href="#stop">JS_Stop()</a></p>
</div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#暂停回放-js_pausewindowindex" class="md-toc-link">
<p>暂停回放: JS_Pause(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#恢复回放-js_resumewindowindex" class="md-toc-link">
<p>恢复回放: JS_Resume(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#开始对讲-js_starttalksztalkurl" class="md-toc-link">
<p>开始对讲: JS_StartTalk(szTalkUrl)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#停止对讲-js_stoptalk" class="md-toc-link">
<p>停止对讲: JS_StopTalk()</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#设置对讲音量js_talksetvolumenvolume" class="md-toc-link">
<p>设置对讲音量JS_TalkSetVolume(nVolume)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#获取对讲音量-js_talkgetvolume" class="md-toc-link">
<p>获取对讲音量: JS_TalkGetVolume()</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#录像-抓图功能同预览播放" class="md-toc-link">
<p>录像、抓图功能同预览播放</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#回放快放-js_fastwindowindex" class="md-toc-link">
<p>回放快放: JS_Fast(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#回放慢放-js_slowwindowindex" class="md-toc-link">
<p>回放慢放: JS_Slow(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#回放定位-js_seekwindowindex-strattime-endtime" class="md-toc-link">
<p>回放定位: JS_Seek(windowIndex, stratTime, endTime)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#回放单帧进高级模式功能-js_frameforwardwindowindex" class="md-toc-link">
<p>回放单帧进(高级模式功能): JS_FrameForward(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#电子放大高级模式功能-js_enablezoomwindowindex" class="md-toc-link">
<p>电子放大(高级模式功能): JS_EnableZoom(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#开启关闭智能信息展示高级模式功能-js_renderallprivatedataiwndnum-bopenflag" class="md-toc-link">
<p>开启/关闭智能信息展示(高级模式功能): JS_RenderALLPrivateData(iWndNum, bOpenFlag)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#分屏-js_arrangewindowsplitnum" class="md-toc-link">
<p>分屏: JS_ArrangeWindow(splitNum)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#切换选中窗口-js_selectwndwindowindex" class="md-toc-link">
<p>切换选中窗口: JS_SelectWnd(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#整体全屏-js_fullscreendisplayisfull" class="md-toc-link">
<p>整体全屏: JS_FullScreenDisplay(isFull)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#单窗口全屏-js_fullscreensinglewindowindex" class="md-toc-link">
<p>单窗口全屏: JS_FullScreenSingle(windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#设置窗口大小js_resize-iwidth-iheight" class="md-toc-link">
<p>设置窗口大小JS_Resize (iWidth, iHeight)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#获取osd时间js_getosdtime-windowindex" class="md-toc-link">
<p>获取OSD时间JS_GetOSDTime (windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#获取音视频信息js_getvideoinfo-windowindex" class="md-toc-link">
<p>获取音视频信息JS_GetVideoInfo (windowIndex)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#设置取流连接超时时间js_setconnecttimeout-windowindex-ntime" class="md-toc-link">
<p>设置取流连接超时时间JS_SetConnectTimeOut (windowIndex, nTime)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#设置私有数据回调高级模式功能js_setadditiondatacbwindowindex-sztype-cbcallback" class="md-toc-link">
<p>设置私有数据回调高级模式功能JS_SetAdditionDataCB(windowIndex, szType, cbCallback)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#设置traceidjs_settraceidwindowindex-bopenflag" class="md-toc-link">
<p>设置traceIdJS_SetTraceId(windowIndex, bOpenFlag)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#设置断流时间回调js_setinterrupttimeiwndnum-interrupttime" class="md-toc-link">
<p>设置断流时间回调JS_SetInterruptTime(iWndNum, InterruptTime)</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#获取traceidjs_gettraceidwindowindex" class="md-toc-link">
<p>获取traceIdJS_GetTraceId(windowIndex)</p>
</a></div>
</div>
</details>
<div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#错误码及其描述" class="md-toc-link">
<p>错误码及其描述</p>
</a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
<a href="#faq" class="md-toc-link">
<p>FAQ</p>
</a></div>
</div>
</details>
</div>
<h1 id="h5player">h5player </h1>
<h2 id="描述">描述 </h2>
<p>h5player是一个基于HTML5的流式网络视频播放器无需安装浏览器插件即可通过websocket协议向媒体服务取流播放多种格式的音视频流。</p>
<h2 id="版本">版本 </h2>
<p>当前版本 2.0.0</p>
<h2 id="媒体版本限制">媒体版本限制 </h2>
<p>媒体网关:mgc_V5.11.101003 或 mgc_V5.13.100版本及以上</p>
<h2 id="使用注意事项">使用注意事项 </h2>
<p>1、需要在web服务器返回的响应头增加跨域隔离字段Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin 并在https环境下使用。否则高级模式无法使用<br>
2、在集成过程中new JSPlugin时候必填szBasePath: './dist', // 必填,引用H5player.min.js的js相对目录否则会引起内部加载解码库异常</p>
<h2 id="浏览器限制以及编解码支持情况">浏览器限制以及编解码支持情况 </h2>
<p>以下数据都是在pc chrome80+测试所得</p>
<table>
<thead>
<tr>
<th style="text-align:center">解码方式</th>
<th style="text-align:center">浏览器限制</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">高级模式</td>
<td style="text-align:center">当前支持 Chrome80+ios safari,andriod browser</td>
</tr>
<tr>
<td style="text-align:center">普通模式</td>
<td style="text-align:center">除 IE 和 IOS Safari 外,基本都支持</td>
</tr>
</tbody>
</table>
<table>
<tbody><tr>
<th rowspan="2">解码方式</th>
<th colspan="2">视频编码格式</th>
<th colspan="8">音频编码格式</th>
</tr>
<tr>
<td>H264</td>
<td>H265</td>
<td>AAC</td>
<td>AACLD</td>
<td>ADPCM</td>
<td>G711</td>
<td>G722_1</td>
<td>G726</td>
<td>MP2</td>
<td>Opus</td>
</tr>
<tr align="middle">
<td>高级模式</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr align="middle">
<td>普通模式</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<table>
<tbody><tr>
<th rowspan="3">解码方式</th>
<th rowspan="3">视频编码格式</th>
<th rowspan="3">分辨率</th>
<th rowspan="3">视频参数(bps*fps)</th>
<th colspan="3">解码路数系统Win7</th>
</tr>
<tr>
<th>CPU<br>I7_8700K</th>
<th>CPU<br>I5-9400/F</th>
<th>CPU<br>I3-8100</th>
</tr>
<tr>
<th>显卡RTX2080</th>
<th>显卡GTX1050TI</th>
<th>显卡GT1030D5</th>
</tr>
<tr align="middle">
<td rowspan="4">高级模式</td>
<td rowspan="2">H265</td>
<td>1080P</td>
<td>4M * 25</td>
<td>6</td>
<td>4</td>
<td>3</td>
</tr>
<tr align="middle">
<td>720P</td>
<td>2M * 25</td>
<td>14</td>
<td>10</td>
<td>6</td>
</tr>
<tr align="middle">
<td rowspan="2">H264</td>
<td>1080P</td>
<td>4M * 25 </td>
<td>6</td>
<td>4</td>
<td>3</td>
</tr>
<tr align="middle">
<td>720P</td>
<td>2M * 25</td>
<td>14</td>
<td>10</td>
<td>6</td>
</tr>
<tr align="middle">
<td rowspan="4">普通模式</td>
<td rowspan="2">H265(采用高级模式解码)</td>
<td>1080P</td>
<td>4M * 25</td>
<td>6</td>
<td>4</td>
<td>3</td>
</tr>
<tr align="middle">
<td>720P</td>
<td>2M * 25</td>
<td>14</td>
<td>10</td>
<td>6</td>
</tr>
<tr align="middle">
<td rowspan="2">H264</td>
<td>1080P</td>
<td>4M * 25</td>
<td>24</td>
<td>20</td>
<td>9</td>
</tr>
<tr align="middle">
<td>720P</td>
<td>2M * 25</td>
<td>32</td>
<td>32</td>
<td>16</td>
</tr>
</tbody></table>
<h2 id="接口调用流程图">接口调用流程图 </h2>
<p>其余控制接口调用都在JS_Play后调用</p>
<pre data-role="codeBlock" data-info="flow" class="language-flow flow"><code>st<span class="token operator">=&gt;</span>start<span class="token operator">:</span> 开始
e<span class="token operator">=&gt;</span>end<span class="token operator">:</span> 结束
op1<span class="token operator">=&gt;</span>operation<span class="token operator">:</span> 创建实例:<span class="token keyword keyword-new">new</span> <span class="token class-name">JSPlugin</span><span class="token operator">|</span>past
op2<span class="token operator">=&gt;</span>operation<span class="token operator">:</span> 事件初始化JS_SetWindowControlCallback<span class="token operator">|</span>past
op3<span class="token operator">=&gt;</span>operation<span class="token operator">:</span> 调用预览<span class="token operator">/</span>回放接口JS_Play<span class="token operator">|</span>current
op4<span class="token operator">=&gt;</span>operation<span class="token operator">:</span> 调用停止接口JS_Stop<span class="token operator">|</span>current
op5<span class="token operator">=&gt;</span>operation<span class="token operator">:</span> 抓图<span class="token operator">|</span>current
st<span class="token operator">-</span><span class="token operator">&gt;</span>op1<span class="token operator">-</span><span class="token operator">&gt;</span>op2<span class="token operator">-</span><span class="token operator">&gt;</span>op3<span class="token operator">-</span><span class="token operator">&gt;</span>op4
op4<span class="token operator">-</span><span class="token operator">&gt;</span>e
</code></pre><h2 id="引入">引入 </h2>
<p>直接用&lt;script&gt;标签引入</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>&lt;!-- h5player --&gt;
&lt;script src="h5player.min.js"&gt;&lt;/script&gt;
</code></pre><h2 id="创建实例">创建实例 </h2>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>&lt;body&gt;
&lt;div id="play_window"&gt;&lt;/div&gt;
&lt;script&gt;
var curIndex = 0; // 当前窗口下标
var myPlugin = new JSPlugin({
szId: 'play_window', //需要英文字母开头,唯一性,必填
szBasePath: './dist', // 必填,与h5player.min.js的引用目录一致
bSupporDoubleClickFull: true,//是否支持双击全屏默认true
// 当容器div#play_window有固定宽高时可不传iWidth和iHeight窗口大小将自适应容器宽高
// iWidth: 600,
// iHeight: 400,
// 分屏播放默认最大分屏4*4
// iMaxSplit: 4,
// iCurrentSplit: 1,
})
&lt;/script&gt;
&lt;/body&gt;
</code></pre><h2 id="接口说明">接口说明 </h2>
<h3 id="事件初始化-js_setwindowcontrolcallbackevents">事件初始化: JS_SetWindowControlCallback(events) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>events</td>
<td>Object</td>
<td>事件对应的处理函数集合</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>JS_SetWindowControlCallback({
windowEventSelect: function (index) { //插件选中窗口回调
curIndex = index;
console.log(index, iErrorCode, oError);
},
pluginErrorHandler: function (index, iErrorCode, oError) { //插件错误回调
// do you want...
// 取流失败,流中断等错误都会触发该回调函数,请自行对照错误码表进行判断。
// 业务上层可在此做一些个性化操作,如:个性化错误信息展示,重新取流等。
},
windowEventOver: function (index) { //鼠标移过回调
// do you want...
},
windowEventOut: function (index) { //鼠标移出回调
// do you want...
},
windowEventUp: function (index) { //鼠标mouseup事件回调
// do you want...
},
windowFullCcreenChange: function (bFull) { //全屏切换回调
// do you want...
},
firstFrameDisplay: function (index, iWidth, iHeight) { //首帧显示回调
// do you want...
},
performanceLack: function () { //性能不足回调
// do you want...
},
StreamEnd: function (index) { //回放结束回调,返回对应测窗口id
console.log('recv windowsId: '+iWndIndex+' recv streamend');
// do you want...
},
InterruptStream: function (iWndIndex, interruptTime) { //interruptTime为秒级别
console.log('recv InterruptStream windowsId: '+iWndIndex+' interrupt time:'+interruptTime+'s');
},
talkPluginErrorHandler: (iErrorCode, oError) =&gt; { //对讲错误回调
console.log('recv talkPluginErrorHandler: '+iErrorCode);
},
});
</code></pre><h3 id="play">播放: JS_Play(url, config, windowIndex, startTime, endTime) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>url</td>
<td>String</td>
<td>流媒体URL</td>
<td></td>
</tr>
<tr>
<td>config</td>
<td>Object</td>
<td>播放配置</td>
<td>必传,详情见示例</td>
</tr>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>当前窗口下标</td>
<td></td>
</tr>
<tr>
<td>startTime</td>
<td>DateTime</td>
<td>回放开始时间统一格式格式类型2023-05-16T00:00:00Z或2023-05-16T07:47:36.000+08:00</td>
<td>预览不能填,回放必填</td>
</tr>
<tr>
<td>endTime</td>
<td>DateTime</td>
<td>回放结束时间格式类型统一格式格式类型2023-05-16T00:00:00Z或2023-05-16T07:47:36.000+08:00</td>
<td>预览不能填,回放必填</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>let url = document.getElementById('url').value;
let startTime, endTime;
myPlugin.JS_Play(
url,
{
playURL: url, // 流媒体播放时必传
mode: 0, // 解码类型0=普通模式; 1=高级模式 默认为0
// ...
},
curIndex, //当前窗口下标
// 回放参数
startTime,
endTime,
).then(
() =&gt; {
console.info('JS_Play success');
// do you want...
},
(err) =&gt; {
console.info('JS_Play failed:', err);
// do you want...
}
);
</code></pre><h3 id="stop">停止播放: JS_Stop(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_Stop(curIndex).then(
() =&gt; {
console.info('JS_Stop success');
// do you want...
},
(err) =&gt; {
console.info('JS_Stop failed:', err);
// do you want...
}
);
</code></pre><h3 id="停止所有播放-js_stoprealplayall">停止所有播放: JS_StopRealPlayAll() </h3>
<p>参数:无<br>
返回Promise</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_StopRealPlayAll().then(
() =&gt; {
console.info('JS_StopRealPlayAll success');
// do you want...
},
(err) =&gt; {
console.info('JS_StopRealPlayAll failed');
// do you want...
}
);
</code></pre><h3 id="开启声音-js_opensoundwindowindex">开启声音: JS_OpenSound(windowIndex) </h3>
<p>参数:<br>
说明:一个实例下只支持一路声音播放,开启下一路会默认关闭上一路声音。倍数不支持声音播放</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td>否,不传时默认开启当前选中窗口的声音</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_OpenSound(curIndex).then(
() =&gt; {
console.info('JS_OpenSound success');
// do you want...
},
(err) =&gt; {
console.info('JS_OpenSound failed');
// do you want...
}
);
</code></pre><h3 id="关闭声音-js_closesoundwindowindex">关闭声音: JS_CloseSound(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td>否,不传时默认关闭当前选中窗口的声音</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_CloseSound(curIndex).then(
() =&gt; {
console.info('JS_CloseSound success');
// do you want...
},
(err) =&gt; {
console.info('JS_CloseSound failed');
// do you want...
}
);
</code></pre><h3 id="设置音量-js_setvolumewindowindex-volumn">设置音量: JS_SetVolume(windowIndex, volumn) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>volumn</td>
<td>Number</td>
<td>音量大小</td>
<td>范围1~100默认50</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_SetVolume(curIndex, volumn).then(
() =&gt; {
console.info('JS_SetVolume success');
// do you want...
},
(err) =&gt; {
console.info('JS_SetVolume failed');
// do you want...
}
);
</code></pre><h3 id="获取当前音量-js_getvolumewindowindex">获取当前音量: JS_GetVolume(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_GetVolume(curIndex).then(
(volumn) =&gt; { //在不设置音量的情况下默认50
console.info('JS_GetVolume success', volumn);
// do you want...
},
(err) =&gt; {
console.info('JS_GetVolume failed');
// do you want...
}
);
</code></pre><h3 id="录像-js_startsaveexwindowindex-filename-idsttype">录像: JS_StartSaveEx(windowIndex, fileName, idstType) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>fileName</td>
<td>String</td>
<td>文件名(保证全局唯一性)</td>
<td>是,可不带后缀,默认为.mp4</td>
</tr>
<tr>
<td>idstType</td>
<td>Number</td>
<td>录像文件类型</td>
<td>2-ps 5-mp4 ,mp4录制音频限制仅支持AAC、G711A、G711U</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>let fileName = 'fileName.mp4';
myPlugin.JS_StartSaveEx(curIndex, fileName, 2).then(
() =&gt; {
console.info('JS_StartSave success');
// do you want...
},
(err) =&gt; {
console.info('JS_StartSave failed');
// do you want...
}
);
</code></pre><h3 id="停止录像并保存文件-js_stopsavewindowindex">停止录像并保存文件: JS_StopSave(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>let fileName = 'fileName.mp4';
myPlugin.JS_StopSave(windowIndex).then(
() =&gt; {
console.info('JS_StopSave success');
// do you want...
},
(err) =&gt; {
console.info('JS_StopSave failed');
// do you want...
}
);
</code></pre><h3 id="抓图-js_capturepicturewindowindex-filename-filetype-callback">抓图: JS_CapturePicture(windowIndex, fileName, fileType, callback) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>fileName</td>
<td>String</td>
<td>文件名</td>
<td></td>
</tr>
<tr>
<td>fileType</td>
<td>String</td>
<td>文件类型</td>
<td>是,'JPEG'</td>
</tr>
<tr>
<td>callback</td>
<td>Fuction</td>
<td>回调函数</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>let fileName = 'img';
let fileType = 'JPEG';
//下载到本地
myPlugin.JS_CapturePicture(curIndex, fileName, fileType).then(
() =&gt; {
console.info('JS_CapturePicture success');
// do you want...
},
(err) =&gt; {
console.info('JS_CapturePicture failed');
// do you want...
}
);
//不进行下载,数据回调,JS_CapturePicture接口在jsdecoder1.0解码方式下连续调用会存在失败的情况,如果既要回调又要下载,请自行对回调数据进行下载
myPlugin.JS_CapturePicture(curIndex, fileName, fileTypeimageData =&gt; {
console.info('JS_CapturePicture success', imageData); //2.1.0开始全是base64之前的版本存在blob或者是base64
// do you want...
})
</code></pre><h3 id="回放js_playplay">回放:<a href="#play">JS_Play()</a> </h3>
<h3 id="停止回放js_stopstop">停止回放:<a href="#stop">JS_Stop()</a> </h3>
<h3 id="暂停回放-js_pausewindowindex">暂停回放: JS_Pause(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_Pause(curIndex).then(
() =&gt; {
console.info('JS_Pause success');
// do you want...
},
(err) =&gt; {
console.info('JS_Pause failed');
// do you want...
}
);
</code></pre><h3 id="恢复回放-js_resumewindowindex">恢复回放: JS_Resume(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_Resume(curIndex).then(
() =&gt; {
console.info('JS_Resume success');
// do you want...
},
(err) =&gt; {
console.info('JS_Resume failed');
// do you want...
}
);
</code></pre><h3 id="开始对讲-js_starttalksztalkurl">开始对讲: JS_StartTalk(szTalkUrl) </h3>
<p>特殊声明由于浏览器的安全限制该功能只能在https域下使用只支持一路对讲<br>
参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>szTalkUrl</td>
<td>String</td>
<td>对讲URL</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_StartTalk(szTalkUrl).then(
() =&gt; {
console.info('JS_StartTalk success');
// do you want...
},
(err) =&gt; {
console.info('JS_StartTalk failed');
// do you want...
}
);
</code></pre><h3 id="停止对讲-js_stoptalk">停止对讲: JS_StopTalk() </h3>
<p>返回Promise</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_StopTalk().then(
() =&gt; {
console.info('JS_StopTalk success');
// do you want...
},
(err) =&gt; {
console.info('JS_StopTalk failed');
// do you want...
}
);
</code></pre><h3 id="设置对讲音量js_talksetvolumenvolume">设置对讲音量JS_TalkSetVolume(nVolume) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>nVolume</td>
<td>number</td>
<td>音量大小0-100</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.设置对讲音量JS_TalkSetVolume(nVolume).then(
() =&gt; {
console.info('JS_TalkSetVolume success');
// do you want...
},
(err) =&gt; {
console.info('JS_TalkSetVolume failed');
// do you want...
}
);
</code></pre><h3 id="获取对讲音量-js_talkgetvolume">获取对讲音量: JS_TalkGetVolume() </h3>
<p>返回Promise</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_TalkGetVolume().then(
() =&gt; {
console.info('JS_TalkGetVolume success');
// do you want...
},
(err) =&gt; {
console.info('JS_TalkGetVolume failed');
// do you want...
}
);
</code></pre><h3 id="录像-抓图功能同预览播放">录像、抓图功能同预览播放 </h3>
<h3 id="回放快放-js_fastwindowindex">回放快放: JS_Fast(windowIndex) </h3>
<p>调节播放倍速为当前播放速度的2倍最大为8倍。<br>
参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_Fast(curIndex).then(
() =&gt; {
console.info('JS_Fast success');
// do you want...
},
(err) =&gt; {
console.info('JS_Fast failed');
// do you want...
}
);
</code></pre><h3 id="回放慢放-js_slowwindowindex">回放慢放: JS_Slow(windowIndex) </h3>
<p>调节播放倍速为当前播放速度的1/2倍最小为1/8倍。<br>
参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_Slow(curIndex).then(
() =&gt; {
console.info('JS_Slow success');
// do you want...
},
(err) =&gt; {
console.info('JS_Slow failed');
// do you want...
}
);
</code></pre><h3 id="回放定位-js_seekwindowindex-strattime-endtime">回放定位: JS_Seek(windowIndex, stratTime, endTime) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>stratTime</td>
<td>DateTime</td>
<td>开始时间格式类型2021-06-29T00:00:00Z</td>
<td></td>
</tr>
<tr>
<td>endTime</td>
<td>DateTime</td>
<td>结束时间格式类型2021-06-29T00:00:00Z</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_Seek(curIndexzStartDate, szEndDate).then(
() =&gt; {
console.info('JS_Seek success');
// do you want...
},
(err) =&gt; {
console.info('JS_Seek failed');
// do you want...
}
);
</code></pre><h3 id="回放单帧进高级模式功能-js_frameforwardwindowindex">回放单帧进(高级模式功能): JS_FrameForward(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_FrameForward(curIndex).then(
() =&gt; {
console.info('JS_FrameForward success');
// do you want...
},
(err) =&gt; {
console.info('JS_FrameForward failed');
// do you want...
}
);
</code></pre><h3 id="电子放大高级模式功能-js_enablezoomwindowindex">电子放大(高级模式功能): JS_EnableZoom(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td>否,不传时默认开启当前选中窗口的电子放大功能</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_EnableZoom(curIndex).then(
() =&gt; {
console.info('JS_EnableZoom success');
// do you want...
},
(err) =&gt; {
console.info('JS_EnableZoom failed');
// do you want...
}
);
</code></pre><h3 id="开启关闭智能信息展示高级模式功能-js_renderallprivatedataiwndnum-bopenflag">开启/关闭智能信息展示(高级模式功能): JS_RenderALLPrivateData(iWndNum, bOpenFlag) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>iWndNum</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>bOpenFlag</td>
<td>Boolean</td>
<td>开启/关闭</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_RenderALLPrivateData(iWndNum, true).then(
() =&gt; {
console.info('JS_RenderALLPrivateData success');
// do you want...
},
(err) =&gt; {
console.info('JS_RenderALLPrivateData failed');
// do you want...
}
);
</code></pre><h3 id="分屏-js_arrangewindowsplitnum">分屏: JS_ArrangeWindow(splitNum) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>splitNum</td>
<td>Number</td>
<td>分隔数</td>
<td>是, 范围1~4</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>分隔数</td>
<td>分屏效果</td>
<td></td>
<td></td>
</tr>
<tr>
<td>----</td>
<td>----</td>
<td></td>
<td></td>
</tr>
<tr>
<td>1</td>
<td>1x1</td>
<td></td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>2x2</td>
<td></td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>3x3</td>
<td></td>
<td></td>
</tr>
<tr>
<td>4</td>
<td>4x4</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_ArrangeWindow(splitNum).then(
() =&gt; {
console.info('JS_ArrangeWindow success');
// do you want...
},
(err) =&gt; {
console.info('JS_ArrangeWindow failed');
// do you want...
}
);
</code></pre><h3 id="切换选中窗口-js_selectwndwindowindex">切换选中窗口: JS_SelectWnd(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_SelectWnd(windowIndex).then(
() =&gt; {
console.info('JS_SelectWnd success');
// do you want...
},
(err) =&gt; {
console.info('JS_SelectWnd failed');
// do you want...
}
);
</code></pre><h3 id="整体全屏-js_fullscreendisplayisfull">整体全屏: JS_FullScreenDisplay(isFull) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>isFull</td>
<td>Boolean</td>
<td>是否全屏</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_FullScreenDisplay(true).then(
() =&gt; {
console.info('JS_FullScreenDisplay success');
// do you want...
},
(err) =&gt; {
console.info('JS_FullScreenDisplay failed');
// do you want...
}
);
</code></pre><h3 id="单窗口全屏-js_fullscreensinglewindowindex">单窗口全屏: JS_FullScreenSingle(windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_FullScreenSingle(curIndex).then(
() =&gt; {
console.info('JS_FullScreenSingle success');
// do you want...
},
(err) =&gt; {
console.info('JS_FullScreenSingle failed');
// do you want...
}
);
</code></pre><h3 id="设置窗口大小js_resize-iwidth-iheight">设置窗口大小JS_Resize (iWidth, iHeight) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>iWidth</td>
<td>Number</td>
<td>播放页面宽度</td>
<td>否,不传时默认父窗口大小</td>
</tr>
<tr>
<td>iHeight</td>
<td>Number</td>
<td>播放页面高度</td>
<td>否,不传时默认父窗口大小</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_Resize().then(
() =&gt; {
console.info('JS_Resize success');
// do you want...
},
(err) =&gt; {
console.info('JS_Resize failed');
// do you want...
}
);
</code></pre><h3 id="获取osd时间js_getosdtime-windowindex">获取OSD时间JS_GetOSDTime (windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>成功返回从1970-1-1 00:00:00 到该日期对象的毫秒数,但是获取的精度只到秒级别毫秒都是0</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_GetOSDTime(curIndex).then(
(time) =&gt; {
console.info("osdTime:", new Date(time));
// do you want...
},
(err) =&gt; {
console.info('JS_GetOSDTime failed');
// do you want...
}
);
</code></pre><h3 id="获取音视频信息js_getvideoinfo-windowindex">获取音视频信息JS_GetVideoInfo (windowIndex) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>videoInfo = {</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre class="language-text"> VideType: 'h264', //视频编码格式
audioType: 'without',//音频编码格式
width: 0,//视频分辨率的宽
height: 0,//视频分辨率的高
frameRate: 25,//视频帧率
bitRate: 2048,//视频码率单位Kb/s
systemFormt: "ps"//视频封装格式
</pre>
<p>};</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_GetVideoInfo(curIndex).then(
(VideoInfo) =&gt; {
console.info("VideoInfo:", VideoInfo);
// do you want...
},
(err) =&gt; {
console.info('JS_GetVideoInfo failed');
// do you want...
}
);
</code></pre><h3 id="设置取流连接超时时间js_setconnecttimeout-windowindex-ntime">设置取流连接超时时间JS_SetConnectTimeOut (windowIndex, nTime) </h3>
<p>参数:<br>
说明该接口不调用时默认6s,在JS_Play之前调用</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>nTime</td>
<td>Number</td>
<td>超时时间</td>
<td>不传时默认0秒单位秒</td>
</tr>
<tr>
<td>返回Promise</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_SetConnectTimeOut(curIndex, nTime).then(
() =&gt; {
console.info('JS_SetConnectTimeOut success');
// do you want...
},
(err) =&gt; {
console.info('JS_SetConnectTimeOut failed');
// do you want...
}
);
</code></pre><h3 id="设置私有数据回调高级模式功能js_setadditiondatacbwindowindex-sztype-cbcallback">设置私有数据回调高级模式功能JS_SetAdditionDataCB(windowIndex, szType, cbCallback) </h3>
<p>参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>szType</td>
<td>Number</td>
<td>数据类型</td>
<td>0x0101: 定制温度 0x0103: 基线温度裸数据 0x0006: 车载行车信息 0x0009: 车载调试信息 0x0007: POS 信息解析回调 0x0010: 汽车电子私有信息 0x0011: 无人机私有信息 0x0804: 数立体云防私有数据 0x000B: 设备扩展信息</td>
</tr>
<tr>
<td>cbCallback</td>
<td>function</td>
<td>回调函数</td>
<td>function(dataType, dataStrVersion, dataTimeStamp, additionDataBuffer)</td>
</tr>
</tbody>
</table>
<p>返回Promise</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_SetAdditionDataCB(curIndex, 0x0804, function(dataType,dataStrVersion, dataTimeStamp, additionDataBuffer){
console.log(" JSPlayM4_AdditionDataCBFun dataType:"+dataType +",dataStrVersion:"+dataStrVersion+",dataTimeStamp:"+dataTimeStamp);
}).then(
() =&gt; {
console.info('JS_SetAdditionDataCB success');
// do you want...
},
(err) =&gt; {
console.info('JS_SetAdditionDataCB failed');
// do you want...
}
);
</code></pre><h3 id="设置traceidjs_settraceidwindowindex-bopenflag">设置traceIdJS_SetTraceId(windowIndex, bOpenFlag) </h3>
<p>说明traceId是查询调用链的唯一标识H5player不做调用链埋点只拼接traceIdtraceId建议在传入url的时候自行拼接<br>
拼接规则取流url中无?则拼接?traceId=uuid(随机生成的一个id编号);有?则拼接&amp;traceId=uuid<br>
示例wss://10.19.147.57:6014/proxy/10.19.147.57:559/EUrl/SiSnW6z?traceId=d9d0766e3b3f7a41<br>
参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>bOpenFlag</td>
<td>Number</td>
<td>是否设置traceId</td>
<td>是,该接口不调用默认false</td>
</tr>
</tbody>
</table>
<p>返回Promise</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_SetTraceId(curIndex, bOpenFlag).then(
() =&gt; {
console.info('JS_SetTraceId success');
// do you want...
},
(err) =&gt; {
console.info('JS_SetTraceId failed');
// do you want...
}
);
</code></pre><h3 id="设置断流时间回调js_setinterrupttimeiwndnum-interrupttime">设置断流时间回调JS_SetInterruptTime(iWndNum, InterruptTime) </h3>
<p>说明断流的事件统一从JS_SetWindowControlCallback的InterruptStream回调InterruptTime为检测无码流的时间每过InterruptTime回调一次断流事件未设置默认每过5s无码流回调一次断流事件<br>
参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
<tr>
<td>InterruptTime</td>
<td>Number</td>
<td>检测断流时间阈值,单位:秒,默认5秒</td>
<td></td>
</tr>
</tbody>
</table>
<p>返回Promise</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>let InterruptTime = 5;
myPlugin.JS_SetInterruptTime(iWndNum, InterruptTime).then(
() =&gt; {
console.info('JS_SetInterruptTime success');
// do you want...
},
(err) =&gt; {
console.info('JS_SetInterruptTime failed');
// do you want...
}
);
</code></pre><h3 id="获取traceidjs_gettraceidwindowindex">获取traceIdJS_GetTraceId(windowIndex) </h3>
<p>说明traceId是查询调用链的唯一标识H5player不做调用链埋点只拼接traceIdtraceId建议在传入url的时候自行拼接更方便应用层管理h5player内部会检测无traceId时会默认拼接上<br>
拼接规则取流url中无?则拼接?traceId=uuid(随机生成的一个id编号);有?则拼接&amp;traceId=uuid<br>
示例wss://10.19.147.57:6014/proxy/10.19.147.57:559/EUrl/SiSnW6z?traceId=d9d0766e3b3f7a41<br>
参数:</p>
<table>
<thead>
<tr>
<th>参数名</th>
<th>类型</th>
<th>说明</th>
<th>必需</th>
</tr>
</thead>
<tbody>
<tr>
<td>windowIndex</td>
<td>Number</td>
<td>窗口下标</td>
<td></td>
</tr>
</tbody>
</table>
<p>返回Promise</p>
<pre data-role="codeBlock" data-info="" class="language-text text"><code>myPlugin.JS_GetTraceId(curIndex).then(
(traceId) =&gt; {
console.info('JS_GetTraceId success', traceId);
// do you want...
},
(err) =&gt; {
console.info('JS_GetTraceId failed');
// do you want...
}
);
</code></pre><h2 id="错误码及其描述">错误码及其描述 </h2>
<table>
<thead>
<tr>
<th>错误码</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>0x12f900001</td>
<td>接口调用参数错误</td>
</tr>
<tr>
<td>0x12f900002</td>
<td>不在播放状态</td>
</tr>
<tr>
<td>0x12f900003</td>
<td>仅回放支持该功能</td>
</tr>
<tr>
<td>0x12f900004</td>
<td>普通模式不支持该功能</td>
</tr>
<tr>
<td>0x12f900005</td>
<td>高级模式不支持该功能</td>
</tr>
<tr>
<td>0x12f900006</td>
<td>高级模式的解码库加载失败</td>
</tr>
<tr>
<td>0x12f900008</td>
<td>url格式错误</td>
</tr>
<tr>
<td>0x12f900009</td>
<td>取流超时错误</td>
</tr>
<tr>
<td>0x12f900010</td>
<td>设置或者是获取音量失败,因为没有开启音频的窗口</td>
</tr>
<tr>
<td>0x12f900011</td>
<td>设置的音量不在1-100范围</td>
</tr>
<tr>
<td>0x12f910000</td>
<td>websocket连接失败请检查网络是否通畅URL是否正确</td>
</tr>
<tr>
<td>0x12f910010</td>
<td>取流失败</td>
</tr>
<tr>
<td>0x12f910011</td>
<td>流中断,电脑配置过低,程序卡主线程都可能导致流中断</td>
</tr>
<tr>
<td>0x12f910014</td>
<td>没有音频数据</td>
</tr>
<tr>
<td>0x12f910015</td>
<td>未找到对应websocket取流套接字被动关闭的报错</td>
</tr>
<tr>
<td>0x12f910016</td>
<td>websocket不在连接状态</td>
</tr>
<tr>
<td>0x12f910017</td>
<td>不支持智能信息展示</td>
</tr>
<tr>
<td>0x12f910018</td>
<td>websocket长时间未收到message</td>
</tr>
<tr>
<td>0x12f910019</td>
<td>wss连接失败原因端口尚未开通、证书未安装、证书不安全</td>
</tr>
<tr>
<td>0x12f910020</td>
<td>单帧回放时不能暂停</td>
</tr>
<tr>
<td>0x12f910021</td>
<td>已是最大倍速</td>
</tr>
<tr>
<td>0x12f910022</td>
<td>已是最小倍速</td>
</tr>
<tr>
<td>0x12f910023</td>
<td>ws/wss连接超时默认6s超时时间原因网络异常网络不通</td>
</tr>
<tr>
<td>0x12f910026</td>
<td>jsdecoder1.0解码报错视频编码格式不支持</td>
</tr>
<tr>
<td>0x12f910027</td>
<td>后端取流超时主动关闭连接设备突然离线或重启网络传输超时20s</td>
</tr>
<tr>
<td>0x12f910028</td>
<td>设置的缓冲区大小无效大小0-5<em>1024</em>1024不在该范围的报错</td>
</tr>
<tr>
<td>0x12f910029</td>
<td>普通模式的报错,码流异常导致黑屏,尝试重新取流</td>
</tr>
<tr>
<td>0x12f910031</td>
<td>普通模式下播放卡主会出现</td>
</tr>
<tr>
<td>0x12f910032</td>
<td>码流编码格式普通模式下不支持,可切换高级模式尝试播放</td>
</tr>
<tr>
<td>0x12f920015</td>
<td>未调用停止录像,再次调用开始录像</td>
</tr>
<tr>
<td>0x12f920016</td>
<td>未开启录像调用停止录像接口错误</td>
</tr>
<tr>
<td>0x12f920017</td>
<td>紧急录像目标格式不支持非ps/mp4</td>
</tr>
<tr>
<td>0x12f920018</td>
<td>紧急录像文件名为null</td>
</tr>
<tr>
<td>0x12f930010</td>
<td>内存不足</td>
</tr>
<tr>
<td>0x12f930011</td>
<td>首帧显示之前无法抓图,请稍后重试</td>
</tr>
<tr>
<td>0x12f950000</td>
<td>采集音频失败可能是在非https域下使用对讲导致</td>
</tr>
<tr>
<td>0x12f950001</td>
<td>对讲不支持这种音频编码格式</td>
</tr>
</tbody>
</table>
<h2 id="faq">FAQ </h2>
<p>1.Q: Uncaught Error: Site or Page Not Found : <a href="http://localhost/Decoder.data">http://localhost/Decoder.data</a><br>
A: 把 decoder.data 文件放在根目录下<br>
2.Q: 实测性能和给的性能数据不符使用了chrome92版本没有加跨域隔离导致<br>
A: http头增加跨域隔离Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin 并在https环境下使用。</p>
</div></body></html>
</div>
</body>
</html>