Coder Social home page Coder Social logo

ezuikit-javascript-npm's Introduction

[EZUIKit-JavaScript-npm][ezuikit-js]

Download Version License Build Demos

轻应用npm版本,降低接入难度,适配自定义UI,适配主流框架

低延时预览,云存储回放,SD卡回放

功能API丰富,如:播放控制,音频控制,视频截图,实时获取视频OSDTime,视频录制,设备对讲,电子放大,全屏等

获取ezuikit-js

npm install ezuikit-js

# yarn

yarn add ezuikit-js

# pnpm

pnpm add ezuikit-js

引入ezuikit-js

import EZUIKit from 'ezuikit-js';

如果你使用原生方法,可以通过标签引用

  <!-- umd -->
  <script src="./ezuikit.js"></script>

开始使用 - 初始化

基本使用

创建DOM

  <div id="video-container"></div>

播放器初始化

直播

    var player = new EZUIKit.EZUIKitPlayer({
      id: 'video-container', // 视频容器ID
      accessToken: 'at.3bvmj4ycamlgdwgw1ig1jruma0wpohl6-48zifyb39c-13t5am6-yukyi86mz',
      url: 'ezopen://open.ys7.com/G39444019/1.live',
      width: 600,
      height: 400,
      handleError: (err) => {
        if (err.type === "handleRunTimeInfoError" && err.data.nErrorCode === 5) {
          // 加密设备密码错误
        }
      },
    })

回放

    var player = new EZUIKit.EZUIKitPlayer({
      id: 'video-container', // 视频容器ID
      width: 600,
      height: 400,
      accessToken: 'at.3bvmj4ycamlgdwgw1ig1jruma0wpohl6-48zifyb39c-13t5am6-yukyi86mz',
      url: 'ezopen://open.ys7.com/G39444019/1.rec'
    })

tips

为方便开发者快速接入

我们提供了测试accessToken,测试播放地址,并提供了几种常用场景使用示例。你可以通过使用示例,使用测试播放地址,测试accessToken,在你的应用快速接入。

测试播放地址: ezopen://open.ys7.com/G39444019/1.live

你可以通过以下地址获取到测试accessToken 获取测试accessToken 用来播放上述测试播放地址。 当前设备有可能下线或被移除了, 如果自己有设备优先使用自己的设备进行测试。

最佳实践tips

  1. 我们在v0.6.2及以上版本持用户通过开启谷歌实验室特性启动多线程解码,多线程模式将大大提升解码效率,降低解码内存消耗。

开启多线程方式1(https://open.ys7.com/help/384)

开启多线程方式2(https://open.ys7.com/help/385)

  1. 视频解码库默认从开放平台远程拉取,你可以将解码库放到本地或者你的服务内,可以提升加载解码库速度。

使用本地解码库提升加载速度 开发者需要自己设置静态资源文件地址, 参考 staticPath的配置

使用示例

  1. 快速创建视频播放页面

    基本使用: 基本使用示例

  1. 前往开放平台轻应用模板管理页创建一个主题,可以动态配置你的播放主题,控件,示例展示了获取一个主题后使用示例。

    自定义主题: 自定义主题示例

  1. 你可以本地创建一个主题配置,可以本地配置你的播放主题,控件,示例展示了本地配置项使用示例。

    本地主题配置: 本地主题配置示例

  1. 我们提供了一些通用场景的主题,PC端预览,PC端回放,移动端预览,移动端回放,你也可以直接使用。

    PC端预览-固定主题: PC端预览-固定主题示例

    PC端回放-固定主题: PC端回放-固定主题示例

    移动端预览-固定主题: 移动端预览-固定主题示例

    移动端回放-固定主题: 移动端回放-固定主题示例

同一个页面播放多个视频,可以参考:

    单页面多实例(视频多窗口): 单页面多实例(视频多窗口)示例

附录: 初始化参数说明

参数名类型描述是否必选
idString播放器容器DOM的idY
accessTokenString授权过程获取的access_tokenY
urlString

直播

标清

ezopen://open.ys7.com/${设备序列号}/{通道号}.live

高清

ezopen://open.ys7.com/${设备序列号}/{通道号}.hd.live

回放

sd卡回放

初始化参数 url值为:
ezopen://open.ys7.com/${设备序列号}/{通道号}.rec?begin=yyyyMMddhhmmss

云存储回放

初始化参数 url值为:
ezopen://open.ys7.com/${设备序列号}/{通道号}.cloud.rec?begin=yyyyMMddhhmmss 视频ezopen协议播放地址 详见:ezopen协议

Y
audioboolean是否默认开启声音 true:打开(默认) false:关闭 N
widthint视频宽度,默认值为容器容器DOM宽度 Y
heightint视频高度,默认值为容器容器DOM高度Y
staticPathstring设置静态资源地址, 自定义可以自行下载 `ezuikit_static`放置在自己的服务器下, 设置 {staticPath: "/ezuikit_static"} N
templateString
模板值描述
simple极简版 *固定模板 仅包含视频播放窗口,创建实例后通过方法集控制视频播
放相关功能
standard标准版; *固定模板 包含视频窗口,叠加了停止,录制,全屏控件(通过
控件快捷调用方法集合控制视频播放相关功能,但你仍然可以通过方法集直接控制视频播放相关功
能。下同)
security安防版(预览回放); *固定模板 包含视频窗口,叠加了录制,全屏控件,
标清/高清切换,预览录制切换控件*
voice语音版; *固定模板 包含视频窗口,叠加了录制,全屏控件,语音播报,语音
对讲控件*
pcLive *固定模板 按钮列表,颜色,底部头部背景色固定,可用于pc端预览,如需
修改按钮配置,头部底部背景色,可参考 {{自定义themeId}},或者使用
themeData本地配置*
pcRec *固定模板 按钮列表,颜色,底部头部背景色固定, 可用于pc端回放,如需
修改按钮配置,头部底部背景色,可参考 {{自定义themeId}},或者使用themeData
本地配置*
mobileLive *固定模板 按钮列表,颜色,底部头部背景色固定,可用于移动端预
览,如需修改按钮配置,头部底部背景色,可参考 {{自定义themeId}},或者使用themeData
本地配置*
mobileRec*固定模板 按钮列表,颜色,底部头部背景色固定, 可用于移动端回放,
如需修改按钮配置,头部底部背景色,可参考 {{自定义themeId}},或者使用themeData
本地配置*
自定义themeId自定义主题,前往开放平台控制台配置页面获取
(v0.6.2版本及以上支持,建议使用 自定义themeId,或者使用themeData本地
配置);
themeDataObject themeData将主题数据本地化,设置本地数据,需要删除template参数
你可以通过themeData修改按钮位置,颜色,头部底部颜色等配置。

配置示例:



{
    "autoFocus": 5,
    "poster":"https://resource.eziot.com/group1/M00/00/89/CtwQEmLl8r-AZU7wAAETKlvgerU237.png",
    "header": {
        "color": "#1890ff",
        "activeColor": "#FFFFFF",
        "backgroundColor": "#000000",
        "btnList": [
            {
                "iconId": "deviceID",
                "part": "left",
                "defaultActive": 0,
                "memo": "顶部设备名称",
                "isrender": 1
            },
            {
                "iconId": "deviceName",
                "part": "left",
                "defaultActive": 0,
                "memo": "顶部设备ID",
                "isrender": 1
            },
            {
                "iconId": "cloudRec",
                "part": "right",
                "defaultActive": 0,
                "memo": "头部云存储回放",
                "isrender": 0
            },
            {
                "iconId": "rec",
                "part": "right",
                "defaultActive": 0,
                "memo": "头部本地回放",
                "isrender": 0
            }
        ]
    },
    "footer": {
        "color": "#FFFFFF",
        "activeColor": "#1890FF",
        "backgroundColor": "#00000021",
        "btnList": [
            {
                "iconId": "play",
                "part": "left",
                "defaultActive": 1,
                "memo": "播放",
                "isrender": 1
            },
            {
                "iconId": "capturePicture",
                "part": "left",
                "defaultActive": 0,
                "memo": "截屏按钮",
                "isrender": 1
            },
            {
                "iconId": "sound",
                "part": "left",
                "defaultActive": 0,
                "memo": "声音按钮",
                "isrender": 1
            },
            {
                "iconId": "pantile",
                "part": "left",
                "defaultActive": 0,
                "memo": "云台控制按钮",
                "isrender": 1
            },
            {
                "iconId": "recordvideo",
                "part": "left",
                "defaultActive": 0,
                "memo": "录制按钮",
                "isrender": 1
            },
            {
                "iconId": "talk",
                "part": "left",
                "defaultActive": 0,
                "memo": "对讲按钮",
                "isrender": 1
            },
            {
                "iconId": "zoom",
                "part": "left",
                "defaultActive": 0,
                "memo": "电子放大",
                "isrender": 1
            },
            {
                "iconId": "hd",
                "part": "right",
                "defaultActive": 0,
                "memo": "清晰度切换按钮",
                "isrender": 1
            },
            {
                "iconId": "webExpend",
                "part": "right",
                "defaultActive": 0,
                "memo": "网页全屏按钮",
                "isrender": 1
            },
            {
                "iconId": "expend",
                "part": "right",
                "defaultActive": 0,
                "memo": "全局全屏按钮",
                "isrender": 1
            }
        ]
    }
}
N
pluginString按需加载插件,可选值: talk:对讲,示例:plugin:["talk"] N
handleSuccessfunction自动播放成功回调N
handleErrorfunction错误回调N
seekFrequency function为避免频繁拖动播放异常,可设置模板回放时间轴拖动防抖间隔,默认值为2000(2秒),可取2000(2秒),3000(3秒),4000(4秒),5000(5秒)N

方法调用

同步方法(方式1) 方法支持通过promise回调,可通过回调方式执行下一步动作(方式2)。

开始播放

  // 方式1
  player.play();
  // 方式2
  player.play()
  .then(()=>{
    console.log("执行播放成功后其他动作");
  });

停止播放

  // 方式1
  player.stop();
  // 方式2
  player.stop()
  .then(()=>{
    console.log("执行停止成功后其他动作");
  });

开启声音

  // 方式1
  player.openSound();
  // 方式2
  player.openSound()
  .then(()=>{
    console.log("执行开启声音成功后其他动作");
  });

关闭声音

  // 方式1
  player.closeSound();

开始录制

因录制解码库加载限制,录制库加载需要3S秒左右,请保证录制时长需要大于5秒。 录制文件需要使用播放器,播放器下载地址 播放器下载

  // 方式1
  player.startSave("唯一文件名");
  // 方式2
  player.startSave("唯一文件名")
  .then(()=>{
    console.log("执行开始录制成功后其他动作");
  });

停止录制并下载文件

  // 方式1
  player.stopSave();
  // 方式2
  player.stopSave()
  .then(()=>{
    console.log("执行停止录制成功后其他动作");
  });

抓图

  // 方式1 - 下载到本地
  player.capturePicture("文件名");
  // 方式2 - 返回base64格式
  const capCallback = (data) => {
    console.log("data",data)
  }
  player.capturePicture('default',capCallback)

开始对讲

  player.startTalk();

结束对讲

  player.stopTalk();

全屏

  player.fullScreen();

取消全屏

  player.cancelFullScreen();

获取OSD时间

   player.getOSDTime()
  .then((time)=>{
    console.log("获取到的当前播放时间", time);
  });

切换地址播放

可用于在播放中切换设备,切换播放参数,以及直播切换回放等。请注意,频繁切换可能导致异常,切换间隔至少需要1秒

  player.changePlayUrl(options)
  .then(()=>{
    console.log("切换成功")
  });

options参数说明

参数名 类型 是否必选 默认值 描述
type String Y 播放地址类型,"live":预览,"rec":回放;“cloud.rec”:云存储回放
deviceSerial String Y 设备序列号,存在英文字母的设备序列号,字母需为大写
channelNo int Y 通道号
accessToken String N 初始化时获取 授权过程获取的access_token
hd boolean N 初始化时获取 是否为高清 true-主码流(高清) false-子码流(标清)
validCode String N 初始化时获取 设备验证码(加密设备播放需要输入验证码)
validCode String N 初始化时获取 设备验证码(加密设备播放需要输入验证码)
begin String N 初始化时获取 type类型为回放有效,开始时间 格式为“YYYYMMDDHHmmss”
end String N 初始化时获取 type类型为回放有效,结束时间 格式为 “YYYYMMDDHHmmss”

切换模板主题

可用于在播放中切换模板主题,请切换播放地址成功后调用

  player.Theme.changeTheme(template)

  // 预览切回放场景示例
  player.changePlayUrl({type:"rec"});
  .then(()=>{
    console.log("地址切换成功,开始切换模板主题");
    player.Theme.changeTheme("pcRec");
  });
  

template参数说明

参数名 类型 描述 是否必选
type String 模板名称,详见初始化参数template Y

开启电子放大

建议使用模板,模板中的电子放大功能更全

  // 方式1
  player.enableZoom();
  // 方式2
  player.enableZoom()
  .then(()=>{
    console.log("开启电子放大成功");
  });

关闭电子放大

  // 方式1
  player.closeZoom();
  // 方式2
  player.closeZoom()
  .then(()=>{
    console.log("关闭电子放大成功");
  });

重置画面宽高

  player.reSize(width, height);

鱼眼矫正(软解 开启 SharedArrayBuffer

// {1, 0}  壁装鱼眼 不矫正
// {1, 1}  壁装360°全景
// {1, 2}  壁装4分屏
// {1, 4}  壁装广角
// {3, 0}  顶装鱼眼 不矫正
// {3, 1}  顶装360°全景
// {3, 4}  顶装4分屏
// {3, 5}  顶装柱状
// 顶装4分屏
player.setFECCorrectType({place: 3 , type:4}, "cavnas1,canvas2,canvas3") // cavnas1,canvas2,canvas3 是分屏是需要的

使用示例

如果使用原生js,可参考demos => base-demo

如果使用react,可参考demos => react-demo

如果使用react + vite,可参考demos => with-react-vite

如果使用vue2,可参考demos => vue-demo

如果使用vue3,可参考demos => vue3-demo

ezuikit-javascript-npm's People

Contributors

ataola avatar ezviz-jzy avatar ezviz-open avatar freeshineit avatar grath10 avatar nicky132 avatar qianwz avatar raconxxy avatar xuehuibin avatar yujianbohz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ezuikit-javascript-npm's Issues

footer:删除broadcast(语音播报)保留talk(对讲)时,打开对讲后不能正常关闭对讲

对讲功能是关闭了,但是按钮仍停留在“关闭对讲”的状态之中,并且不能再次开启对讲。
document.getElementById("time-area").innerHTML = formatSeconds(i); // Uncaught TypeError: Cannot set property 'innerHTML' of null
看起来是对讲功能的时间依赖于语音播报的时间,不显示语音播报时,时间也没有生成,导致影响了对讲的功能。

多实例时有可能会出现加载静态资源出错的情况

可在失败的时候重试几次

function addJs(filepath, callback, errorCount) {
  errorCount = errorCount || 1
  var headerScript = document.getElementsByTagName('head')[0].getElementsByTagName('script')
  var isReady = false

  for (var i = 0; i < headerScript.length; i++) {
    if (headerScript[i].getAttribute('src') == filepath) {
      isReady = true
      callback()
    }
  }

  if (!isReady) {
    var oJs = document.createElement('script')
    oJs.setAttribute('src', filepath)
    oJs.onload = callback
    oJs.onerror = function () {
      if (errorCount > 3) {
        console.error('Error loading script:', filepath)
        return
      }
      setTimeout(function () {
        addJs(filepath, callback, errorCount + 1)
      }, 1000)
    }
    document.getElementsByTagName('head')[0].appendChild(oJs)
  }
}

希望回放功能不要与其它功能相斥

回放功能只在“安防版”里才存在,但是安防版里没有诸如对讲、语音播报等功能。
希望将回放按钮添加到footer配置里面以供选择、组合,达到更灵活的应用效果

需要一个播放器的销毁方法

使用方法:

         this.player = new EZUIKit.EZUIKitPlayer({
          id: id, // 视频容器ID
          accessToken: this.token,
          // url: `ezopen://${this.code}@open.ys7.com/${this.deviceSerial}/${this.channelNo}${
          //   this.hd ? '.hd' : ''
          // }.live`,
          url: 'ezopen://open.ys7.com/G39444019/1.live',
          width: node.clientWidth,
          height: node.clientWidth * 0.5,
          handleError: (data) => console.log('error', data),
          openSoundCallBack: (data) => console.log('开启声音回调', data),
          closeSoundCallBack: (data) => console.log('关闭声音回调', data),
          startSaveCallBack: (data) => console.log('开始录像回调', data),
          stopSaveCallBack: (data) => console.log('录像回调', data),
          capturePictureCallBack: (data) => console.log('截图成功回调', data),
          fullScreenCallBack: (data) => console.log('全屏回调', data),
          getOSDTimeCallBack: (data) => console.log('获取OSDTime回调', data),
        });

原因:在一个页面上会多次的同一个id的容器的创建(如将容器放在dialog中),但是第一次创建以后重新打开会因为已经创建过一次而在addJs这一步的判断出现已经创建的判断,不会调用addJs的callback,导致播放容器无法创建。player自带的destory()无法解决这个问题。
目前我的解决办法是直接删除全局挂载的容器和JSPlugin,还有加载的<script>

       // 销毁全局挂载的容器
        delete window['EZUIKit']['video-container'];
        // 销毁全局挂载的js播放插件
        delete window['JSPlugin'];

视频截图触发不了回调,而且不能设置不下载图片。

这个0.4.0版本是还没写好就推上来的吗,
image
capturePicture(name, callback = false) { var capturePictureRT = this.jSPlugin.JS_CapturePicture(0, name, "JPEG", callback); if (isPromise(capturePictureRT)) { return capturePictureRT; } return new Promise(function (resolve) { resolve(capturePictureRT); }); }
EZUIKitPlayer.prototype.capturePicture = function (fileName,isUndownload) { var id = 'EZUIKitPlayer-' + this.opt.id; var player = document.getElementById(id).contentWindow; player.postMessage({ action: "capturePicture", fileName: fileName || 'default', isUndownload: isUndownload, }, domain + "/ezopen/h5/iframe"); var _this = this; var promise = new Promise(function(resolve,reject) { window.addEventListener("message", function (event) { var playId = _this.opt.id; if (playId == event.data.id && event.data.type === 'capturePicture') { resolve(event.data); } }); }); return promise; };
以前用的是原型中的方法入参形式,现在改成JS_CapturePicture这种了,这个截屏不会触发capturePictureCallBack,而且没法设置不下载

多个dom节点绑定不同视频源只有一个或两个播放且会切换其他没有播放的视频

image
image
image
image
image
截图_20210701181124

本示例窗口1和窗口2有显示,但是窗口2有两个视频源切换且会有粉色马赛克,一段时间大概四十秒左右后显示的窗口也会黑屏,此时点击窗口2的刷新会反应在窗口1,窗口1将切换三个视频源的画面,示例代码的id,accessToken, url均以脱敏,如需复制示例代码请修改后运行。
示例代码如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>EzuiTest</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <script src="assets/ezviz/ezuikit.js"></script>
<body>
    <app-root></app-root>
    <div className="demo">
        <h2>多个视频窗口模式使用示例:</h2>
        <div style="display: inline-block;vertical-align: top;width: 40%;">
          <h3>窗口1:</h3>
          <div id="video-container" style="width:400px;">
            <div id="711c" style="width: 100%; height: 400px;">                 
            </div>
          </div>
          <div>
            <button onClick="play()">play</button>
          </div>
        </div>
        <div style="display: inline-block;vertical-align: top;width: 40%;">
          <h3>窗口2:</h3>
          <div id="video-container2" style="width:400px;">
            <div id="388a" style="width: 100%; height: 400px;">                 
            </div>
          </div>
          <div>
            <button onClick="play2()">play</button>
          </div>
        </div>
        <div style="display: inline-block;vertical-align: top;width: 40%;">
            <h3>窗口3:</h3>
            <div id="video-container2" style="width:400px;">
              <div id="14be" style="width: 100%; height: 400px;">                 
              </div>
            </div>
            <div>
              <button onClick="play3()">play</button>
            </div>
          </div>
      </div>
      
    <script>
        
      function play() {
        var playr = new EZUIKit.EZUIPlayer({
        id: '711c', // 视频容器ID
        accessToken: 'xx.16xf4zx0598fciw0delqzohqxxz6u8ei-1vxaom5kzu-1lz6z9x-uboj6tj3a',
        url: 'ezopen://open.ys7.com/***/1.hd.live',
        // autoplay: true,
        decoderPath: '/assets/ezviz',
        width: 400,
        height: 300,
      });
        var playPromise = playr.play();
      }
      var playr2 = new EZUIKit.EZUIPlayer({
        id: '388a', // 视频容器ID
        accessToken: 'xx.16xf4zx0598fciw0delqzohqxxz6u8ei-1vxaom5kzu-1lz6z9x-uboj6tj3aa',
        url: 'ezopen://open.ys7.com/***/1.hd.live',
      //   template: 'simple', // simple - 极简版;standard-标准版;security - 安防版(预览回放);voice-语音版;
        // autoplay: true,
        decoderPath: '/assets/ezviz',
        width: 400,
        height: 300,
      });
      function play2() {
        var playPromise = playr2.play();
      }
      var playr3 = new EZUIKit.EZUIPlayer({
        id: '14be', // 视频容器ID
        accessToken: 'xx.18xf4zx0598fciw0delqzohqxxz6u8jjhei-1vxaom98kzu-1lz6z9x-uboj6tj88',
        url: 'ezopen://open.ys7.com/***/1.hd.live',
        // autoplay: true,
        decoderPath: '/assets/ezviz',
        width: 400,
        height: 300,
      });
      function play3() {
        var playPromise = playr2.play();
      }
    </script>
  
  
</head>
</body>
</html>

播放总是报错Cannot read property 'apply' of undefined,security安防版回放时间选择菜单错位

github的还是在issue里面提吧,不想走开发者的工单
1、vue里面使用ezuikit-js,安防版、ezopen协议,获取设备播放地址后iframe引入的Docoder.js总报如下错误

Cannot read property 'apply' of undefined at Object._malloc (Decoder.js:1)

使用实例:

import EZUIKit from 'ezuikit-js'
this.ezuikitInstance = new EZUIKit.EZUIKitPlayer({
        id: 'video-container', // 视频容器ID
        accessToken: 'at.3jrdug6t08yqq8c049eb8uebbvsx3pdl-2vd3nqwxr8-15amm0b-xzzowgwwy',
        url: 'ezopen://open.ys7.com/D39384530/1.hd.live',
        template: 'security', // simple:极简版;standard:标准版;security:安防版(预览回放);vioce:语音版
        // header: '', // capturePicture:截图,save:录像保存,zoom:电子放大
        // footer: ['hd', 'fullScreen'], // talk:对讲,broadcast:语音播报,hd:高清标清切换,fullScreen:全屏
        handleSuccess: () => {
            this.isPlaying = true
        }
})

2、security安防版回放功能,日期时间下拉选择菜单错位

浏览器总是卡死

player.play({
url: xxx
})
这个不太好用,我不能从一个客户端直接切换多客户端

切换播放地址失败,stop方法无法then

开发中尝试了两种场景
第一,实例化成功之后,去实现stop方法停止取流,then无法调用,提示该属性不存在;
第二,stop停止取流和play切换地址分开执行,stop停止取流成功,执行切换播放地址时,视频播放了,可依旧是上一次的播放地址,地址切换失败。
麻烦麻烦尽快会回复,不确定这边是否还在维护这个,因为看了看了一下以往的issues,2021年好像基本没有回复了。
另外还有一些问题,场景是这样的:
多个实例化后,除了第一个实例,其他实例在切换屏幕画质时高度都失效了,都是0,这个问题在以往的issues中也有人提到过。

关于萤石监控web接入的一些疑惑,希望能够解答~

尊敬的萤石开发者您好,我在使用萤石监控的相关功能的时候有一些疑惑希望您能帮忙解答一些。

背景:web网页接入监控(pc端,使用的ezopen协议,监控用的萤石摄像头)

1.关于回放:官网 开发者服务 -> 轻应用视频 -> web版本,测试安防版demo发现选择时间确认后没有任何反应,并且github vue-demo测试结果也一样,请问我该如何处理;

2.vue-demo在安防模式中,url参数监控url或者回放url两者都可以吗?目前测试两者都可以,会有什么问题吗?

还有一个小小的建议,能不能在官网的api文档中补充暴露出来的一些方法,这样可以更直观一些。

希望大佬有时间可以解答一下,不胜感激!

web端获取录像文件问题

你好,我使用的是EZUIKit-JavaScript/ui_voice.html 轻应用语音版demo 我想在录像结束后将录像文件发送给后端,请问我怎样获得这个录像文件 谢谢

监控选择反馈

请问下一个新版单个实例选择里面视频不会有黄色 border 出现了吗?

security版本中拖动时间轴报错Cannot read property 'replace' of null

在pc端网页上,使用security版本中拖动时间轴,无法切换到拖动的时间,而且会从本次视频开头重新播放,然后报错:

Uncaught (in promise) TypeError: Cannot read property 'replace' of null 
    at VM4250980 jsPlugin-1.2.0.min.js:26
    at s.e (VM4250980 jsPlugin-1.2.0.min.js:26)
    at VM4250980 jsPlugin-1.2.0.min.js:26
    at new Promise (<anonymous>)
    at r.e (VM4250980 jsPlugin-1.2.0.min.js:26)
    at EZUIPlayer.getOSDTime (VM4250965 ezuikit.js:1951)
    at iframe_se:938

我是如何使用的:

new EZUIKit.EZUIKitPlayer({
          id: "video-container",
          accessToken: accessToken,
          url: url,
          template: "security", 
          autoplay: true,
        });

初始化templete: 'standard',控件未显示

player = new EZUIKit.EZUIKitPlayer({
id: 'videoTest', // 视频容器ID
accessToken: '',
url: '
**********',
templete: 'standard',
})
AC104C1B-9B2C-4536-BC49-001E93912364
初始化templete standard 没有看到文档中说的控件

配置了截图的回调函数,触发截图后,回调函数没执行

"ezuikit-js"版本: "^0.5.2",
vue版本:"^2.6.10",

代码如下

this.ysPlayer = new EZUIKit.EZUIKitPlayer({ autoplay: true, id: 'video-container', // 视频容器ID accessToken: accessToken, url: url, template: 'standard', header: ['capturePicture'], footer: ['hd'], width: 600, height: 400, capturePictureCallBack: this.capturePicture })

      `capturePicture(data) {
    console.info('截图', data)
  }`

所有的addEventListener均没有做removeEventListener,典型的只会拉屎不会擦屁股

window.addEventListener("message", function (event) {
console.log("EZUIKitPlayer收到反馈", event);
var origin = event.origin;

每创建一次播放器就绑定一次这个事件,销毁播放器时,至少需要解除这个绑定。

现在没有解除绑定,可以明显观察到现象:创建了10次播放器,不管你关掉了几个,这个log至少会同时打印出10次。

还有另外8处addEventListener,均需处理,或者更换message的处理架构(全局绑定一次即可,轻巧,不写bug),相信你们是专业的前端。

不支持.m3u8

不支持.m3u8路径的地址播放,和直接引入外部js体验不一致。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.