From 957ccfcf33d2039f28879985a756cb4de8eee25a Mon Sep 17 00:00:00 2001 From: lishenfeng Date: Fri, 7 Jun 2024 17:13:47 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 8 +- pages.json | 4 +- pages/homeIndex/index.vue | 16 +- pages/login/login.vue | 2 +- pages/personInfo/personInfo.vue | 4 +- .../h5Player/1.0升级至2.0+注意事项.txt | 1 - .../doc/H5playerV2.1.2开发指南.html | 2008 ----------------- .../doc/H5播放器功能性能说明.xlsx | Bin 16879 -> 0 bytes .../{工情——icon@2x.png => gongqing.png} | Bin static/tabs/{首页@2x.png => home.png} | Bin static/tabs/{首页2@2x.png => home1.png} | Bin static/tabs/{铃铛@2x.png => ld.png} | Bin .../tabs/{头像_icon@2x.png => touxiang.png} | Bin .../{water (1) 拷贝@2x.png => water.png} | Bin .../tabs/{形状 1@2x.png => xingzhuang.png} | Bin .../dev/app-plus/assets/uniicons.b6d3756e.ttf | Bin 35760 -> 0 bytes 16 files changed, 19 insertions(+), 2024 deletions(-) delete mode 100644 static/h5Player/1.0升级至2.0+注意事项.txt delete mode 100644 static/h5Player/doc/H5playerV2.1.2开发指南.html delete mode 100644 static/h5Player/doc/H5播放器功能性能说明.xlsx rename static/tabs/{工情——icon@2x.png => gongqing.png} (100%) rename static/tabs/{首页@2x.png => home.png} (100%) rename static/tabs/{首页2@2x.png => home1.png} (100%) rename static/tabs/{铃铛@2x.png => ld.png} (100%) rename static/tabs/{头像_icon@2x.png => touxiang.png} (100%) rename static/tabs/{water (1) 拷贝@2x.png => water.png} (100%) rename static/tabs/{形状 1@2x.png => xingzhuang.png} (100%) delete mode 100644 unpackage/dist/dev/app-plus/assets/uniicons.b6d3756e.ttf diff --git a/manifest.json b/manifest.json index 949c906..52cb218 100644 --- a/manifest.json +++ b/manifest.json @@ -42,9 +42,13 @@ "" ] }, - "ios" : {}, + "ios" : { + "dSYMs" : false + }, /* ios打包配置 */ - "sdkConfigs" : {}, + "sdkConfigs" : { + "ad" : {} + }, "splashscreen" : { "androidStyle" : "common" } diff --git a/pages.json b/pages.json index a32a9ca..d819442 100644 --- a/pages.json +++ b/pages.json @@ -161,8 +161,8 @@ "list": [ { "pagePath": "pages/homeIndex/index", - "iconPath": "/static/tabs/首页@2x.png", - "selectedIconPath": "static/tabs/首页2@2x.png", + "iconPath": "/static/tabs/home.png", + "selectedIconPath": "static/tabs/home1.png", "text": "首页" }, { diff --git a/pages/homeIndex/index.vue b/pages/homeIndex/index.vue index bff60d1..448fb2a 100644 --- a/pages/homeIndex/index.vue +++ b/pages/homeIndex/index.vue @@ -6,7 +6,7 @@
@@ -45,7 +45,7 @@ margin-right: 16rpx; vertical-align: middle; " - src="../../static/tabs/铃铛@2x.png" + src="../../static/tabs/ld.png" mode="aspectFit" >当前防汛应急响应:IV级 @@ -244,19 +244,19 @@ export default { { value: '雨情', key: 1, - icon: '../../static/tabs/形状 1@2x.png', + icon: '../../static/tabs/xingzhuang.png', url:"/pages/rain/rain" }, { value: '水情', key: 2, - icon: '../../static/tabs/water (1) 拷贝@2x.png', + icon: '../../static/tabs/water.png', url:"/pages/water/water" }, { value: '工情灾情', key: 3, - icon: '../../static/tabs/工情——icon@2x.png', + icon: '../../static/tabs/gongqing.png', url:'/pages/gqzq/index' }, { @@ -278,19 +278,19 @@ export default { { value: '雨情', key: 1, - icon: '../../static/tabs/形状 1@2x.png', + icon: '../../static/tabs/xingzhuang.png', url:"/pages/rain/rain" }, { value: '水情', key: 2, - icon: '../../static/tabs/water (1) 拷贝@2x.png', + icon: '../../static/tabs/water.png', url:"/pages/water/water" }, { value: '工情灾情', key: 3, - icon: '../../static/tabs/工情——icon@2x.png', + icon: '../../static/tabs/gongqing.png', url:'/pages/gqzq/index' }, { diff --git a/pages/login/login.vue b/pages/login/login.vue index 9d87a63..e583ebc 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -96,7 +96,7 @@ console.log('-----avatar------',uni.getStorageSync('avatar')); }) } else { - uni.setStorageSync('avatar','../../static/tabs/头像_icon@2x.png') + uni.setStorageSync('avatar','../../static/tabs/touxing.png') } }) } diff --git a/pages/personInfo/personInfo.vue b/pages/personInfo/personInfo.vue index d8c0595..f25f5c4 100644 --- a/pages/personInfo/personInfo.vue +++ b/pages/personInfo/personInfo.vue @@ -101,7 +101,7 @@ } else if(res.tapIndex === 1) { //恢复默认头像 console.log('click'); this.reset = true - this.default_src = '../../static/tabs/头像_icon@2x.png' + this.default_src = '../../static/tabs/touxiang.png' } }, fail: (err) => { @@ -151,7 +151,7 @@ if (this.reset) { //重置头像 //调接口清空返回图片路径的data uni.$http.get('/gunshiApp/xfflood/my/info/recover').then(res=>{ - uni.setStorageSync('avatar','../../static/tabs/头像_icon@2x.png') + uni.setStorageSync('avatar','../../static/tabs/touxiang.png') }) console.log('重置头像'); } diff --git a/static/h5Player/1.0升级至2.0+注意事项.txt b/static/h5Player/1.0升级至2.0+注意事项.txt deleted file mode 100644 index 9bae493..0000000 --- a/static/h5Player/1.0升级至2.0+注意事项.txt +++ /dev/null @@ -1 +0,0 @@ -1ɾDecoder.jsⲿãDecoder.jsȫڱʼDZʱϾã׳ֻûʱȫֵ \ No newline at end of file diff --git a/static/h5Player/doc/H5playerV2.1.2开发指南.html b/static/h5Player/doc/H5playerV2.1.2开发指南.html deleted file mode 100644 index 0351a49..0000000 --- a/static/h5Player/doc/H5playerV2.1.2开发指南.html +++ /dev/null @@ -1,2008 +0,0 @@ - - - - - no title - - - - - - - -
-
-
-
- -

h5player

-
-
-
-
- -

接口说明

-
-
-
- -
-
- -
-
- -
-

h5player

-

描述

-

h5player是一个基于HTML5的流式网络视频播放器,无需安装浏览器插件即可通过websocket协议向媒体服务取流播放多种格式的音视频流。

-

版本

-

当前版本 2.0.0

-

媒体版本限制

-

媒体网关:mgc_V5.11.101003 或 mgc_V5.13.100版本及以上

-

使用注意事项

-

1、需要在web服务器返回的响应头增加跨域隔离字段:Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin 并在https环境下使用。否则高级模式无法使用
-2、在集成过程中new JSPlugin时候必填szBasePath: './dist', // 必填,引用H5player.min.js的js相对目录,否则会引起内部加载解码库异常

-

浏览器限制以及编解码支持情况

-

以下数据都是在pc chrome80+测试所得

- - - - - - - - - - - - - - - - - -
解码方式浏览器限制
高级模式当前支持 Chrome80+,ios safari,andriod browser
普通模式除 IE 和 IOS Safari 外,基本都支持
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
解码方式视频编码格式音频编码格式
H264H265AACAACLDADPCMG711G722_1G726MP2Opus
高级模式
普通模式
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
解码方式视频编码格式分辨率视频参数(bps*fps)解码路数(系统:Win7)
CPU:
I7_8700K
CPU:
I5-9400/F
CPU:
I3-8100
显卡:RTX2080显卡:GTX1050TI显卡:GT1030D5
高级模式H2651080P4M * 25643
720P2M * 2514106
H2641080P4M * 25 643
720P2M * 2514106
普通模式H265(采用高级模式解码)1080P4M * 25643
720P2M * 2514106
H2641080P4M * 2524209
720P2M * 25323216
-

接口调用流程图

-

其余控制接口调用都在JS_Play后调用

-
st=>start: 开始
-e=>end: 结束
-op1=>operation: 创建实例:new JSPlugin|past
-op2=>operation: 事件初始化:JS_SetWindowControlCallback|past
-op3=>operation: 调用预览/回放接口:JS_Play|current
-op4=>operation: 调用停止接口:JS_Stop|current
-op5=>operation: 抓图|current
-
-st->op1->op2->op3->op4
-op4->e
-

引入

-

直接用<script>标签引入

-
<!-- h5player -->
-<script src="h5player.min.js"></script>
-

创建实例

-
<body>
-  <div id="play_window"></div>
-  <script>
-    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,
-    })
-  </script>
-</body>
-

接口说明

-

事件初始化: JS_SetWindowControlCallback(events)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
eventsObject事件对应的处理函数集合
返回:Promise
-
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) => {  //对讲错误回调
-    console.log('recv talkPluginErrorHandler: '+iErrorCode);
-},
-});
-

播放: JS_Play(url, config, windowIndex, startTime, endTime)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
urlString流媒体URL
configObject播放配置必传,详情见示例
windowIndexNumber当前窗口下标
startTimeDateTime回放开始时间,统一格式,格式类型:2023-05-16T00:00:00Z或2023-05-16T07:47:36.000+08:00预览不能填,回放必填
endTimeDateTime回放结束时间,格式类型:统一格式,格式类型:2023-05-16T00:00:00Z或2023-05-16T07:47:36.000+08:00预览不能填,回放必填
返回:Promise
-
let url = document.getElementById('url').value;
-let startTime, endTime;
-myPlugin.JS_Play(
-  url,
-  {
-    playURL: url, // 流媒体播放时必传
-    mode: 0, // 解码类型:0=普通模式; 1=高级模式 默认为0
-    // ...
-  },
-  curIndex, //当前窗口下标
-
-  // 回放参数
-  startTime,
-  endTime,
-).then(
-  () => {
-    console.info('JS_Play success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Play failed:', err);
-    // do you want...
-  }
-);
-

停止播放: JS_Stop(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_Stop(curIndex).then(
-  () => {
-    console.info('JS_Stop success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Stop failed:', err);
-    // do you want...
-  }
-);
-

停止所有播放: JS_StopRealPlayAll()

-

参数:无
-返回:Promise

-
myPlugin.JS_StopRealPlayAll().then(
-  () => {
-    console.info('JS_StopRealPlayAll success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_StopRealPlayAll failed');
-    // do you want...
-  }
-);
-

开启声音: JS_OpenSound(windowIndex)

-

参数:
-说明:一个实例下只支持一路声音播放,开启下一路会默认关闭上一路声音。倍数不支持声音播放

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标否,不传时默认开启当前选中窗口的声音
返回:Promise
-
myPlugin.JS_OpenSound(curIndex).then(
-  () => {
-    console.info('JS_OpenSound success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_OpenSound failed');
-    // do you want...
-  }
-);
-

关闭声音: JS_CloseSound(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标否,不传时默认关闭当前选中窗口的声音
返回:Promise
-
myPlugin.JS_CloseSound(curIndex).then(
-  () => {
-    console.info('JS_CloseSound success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_CloseSound failed');
-    // do you want...
-  }
-);
-

设置音量: JS_SetVolume(windowIndex, volumn)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
volumnNumber音量大小是,范围1~100,默认50
返回:Promise
-
myPlugin.JS_SetVolume(curIndex, volumn).then(
-  () => {
-    console.info('JS_SetVolume success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_SetVolume failed');
-    // do you want...
-  }
-);
-

获取当前音量: JS_GetVolume(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_GetVolume(curIndex).then(
-  (volumn) => { //在不设置音量的情况下默认50
-    console.info('JS_GetVolume success', volumn);
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_GetVolume failed');
-    // do you want...
-  }
-);
-

录像: JS_StartSaveEx(windowIndex, fileName, idstType)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
fileNameString文件名(保证全局唯一性)是,可不带后缀,默认为.mp4
idstTypeNumber录像文件类型是,2-ps 5-mp4 ,mp4录制音频限制,仅支持AAC、G711A、G711U
返回:Promise
-
let fileName = 'fileName.mp4';
-myPlugin.JS_StartSaveEx(curIndex, fileName, 2).then(
-  () => {
-    console.info('JS_StartSave success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_StartSave failed');
-    // do you want...
-  }
-);
-

停止录像并保存文件: JS_StopSave(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
let fileName = 'fileName.mp4';
-myPlugin.JS_StopSave(windowIndex).then(
-  () => {
-    console.info('JS_StopSave success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_StopSave failed');
-    // do you want...
-  }
-);
-

抓图: JS_CapturePicture(windowIndex, fileName, fileType, callback)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
fileNameString文件名
fileTypeString文件类型是,'JPEG'
callbackFuction回调函数
返回:Promise
-
let fileName = 'img';
-let fileType = 'JPEG';
-//下载到本地
-myPlugin.JS_CapturePicture(curIndex, fileName, fileType).then(
-  () => {
-    console.info('JS_CapturePicture success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_CapturePicture failed');
-    // do you want...
-  }
-);
-//不进行下载,数据回调,JS_CapturePicture接口在jsdecoder1.0解码方式下连续调用会存在失败的情况,如果既要回调又要下载,请自行对回调数据进行下载
-myPlugin.JS_CapturePicture(curIndex, fileName, fileType,imageData => {
-    console.info('JS_CapturePicture success', imageData); //2.1.0开始全是base64,之前的版本存在blob或者是base64
-    // do you want...
-})
-
-

回放:JS_Play()

-

停止回放:JS_Stop()

-

暂停回放: JS_Pause(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_Pause(curIndex).then(
-  () => {
-    console.info('JS_Pause success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Pause failed');
-    // do you want...
-  }
-);
-

恢复回放: JS_Resume(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_Resume(curIndex).then(
-  () => {
-    console.info('JS_Resume success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Resume failed');
-    // do you want...
-  }
-);
-

开始对讲: JS_StartTalk(szTalkUrl)

-

特殊声明:由于浏览器的安全限制,该功能只能在https域下使用,只支持一路对讲
-参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
szTalkUrlString对讲URL
返回:Promise
-
myPlugin.JS_StartTalk(szTalkUrl).then(
-  () => {
-    console.info('JS_StartTalk success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_StartTalk failed');
-    // do you want...
-  }
-);
-

停止对讲: JS_StopTalk()

-

返回:Promise

-
myPlugin.JS_StopTalk().then(
-  () => {
-    console.info('JS_StopTalk success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_StopTalk failed');
-    // do you want...
-  }
-);
-

设置对讲音量:JS_TalkSetVolume(nVolume)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
nVolumenumber音量大小(0-100)
返回:Promise
-
myPlugin.设置对讲音量:JS_TalkSetVolume(nVolume).then(
-  () => {
-    console.info('JS_TalkSetVolume success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_TalkSetVolume failed');
-    // do you want...
-  }
-);
-

获取对讲音量: JS_TalkGetVolume()

-

返回:Promise

-
myPlugin.JS_TalkGetVolume().then(
-  () => {
-    console.info('JS_TalkGetVolume success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_TalkGetVolume failed');
-    // do you want...
-  }
-);
-

录像、抓图功能同预览播放

-

回放快放: JS_Fast(windowIndex)

-

调节播放倍速为当前播放速度的2倍,最大为8倍。
-参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_Fast(curIndex).then(
-  () => {
-    console.info('JS_Fast success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Fast failed');
-    // do you want...
-  }
-);
-

回放慢放: JS_Slow(windowIndex)

-

调节播放倍速为当前播放速度的1/2倍,最小为1/8倍。
-参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_Slow(curIndex).then(
-  () => {
-    console.info('JS_Slow success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Slow failed');
-    // do you want...
-  }
-);
-

回放定位: JS_Seek(windowIndex, stratTime, endTime)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
stratTimeDateTime开始时间,格式类型:2021-06-29T00:00:00Z
endTimeDateTime结束时间,格式类型:2021-06-29T00:00:00Z
返回:Promise
-
myPlugin.JS_Seek(curIndex,zStartDate, szEndDate).then(
-  () => {
-    console.info('JS_Seek success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Seek failed');
-    // do you want...
-  }
-);
-

回放单帧进(高级模式功能): JS_FrameForward(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_FrameForward(curIndex).then(
-  () => {
-    console.info('JS_FrameForward success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_FrameForward failed');
-    // do you want...
-  }
-);
-

电子放大(高级模式功能): JS_EnableZoom(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标否,不传时默认开启当前选中窗口的电子放大功能
返回:Promise
-
myPlugin.JS_EnableZoom(curIndex).then(
-  () => {
-    console.info('JS_EnableZoom success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_EnableZoom failed');
-    // do you want...
-  }
-);
-

开启/关闭智能信息展示(高级模式功能): JS_RenderALLPrivateData(iWndNum, bOpenFlag)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
iWndNumNumber窗口下标
bOpenFlagBoolean开启/关闭
返回:Promise
-
myPlugin.JS_RenderALLPrivateData(iWndNum, true).then(
-  () => {
-    console.info('JS_RenderALLPrivateData success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_RenderALLPrivateData failed');
-    // do you want...
-  }
-);
-

分屏: JS_ArrangeWindow(splitNum)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
splitNumNumber分隔数是, 范围:1~4
返回:Promise
分隔数分屏效果
--------
11x1
22x2
33x3
44x4
-
myPlugin.JS_ArrangeWindow(splitNum).then(
-  () => {
-    console.info('JS_ArrangeWindow success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_ArrangeWindow failed');
-    // do you want...
-  }
-);
-

切换选中窗口: JS_SelectWnd(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_SelectWnd(windowIndex).then(
-  () => {
-    console.info('JS_SelectWnd success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_SelectWnd failed');
-    // do you want...
-  }
-);
-

整体全屏: JS_FullScreenDisplay(isFull)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
isFullBoolean是否全屏
返回:Promise
-
myPlugin.JS_FullScreenDisplay(true).then(
-  () => {
-    console.info('JS_FullScreenDisplay success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_FullScreenDisplay failed');
-    // do you want...
-  }
-);
-

单窗口全屏: JS_FullScreenSingle(windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
-
myPlugin.JS_FullScreenSingle(curIndex).then(
-  () => {
-    console.info('JS_FullScreenSingle success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_FullScreenSingle failed');
-    // do you want...
-  }
-);
-

设置窗口大小:JS_Resize (iWidth, iHeight)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
iWidthNumber播放页面宽度否,不传时默认父窗口大小
iHeightNumber播放页面高度否,不传时默认父窗口大小
返回:Promise
-
myPlugin.JS_Resize().then(
-  () => {
-    console.info('JS_Resize success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_Resize failed');
-    // do you want...
-  }
-);
-

获取OSD时间:JS_GetOSDTime (windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
成功返回从1970-1-1 00:00:00 到该日期对象的毫秒数,但是获取的精度只到秒级别,毫秒都是0
-
myPlugin.JS_GetOSDTime(curIndex).then(
-  (time) => {
-    console.info("osdTime:", new Date(time));
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_GetOSDTime failed');
-    // do you want...
-  }
-);
-

获取音视频信息:JS_GetVideoInfo (windowIndex)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
返回:Promise
videoInfo = {
-
  VideType: 'h264',  //视频编码格式
-  audioType: 'without',//音频编码格式
-  width: 0,//视频分辨率的宽
-  height: 0,//视频分辨率的高
-  frameRate: 25,//视频帧率
-  bitRate: 2048,//视频码率,单位:Kb/s
-  systemFormt: "ps"//视频封装格式
-
-

};

-
myPlugin.JS_GetVideoInfo(curIndex).then(
-  (VideoInfo) => {
-    console.info("VideoInfo:", VideoInfo);
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_GetVideoInfo failed');
-    // do you want...
-  }
-);
-

设置取流连接超时时间:JS_SetConnectTimeOut (windowIndex, nTime)

-

参数:
-说明:该接口不调用时默认6s,在JS_Play之前调用

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
nTimeNumber超时时间是,不传时默认0秒,单位秒
返回:Promise
-
myPlugin.JS_SetConnectTimeOut(curIndex, nTime).then(
-  () => {
-    console.info('JS_SetConnectTimeOut success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_SetConnectTimeOut failed');
-    // do you want...
-  }
-);
-

设置私有数据回调(高级模式功能):JS_SetAdditionDataCB(windowIndex, szType, cbCallback)

-

参数:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
szTypeNumber数据类型是,0x0101: 定制温度 0x0103: 基线温度裸数据 0x0006: 车载行车信息 0x0009: 车载调试信息 0x0007: POS 信息解析回调 0x0010: 汽车电子私有信息 0x0011: 无人机私有信息 0x0804: 数立体云防私有数据 0x000B: 设备扩展信息
cbCallbackfunction回调函数是,function(dataType, dataStrVersion, dataTimeStamp, additionDataBuffer)
-

返回:Promise

-
myPlugin.JS_SetAdditionDataCB(curIndex, 0x0804, function(dataType,dataStrVersion, dataTimeStamp, additionDataBuffer){
-  console.log(" JSPlayM4_AdditionDataCBFun dataType:"+dataType +",dataStrVersion:"+dataStrVersion+",dataTimeStamp:"+dataTimeStamp);
-  }).then(
-  () => {
-    console.info('JS_SetAdditionDataCB success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_SetAdditionDataCB failed');
-    // do you want...
-  }
-);
-

设置traceId:JS_SetTraceId(windowIndex, bOpenFlag)

-

说明:traceId是查询调用链的唯一标识,H5player不做调用链埋点,只拼接traceId,traceId建议在传入url的时候自行拼接
-拼接规则:取流url中无?则拼接?traceId=uuid(随机生成的一个id编号);有?则拼接&traceId=uuid
-示例:wss://10.19.147.57:6014/proxy/10.19.147.57:559/EUrl/SiSnW6z?traceId=d9d0766e3b3f7a41
-参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
bOpenFlagNumber是否设置traceId是,该接口不调用默认false
-

返回:Promise

-
myPlugin.JS_SetTraceId(curIndex, bOpenFlag).then(
-  () => {
-    console.info('JS_SetTraceId success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_SetTraceId failed');
-    // do you want...
-  }
-);
-

设置断流时间回调:JS_SetInterruptTime(iWndNum, InterruptTime)

-

说明:断流的事件统一从JS_SetWindowControlCallback的InterruptStream回调,InterruptTime为检测无码流的时间,每过InterruptTime回调一次断流事件,未设置默认每过5s无码流回调一次断流事件
-参数:

- - - - - - - - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
InterruptTimeNumber检测断流时间阈值,单位:秒,默认5秒
-

返回:Promise

-
let InterruptTime = 5;
-myPlugin.JS_SetInterruptTime(iWndNum, InterruptTime).then(
-  () => {
-    console.info('JS_SetInterruptTime success');
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_SetInterruptTime failed');
-    // do you want...
-  }
-);
-

获取traceId:JS_GetTraceId(windowIndex)

-

说明:traceId是查询调用链的唯一标识,H5player不做调用链埋点,只拼接traceId,traceId建议在传入url的时候自行拼接,更方便应用层管理,h5player内部会检测无traceId时会默认拼接上
-拼接规则:取流url中无?则拼接?traceId=uuid(随机生成的一个id编号);有?则拼接&traceId=uuid
-示例:wss://10.19.147.57:6014/proxy/10.19.147.57:559/EUrl/SiSnW6z?traceId=d9d0766e3b3f7a41
-参数:

- - - - - - - - - - - - - - - - - -
参数名类型说明必需
windowIndexNumber窗口下标
-

返回:Promise

-
myPlugin.JS_GetTraceId(curIndex).then(
-  (traceId) => {
-    console.info('JS_GetTraceId success', traceId);
-    // do you want...
-  },
-  (err) => {
-    console.info('JS_GetTraceId failed');
-    // do you want...
-  }
-);
-

错误码及其描述

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
错误码描述
0x12f900001接口调用参数错误
0x12f900002不在播放状态
0x12f900003仅回放支持该功能
0x12f900004普通模式不支持该功能
0x12f900005高级模式不支持该功能
0x12f900006高级模式的解码库加载失败
0x12f900008url格式错误
0x12f900009取流超时错误
0x12f900010设置或者是获取音量失败,因为没有开启音频的窗口
0x12f900011设置的音量不在1-100范围
0x12f910000websocket连接失败,请检查网络是否通畅,URL是否正确
0x12f910010取流失败
0x12f910011流中断,电脑配置过低,程序卡主线程都可能导致流中断
0x12f910014没有音频数据
0x12f910015未找到对应websocket,取流套接字被动关闭的报错
0x12f910016websocket不在连接状态
0x12f910017不支持智能信息展示
0x12f910018websocket长时间未收到message
0x12f910019wss连接失败,原因:端口尚未开通、证书未安装、证书不安全
0x12f910020单帧回放时不能暂停
0x12f910021已是最大倍速
0x12f910022已是最小倍速
0x12f910023ws/wss连接超时,默认6s超时时间,原因:网络异常,网络不通
0x12f910026jsdecoder1.0解码报错视频编码格式不支持
0x12f910027后端取流超时,主动关闭连接(设备突然离线或重启,网络传输超时20s)
0x12f910028设置的缓冲区大小无效,大小0-510241024,不在该范围的报错
0x12f910029普通模式的报错,码流异常导致黑屏,尝试重新取流
0x12f910031普通模式下播放卡主会出现
0x12f910032码流编码格式普通模式下不支持,可切换高级模式尝试播放
0x12f920015未调用停止录像,再次调用开始录像
0x12f920016未开启录像调用停止录像接口错误
0x12f920017紧急录像目标格式不支持,非ps/mp4
0x12f920018紧急录像文件名为null
0x12f930010内存不足
0x12f930011首帧显示之前无法抓图,请稍后重试
0x12f950000采集音频失败,可能是在非https域下使用对讲导致
0x12f950001对讲不支持这种音频编码格式
-

FAQ

-

1.Q: Uncaught Error: Site or Page Not Found : http://localhost/Decoder.data
-A: 把 decoder.data 文件放在根目录下
-2.Q: 实测性能和给的性能数据不符,使用了chrome92版本,没有加跨域隔离导致
-A: http头增加跨域隔离,Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin 并在https环境下使用。

-
-
- - diff --git a/static/h5Player/doc/H5播放器功能性能说明.xlsx b/static/h5Player/doc/H5播放器功能性能说明.xlsx deleted file mode 100644 index 01a6645c6620ee91c9ea7fde619efc783dca8a33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16879 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 L5CgyYdWio6;c7u= diff --git a/static/tabs/工情——icon@2x.png b/static/tabs/gongqing.png similarity index 100% rename from static/tabs/工情——icon@2x.png rename to static/tabs/gongqing.png diff --git a/static/tabs/首页@2x.png b/static/tabs/home.png similarity index 100% rename from static/tabs/首页@2x.png rename to static/tabs/home.png diff --git a/static/tabs/首页2@2x.png b/static/tabs/home1.png similarity index 100% rename from static/tabs/首页2@2x.png rename to static/tabs/home1.png diff --git a/static/tabs/铃铛@2x.png b/static/tabs/ld.png similarity index 100% rename from static/tabs/铃铛@2x.png rename to static/tabs/ld.png diff --git a/static/tabs/头像_icon@2x.png b/static/tabs/touxiang.png similarity index 100% rename from static/tabs/头像_icon@2x.png rename to static/tabs/touxiang.png diff --git a/static/tabs/water (1) 拷贝@2x.png b/static/tabs/water.png similarity index 100% rename from static/tabs/water (1) 拷贝@2x.png rename to static/tabs/water.png diff --git a/static/tabs/形状 1@2x.png b/static/tabs/xingzhuang.png similarity index 100% rename from static/tabs/形状 1@2x.png rename to static/tabs/xingzhuang.png diff --git a/unpackage/dist/dev/app-plus/assets/uniicons.b6d3756e.ttf b/unpackage/dist/dev/app-plus/assets/uniicons.b6d3756e.ttf deleted file mode 100644 index 835f33bc9411461b8b9046b3fec742e921d6ce3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35760 zcmeFacbp?vl{Q?rN>WLsSXIigCAC7gI!S6tox^m`be^1}CwPJ>yxZ{uSzi{WC_=LI+*Wx!<-H!v})21fuKMZQ#fB2Fs zuEGwU_ZyDmuR3&e_s&PS@Be}0T=(JF$l;w=9Als0-iQ4lE^0cm^YDeWhnK#G<4!$@ z>-QZydhsP6Kl0Pv9Cw|EbP-?YO$@C;`+ zuKnR1zxV)MXnddfv56Dn_-W<%#_jZ^d%1f!hyI(6O8C!lXY}93nl=3f9^gzbYS03Jm0vJ;T)Z1IKntfUtypB#zx`e6wG3 zC5AhB&Me^QdH${3yL1otSUp#NN^cKN_yKnkm%XqxczWUgrT^Oo|6lL`SPy&+DZ_DX z1{?B^82rf|!cpSXHhg1*;kZecHy+MI*MqCu>g9T0eYieaf9edzAC9!tJL|pm0UQ~l zBQN;JaG!_sb8)VT%i=%By_I_#_ZIFh?(N(=xVtf?-^|^~y@`7RcMEqbcN=#*_eSmx z?)BVjxU0EqFm9T;Q`~9pTJAdTdhWH{>+qBtxEr~fxSP3Gb60T(xkKDx?g)33JH{R7 zPH-1465x0fg%5CGeb33>TxSiZCZa24wyO7(&Q z>$wfwMs5?gnVaOMxM^;NYvpFSIc_<(f-7(s&u0CxL#u8VbF$klItIryQ@x|5W z48lm`>dOtnnB(dz48rK+>MISxIOOW948n-y>Z=XH*yQSK48kbo>T3axcUVKK~8Y>od!W-aP?gVL3VKU-3CF5aP>U~L7s5+3k`x~;p%%0f{fwn z`wW7#;p+Phg52Ti2MmG);_4R}1X;w@scs-hC9Y0&13^AJNK#+l4o$3aH zH00`3HxT3^SEssxAR)Or)eQt$$+z7tkWDxWPSHIIBXb!IaW`m$ZxcXZRf;QpmZ#4*d zg{!~KAZQq_ewRVeHC+Ae20`m^^>-Kq{lnGoHVB%CtKVY~bP`v;*C1#ou700E&{JIf zeuJQ~xcWN{g6`t#?=lEljH|!fAm}r${tpI0vvKtY41$j1>hCcK+K#I~Xb|)sSAVZT z(12Y1eFi}na`pEc1g*%`|Ir}mN3Q+>gPp}tAE%avLosrF^GJG z`bQ0dZsqD9GYDFitAE@e=v%J-34@?{x%wv!f)3{DpE3yAn5#cz5cD!v|Fl8S&|Lj9 z20>SI_0JjvtVjlpxwFpV+N5QQ~$g{(D+>a3kE^= zbM-G81S^26f5{-&16=*f2Ej7m>R&MkHUd}wszKz<)E_qpb^}-cnn7g6)t@j3wggxI zxp1QBm2=klxXa|a&TVx+;Qp=WwVt{>D}O~9QXW)O>O0h5db_-@^8Ud$^pPT-1=NS-v_4k2r|_kM*0!vaW9xyNll~`AaKH zuPQxR4wv6t{%QC2?wh**v$DGKU?rS_5?F|crGafkiL7dNk-%Y_E4VmkSn6>Hb;SUukEx3l0# zej=BS$yT%Av8Uc*J`xpdRw>aQ5n{34Scli{%@0hjo|#!%t;CXMOO1~vM@By$$wu(0 z7+*JsbCF0c%-{dHFL+pQI~s3&zjaOf89{d%!`6o3fsCO(`6

PqiNa$~E4XJ#a8s%?nsx`&SiQ7Wz{CE9c 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