使用文档

Web Player SDK 使用说明

1. 功能特性说明

1.1 简述

本文档主要对Web Player SDK 使用说明,具体的使用可以参照demo

1.1.1 环境配置

下载SDK并解压缩

sdk_js

cloudsee_js_demo Demo应用
cloudsee_js_sdk SDK

1.2 支持的格式

1.2.1 音频编码格式

支持G711音频解码

1.2.2 视频编码格式

支持H.264(AVC)
支持H.265(HEVC)

1.3 浏览器兼容性

支持Chrome(85及以上)
支持火狐浏览器(82.0.3及以上)

1.4 支持的设备

中维协议3.0(原公有云协议)设备(中维世纪私协设备)
国标28181协议设备

1.5 音频控制

音频控制:支持

1.6 视频下载

支持

2 api接口及参数说明

2.1 直播

2.1.1 引入sdk

// 将cloudsee_js_sdk文件夹下的文件全部引入到项目中,在个人页面中引入如下js文件
<script src="player.js"></script>

注意:SDK文件必须放到WEB服务器的root根目录下,即与index.html放在同级目录,或者在调用play方法时传入路径prefixPath参数

2.1.2 初始化

let Player = jPlayer.default;  //获取
this.player = new Player(el,option);  //实例化
// el 为视频容器dom元素 必填
// option 配置项可以配置自定义的loading状态以及断开的状态提示 非必填 请参照demo使用
// 由此衍生的一个提示方法  this.player.showMsg(type, msg) 其中type是一个枚举值,会自带一个“linkfail”;msg:为提示字符串;
// 其他的定义可以根据loading组件的配置而来 请参照demo

2.1.3 播放

this.player.play(
    {
        url:"ws://*******************",           //播放地址
        endtime: null,                            //回放结束时间,直播为null
        isStream: true// true:直播 false:回放
        deviceName: '设备名称',                     // 非必填 用在错误提示显示上
        prefixPath:'/',                      //非必填 sdk等文件相对根目录的位置 默认"/"
    }                            
)

2.1.4 停止

this.player.stop()   // 直播的暂停即停止,停止播放和推流

2.1.5 全屏

this.player.fullscreen();   // 视频画面的全屏

2.1.6 截图

this.player.snapshot();
// 内部有默认实现的snapshot方法 返回的结果是以图片的下载方式保存
// 针对想要获取快照的数据流的  需要自定义重写该方法 方法会暴露一个blob参数
this.player.onSnapshot = onSnapshot (blob) {
    let imgFormat = {
        bmp: 'image/bmp',
        jpeg: 'image/jpeg',
        png: 'image/png'
    }
    const blob2 = new Blob([blob], { type: imgFormat['png'] });
    const a = document.createElement('a');
    document.body.appendChild(a);
    a.style.display = 'none';
    const url = window.URL.createObjectURL(blob2);
    a.href = url;
    a.download = `${this.channelName} ${dayjs(new Date()).format('YYYY年MM月DD日HH时mm分ss秒')}.png`;
    a.click();
    window.URL.revokeObjectURL(url)
      a.remove();
},

2.1.7 获取播放器当前状态

this.player.getState()    //  0:空闲  1:播放 2:暂停

2.1.8 开始对讲

this.player.talk(对讲的url) //开始对讲

2.1.9 停止对讲

this.player.talkDestroy() //停止对讲

2.1.10 设置音量

this.player.volume(vol);// vol number 0 ~ 1数字

2.2 回放

2.2.1 引入sdk

<script src="player.js"></script>
 // 在js文件中引入录播进度条 JtimeLine 
 // 提示 JtimeLine.js 不是websdk内部文件,可在demo/src/js文件夹下找到;
 // 时间进度条可自己实现,无需引入JtimeLine.js
import JTimeLine from "./js/JtimeLine";

2.2.2 初始化

2.2.2.1 播放器初始化

let Player = jPlayer.default;  //获取
this.player = new Player();  //实例化 参照直播
2.2.2.2 回放进度条初始化
 //提示 JtimeLine.js 不是websdk内部文件,可在demo/src/js文件夹下找到;
 //     时间进度条可自己实现,无需引入JtimeLine.js
this.jTimeLine = new JTimeLine();
this.jTimeLine.init({
    id: "canvas", 
    onChange: this.handleTimeChange  //滑动播放进度条时触发并返回滑动当前位置的时间戳
});

2.2.3 播放

录播的视频播放需要播放URL

this.player.play(
    {
        url:"ws://*******************",           //播放地址
        endtime: new Date('2020-11-30 12:00:00'), //回放结束时间,回放到该时间时会有事件触发,直播为null
        isStream: false// true:直播 false:回放
        deviceName: '设备名称'// 非必填 用在错误提示显示上
        prefixPath:'/',                      //非必填 sdk等文件相对根目录的位置 默认"/"
    }  
);

//录播时间进度条处理
//录播时间进度条处理需要播放列表(lsit)
 this.jTimeLine.getRecord(lsit);  // 回放返回的播放list
 this.jTimeLine.run({ time: parseInt(this.player.getCurTimestamp())}); //进度条滚动  this.player.getCurTimestamp() 获取播放当前帧的时间戳

2.2.4 暂停

this.player.pause()  // 回放暂停

2.2.5 恢复

this.player.resume() //回放恢复

2.2.6 seek播放

this.player.seekTo(Time)  // Time 时间戳

2.2.7 全屏

this.player.fullscreen();

2.2.8 停止

this.player.stop()

2.2.9 倍速

this.player.setSpeed(string); //支持 字符串:‘1’ ‘2’ ‘4’ ‘8’

2.2.10 截图

this.player.snapshot();

2.2.11 获取播放器当前状态

this.player.getState()    //  0:空闲  1:播放 2:暂停

2.2.12 获取播放器播放当前帧的时间戳

this.player.getCurTimestamp() //获取播放当前帧的时间戳

2.2.13 停止录像

this.player.recoderPause() //停止录像  停止录像时,会将录像自动下载下来

2.2.14 开始录像

this.player.recoderStart() //开始录像

3 事件

3.1 获取设备回放列表


/**
 * 事件名 :GET_DEVICE_RECORD_LIST
 * 描述:仅当播放设备为中维协议3.0(原公有云协议)设备 录像为设备录像时 录像ws://** 长链接返回视频列表
 * 例:
 * */ 
this.player.event.on('DEVICE_RECORD_LIST',list)=>{
    //todo...
})

3.2 媒体进度信息


/**
 * 事件名 :GET_MEDIA_PROGRESS_INFO
 * 描述   : 媒体进度信息 可用来做播放时间进度的事件
 * 例:
 * */ 
this.player.event.on('GET_MEDIA_PROGRESS_INFO',msg)=>{
    //todo...
})

3.3 媒体信息


/**
 * 事件名 GET_MEDIA_INFO
 * 描述:媒体信息 包含视频帧信息和音频帧信息
 * 例:
 * */ 
this.player.event.on('GET_MEDIA_INFO',msg)=>{
    //todo...
})

3.4 视频播放


/**
 * 事件名 GET_MEDIA_PLAY
 * 描述   : 视频播放
 * 例:
 * */ 
this.player.event.on('GET_MEDIA_PLAY',()=>{
    //todo...
})

3.5 视频暂停


/**
 * 事件名 GET_MEDIA_PAUSE
 * 描述:视频暂停
 * 例:
 * */ 
this.player.event.on('GET_MEDIA_PAUSE',()=>{
    //todo...
})

3.6 视频停止


/**
 * 事件名 GET_MEDIA_STOP
 * 描述:视频停止
 * 例:
 * */ 
this.player.event.on('GET_MEDIA_STOP',()=>{
    //todo...
})

3.7 当前倍速


/**
 * 事件名 speedNum
 * 描述:倍速设置触发
 * 例:
 * */ 
this.player.event.on('speedNum',msg=>{
    //todo...
})

3.8 直播和回放设备链接异常监听


/**
 * 事件名 decoderError
 * 描述   : 链接异常 包括解码器解码异常和websocket链接异常断开
 * 解码器异常显示 链接异常(code16) code16:
 *   
 * { code16:0x04,  msg:"服务器未知错误"},
  { code16:0x05, msg:"服务器未准备好"},
  {code16:0x06,  msg:"服务器端用户主动断开"},
  { code16:0x07, msg:"服务器服务已停止"},
  { code16:0x08,  msg:"服务器服务已中断"},
  { code16:0x09,  msg:"服务器流停止"},
  { code16:0x0A,  msg:"连接设备失败"},
  { code16:0x0B,  msg:"订阅设备流失败"},
  { code16:0x0C,  msg:"不合法的上下文"},
  { code16:0x0D,  msg:"设备超时"},
  { code16:0x0E,  msg:"客户端超时"},
  { code16:0x0F, msg:"超过设备最大连接数"},
  { code16:0x10,  msg:"无权限"},
  { code16:0x11,  msg:"数据超时"},
  { code16:0x12, msg:"服务器端设备主动断开"},
    websocket链接异常断开 链接异常(code) code:
    参照MDN https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent
 * 例:
 * */ 
this.player.event.on('decoderError',d)=>{
    //todo...
    // 取d.s的值和上面的code16的值做判断 code16为16进制请换算为10进制比较  
})

3.9 对讲的连接异常监听

/**
 * 事件名 CLIENT_TALK_ERROR_ONE
 * 描述:链接异常 包括解码器解码异常和websocket链接异常断开
 * 解码器异常显示 链接异常(code16) code16:
 *   
 * { code16:0x04,  msg:"服务器未知错误"},
  { code16:0x05, msg:"服务器未准备好"},
  {code16:0x06,  msg:"服务器端用户主动断开"},
  { code16:0x07, msg:"服务器服务已停止"},
  { code16:0x08,  msg:"服务器服务已中断"},
  { code16:0x09,  msg:"服务器流停止"},
  { code16:0x0A,  msg:"连接设备失败"},
  { code16:0x0B,  msg:"订阅设备流失败"},
  { code16:0x0C,  msg:"不合法的上下文"},
  { code16:0x0D,  msg:"设备超时"},
  { code16:0x0E,  msg:"客户端超时"},
  { code16:0x0F, msg:"超过设备最大连接数"},
  { code16:0x10,  msg:"无权限"},
  { code16:0x11,  msg:"数据超时"},
  { code16:0x12, msg:"服务器端设备主动断开"},
    websocket链接异常断开 链接异常(code) code:
    参照MDN https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent
 * 例:
 * */ 
this.player.event.on('CLIENT_TALK_ERROR_ONE',(d) => {
    //todo...
    // 取d.s的值和上面的code16的值做判断 code16为16进制请换算为10进制比较  
})

3.10 网络连接异常监听

/**
 * 事件名 CLIENT_LINK_ERROR_ONE
 * 描述:和服务的ws/wss连接失败
 * 例:
 * */ 
this.player.event.on('CLIENT_LINK_ERROR_ONE',()=>{
    //todo...
})

3.11 连接成功但心跳没有响应监听


/**
 * 事件名 CLIENT_LINK_ERROR_THREE
 * 描述:视频加载失败,请检查设备或网络配置 为websocket发送3次心跳 无响应
 * 例:
 * */ 
this.player.event.on('CLIENT_LINK_ERROR_THREE',()=>{
    //todo...
})

3.12 视频下载超过100M自动保存文件事件


/**
 * 事件名 GET_VIDEO_MAX_END
 * 描述:视频下载超过100M自动保存文件事件
 * 例:
 * */ 
this.player.event.on('GET_VIDEO_MAX_END')=>{
    //todo...
})

3.13 回放时播放结束的事件

// 注意:此事件在回放时传入了endtime才生效
this.player.event.on('MEDIA_PROGRESS_INFO_STOP', (s) => {
    // 回放播放结束 s
})

3.14 开启对讲时获取麦克风权限失败的事件监听

this.player.event.on('getUserMediaError', () => {
    // todo...
})

4 录像回放下载

4.1初始化

// 基于上面sdk的引入 获取下载的实例对象
let DownloadHandle = jPlayer.DownloadHandle;//获取
let downloadhandle = new DownloadHandle();

4.2开始下载

//url 必填 下载的url
//endTime 必填 要下载的录像结束时间 时间格式为new Date(endTime)对象可接受的格式
//recordType 必填 下载录像的类型 可选值:'device'表示设备端录像,'cloud'表示云端录像
//prefixPath 非必填 sdk等文件相对根目录的位置 默认"/"
await downloadhandle.startDownload({
  url:'下载的url', endTime:"2023-05-13 00:00:00",recordType:'device', i:'', k:'', t:'', prefixPath:'/websdk/'
})

4.3停止下载

// 触发停止下载会结束此次下载
// isForceDiscard 可选值:0 表示停止下载,保存已下载的视频、1 表示停止下载,丢弃已下载的视频 默认值0
downloadhandle.stopDownload(isForceDiscard).then(()=>{
  console.log("停止下载成功");
});

4.4监听下载的数据

// 每次下载都会返回所下载的数据 data.d就是下载下来的arraybuffer的数组
// 说明:下载的单个数据有大小限制,正常大概100M左右就会保存一下文件 然后继续下载直到下载结束
downloadhandle.on('downloadData',(data)=>{
      console.log('下载的数据',data.d)
    if( Array.isArray(data.d)&data.d.length>0){
        let buffers = data.d.map((item) => item.buffer);
        const fullBlob = new Blob(buffers, { type: "video/mp4" });
        const link = document.createElement("a");
        const downloadUrl = window.URL.createObjectURL(fullBlob);
        link.href = downloadUrl;
        link.download = "录像" + new Date().getTime() + ".mp4";
        link.click();
        window.URL.revokeObjectURL(downloadUrl);
    }
})

4.5监听下载回放视频时间进度

对recordType为device 设备端录像时有效

downloadhandle.on('DOWNLOAD_PROGRESS_INFO',(data)=>{
    console.log('时间',data)
})

4.6监听下载结束

// 本次下载结束
downloadhandle.on('stopDownload',()=>{
    console.log("下载结束")
})

4.7监听下载异常

downloadhandle.on('serverDecoderError',()=>{
    this.$message.error("下载异常")
})

4.8监听ws服务异常

downloadhandle.on('socketNoActive',()=>{
    this.$message.error("socket长时间没有响应")
})

results matching ""

    No results matching ""