微信小程序
1.开发指南
1.1 准备工作
live-player
,根据微信实时音视频接入文档,您的小程序需要通过类目审核。您可登录微信公众平台 ,在左侧单击 「设置」,查看您的服务类目是否为live-player
组件支持的小程序服务类目。您可点击右侧 「详情」 进行服务类目添加。咨询客服
进行咨询您可登录微信公众平台,在左侧导航栏单击 「开发」,然后单击 「接口设置」 ,自助开通该组件权限。
4、在微信小程序中请求云眸API时,需预先设置通讯域名,小程序只可以和指定的域名进 行网络通讯。您可以登录微信公众平台,在左侧导航栏单击 「开发」,然后单击 「开发设置」,在 「服务器域名」 区域,单击 「修改」,进行配置。
2.小程序开发
2.1视频播放开发示例
live-player
组件进行视频播放,在 .wxml
文件中引入该组件,我们为live-player
组件指定id值,用于创建 LivePlayerContext
对象,以操作live-player
组件。bindstatechange
:监听播放状态变化,通过e.detail.code获取当前播放状态值,部分状态码如下所示。mode
属性默认为live(直播模式),小程序live-player组件为实时通话模式(mode=”RTC”),该模式时延更低。src
:您的设备播放地址,目前仅支持tmp格式。autoplay
:true表示自动播放,false表示手动播放。cover-view
组件 可覆盖在live-player
组件之上,用于展示“播放按钮”、”全屏按钮”等播放器辅助功能。通过hidden="{true}"
进行隐藏,hidden="{false}"
进行展示。 <live-player id="previewPlayer" binderror="error" bindstatechange="statechange" mode="RTC" src="" autoplay="true" >
</live-player>
<!-- 播放停止状态 -->
<cover-view class="video-loaing video-ready" hidden="true">
<cover-image class="loading-gif" src="../live/images/live/landscape_play.png" catchtap="handlePlay">
</cover-image>
</cover-view>
let livePlayerContext;
Page({
data: {
videoSrc: '', // 视频播放地址
videoLoadingStatus: 0, // 播放按钮展示状态
},
onLoad: function () {
livePlayerContext = wx.createLivePlayerContext('previewPlayer');
// 调用接口获取videoSrc视频播放地址
},
// 播放状态监听
statechange(e) {
const { code } = e.detail;
switch (code){
case 2007: //启动loading
break;
case 2001: //连接服务器
break;
case 2002: //已经连接 RTMP 服务器,开始拉流
break;
case 2008: // 解码器启动
console.log("case 2008: //解码器启动");
break;
case 2009: //视频分辨率改动
console.log("case 2009: //视频分辨率改动");
this.handlePlay(); // 视频分辨率改动可能导致播放暂停,可调用handlePlay()重启播放
break;
case 2004:
console.log("case 2004: // 视频播放开始");
break;
case 2003:
console.log("case 2003: //网络接收到首个视频数据包(IDR)");
break;
case 2103: //网络断连, 已启动自动重连(本小程序不自动重连)
break;
case 3001:
case 3002:
case 3003:
case 3005: // RTMP 读/写失败,之后会发起网络重试
console.log("播放失败");
break;
case 2105: // 当前视频播放出现卡顿
break;
case -2301: // 经多次重连抢救无效,更多重试请自行重启播放
break;
}
},
// 播放按钮
handlePlay(e){
livePlayerContext.play({
success: ()=>{
// Do some thing
},
fail: (error)=>{
// Do some thing
}
})
},
})
3.接口说明
3.1 获取直播/回放RTMP地址
startTime
,endTime
,获取回放时间片段。 https://api2.hik-cloud.com/v1/carrier/wing/endpoint/video/getVideoUrl
参数名 | 类型 | 示例 | 描述 | 是否必选 |
---|---|---|---|---|
deviceSerial | String | 203751922 | 设备序列号 | Y |
channelNo | Integer | 1 | 通道号 | Y |
code | String | 1 | ezopen协议地址的设备的视频加密密码 | N |
protocol | String | 3 | 流播放协议,1-ezopen、2-hls、3-rtmp、4-flv,默认为1 | N |
quality | String | 1 | 视频清晰度,1-高清,2-标清 | N |
startTime | String | 2019-12-01 00:00:00 | 本地录像回放开始时间 | N |
stopTime | String | 2019-12-01 00:00:00 | 本地录像回放结束时间 | N |
expireTime | String | 86400 | 过期时间 | N |
type | String | 1 | ezopen协议地址的类型,1-预览,2-本地录像回放,3-云存储录像回放,非必选,默认为1 | N |
supportH265 | Integer | 1 | 是否要求播放视频为H265编码格式 | N |
gbchannel | String | 1 | 国标设备的通道编号 | N |
GET /v1/carrier/wing/endpoint/video/getVideoUrl HTTP/1.1
Host: api2.hik-cloud.com
channelNo=1&deviceSerial=203751922&protocol=3&quality=1&expireTime=86400
{
"msg": "Operation succeeded",
"code": "200",
"data": {
"id": "247116619786670080",
"url": "rtmp://rtmp01open.ys7.com:1935/v3/openlive/203751922_1_2?expire=1605275593&id=247116619786670080&t=60ac6e4fd97e71e3e2fcceb792b042d8023cb73b6bd39c6ca769605a7d65dd2e&ev=100", //播放地址
"expireTime": "2020-11-13 21:53:13" //过期时间
}
}
返回码 | 返回消息 | 描述 |
---|---|---|
200 | 操作成功 | 请求成功 |
10001 | 参数错误 | 校对参数 |
20001 | 摄像头不存在 | 摄像头不存在 |
20002 | 设备不存在 | 设备不存在 |
20007 | 设备离线 | 设备离线 |
20018 | 该用户不拥有该设备 | 该用户不拥有该设备 |
49999 | 数据异常 | 接口调用异常 |
50000 | 系统错误 | 系统错误 |
60019 | 设备已加密 | 设备已加密 |
3.2 获取设备回放时间片段接口地址说明
https://api2.hik-cloud.com/v1/carrier/wing/endpoint/video/getFileInfoByTime
参数名 | 类型 | 示例 | 描述 | 是否必选 |
---|---|---|---|---|
deviceSerial | String | 203751922 | 设备序列号 | Y |
channelNo | String | 1 | 通道号 | Y |
startTime | long | 1378345128000 | 起始时间,时间格式为:1378345128000。非必选,默认为当天0点 | N |
endTime | long | 1378345128000 | 结束时间,时间格式为:1378345128000。非必选,默认为当前时间 | N |
recType | int | 2 | 回放源,0-系统自动选择,1-云存储,2-本地录像。非必选,默认为0 | N |
GET /v1/carrier/wing/endpoint/video/getFileInfoByTime HTTP/1.1
Host: api2.hik-cloud.com
deviceSerial=427734203&channelNo=1&startTime=1378345128000&endTime=1378345128000&recType=0
{
"code": "200",
"msg": "操作成功",
"data": [
{
"recType": 0, //回放源,0-系统自动选择,1-云存储,2-本地录像
"startTime": 1378345128000, // 文件开始时间
"endTime": 1378345128000, // 文件结束时间
"deviceSerial": "409864662", //设备序列号
"cameraNo": "1", // 设备通道号
"localType": "ALLEVENT", // 文件类型 0:ALARM 1:TIMING 2:IO */
"channelType": "D", // 该字段已废弃
"id": 20432171600, // 云存储信息主键ID
"fileId": "20432171600", // 文件ID
"ownerId": "chenyong", // 文件所属用户ID
"fileType": 1, // 文件类型0:目录1:视频文件2:图片文件3:音频文件
"fileName": "", // 文件名称
"cloudType": 1, // 该字段已废弃
"fileIndex": "5d5b6d94-13e8-440b-a25b-00eda521c35f", // 文件在云存储上的唯一索引
"fileSize": 4011828, // 文件大小,单位B
"locked": 0, // 是否被锁定。1-锁定;0-未锁定
"createTime": "2016-08-22 13:59:13", // 创建时间
"crypt": 22, // 是否加密0--不加1--加密
"keyChecksum": "", // 验证码MD5值
"videoLong": 150000, // 录像长度
"coverPic": "https://218.244.139.5:0/api/cloud?method=download&fid=a14f8348-1dd1-11b2-aef9-dbed68cc4c3e&session=hik%24shipin7%231%23USK%23at.a2rwv07y6v44ozhqblhb0tly337hb4vq-4jktv8rbjh-193fe5b-cm38stbht", // 封面图片地址
"downloadPath": "218.244.139.5:0", //废弃
"type": 1 //废弃
},
{
"recType": 0,
"startTime": 1378345128000,
"endTime": 1378345128000,
"deviceSerial": "409864662",
"cameraNo": "1",
"localType": "ALLEVENT",
"channelType": "D",
"id": 20432171600,
"fileId": "20432171600",
"ownerId": "chenyong",
"fileType": 1,
"fileName": "",
"cloudType": 1,
"fileIndex": "5d5b6d94-13e8-440b-a25b-00eda521c35f",
"fileSize": 4011828,
"locked": 0,
"createTime": "2016-08-22 13:59:13",
"crypt": 22,
"keyChecksum": "",
"videoLong": 150000,
"coverPic": "https://218.244.139.5:0/api/cloud?method=download&fid=a14f8348-1dd1-11b2-aef9-dbed68cc4c3e&session=hik%24shipin7%231%23USK%23at.a2rwv07y6v44ozhqblhb0tly337hb4vq-4jktv8rbjh-193fe5b-cm38stbht",
"downloadPath": "218.244.139.5:0",
"type": 1
}
}
}
修改于 2022-05-20 08:10:43