萤石开放平台-摄像头画面如何在小程序上播放?

背景介绍

在应用轻量化的趋势中,越来越多的开发者选择以微信小程序作为载体进行应用服务的开发。在开发过程中,开发者经常会面临以下问题:不知道哪种开发方案更加符合自己的诉求?在开发过程中需要准备哪些额外资料?各方案之间最终呈现的效果会有什么差异?

下方提供小程序原生开发、小程序内嵌H5、跳转/半屏小程序三种方案,优劣势如下表格,可以根据现实情况选择对应的方案。

 

方案介绍

方案一:小程序原生开发

方案介绍:基于微信官方推出的组件以及萤石开放平台的设备播放控制能力,开发者可进行高自由度的二次开发。

应用环境:微信媒体组件,组件使用权限需要硬件3C资质证明,摄像头设备无强制要求所以大部分设备无该证明

相关资料:萤石云开放平台小程序demo:https://github.com/Ezviz-OpenBiz/WeChat-miniApp

萤石云开放平台小程序

方案二:小程序内嵌H5

方案介绍:在小程序中内嵌H5页面,基于萤石开放平台提供的JSSDK,集成设备播放操作等功能,服务在微信内置浏览器的环境下运行 

应用环境:微信内置浏览器,微信web-view组件,该组件需配置业务域名

相关资料:萤石云开放平台JSSDK:https://open.ys7.com/help/31

                JSSDK:https://github.com/Ezviz-OpenBiz/EZUIKit-JavaScript-npm

方案三:跳转/半屏小程序

方案介绍:开发者小程序通过微信wx.navigateToMiniProgram或wx.openEmbeddedMiniProgramAPI 跳转至萤石开放平台小程序,通过参数实现对指定设备的播放和操作

应用环境:萤石开放平台小程序 

相关资料:https://open.ys7.com/help/32中2.3.1

效果展示:

跳转小程序效果图——

 半屏小程序效果图——

半屏小程序方案优势

无资质要求:用户微信小程序无需申请live_player组件资质即可进行视频直播

集成快:一行代码即可实现指定设备的播放和控制

交互体验佳:通过半屏的形式进行播放,无需跳转小程序,大大提高交互体验

设备控制:支持对设备进行对讲、云台、截屏等操作

半屏小程序测试步骤:

Step1:

开发者向萤石的小程序(萤石云开放平台【appId】wxf2b3a0262975d8c2)申请半屏跳转(被半屏跳转的小程序需要通过来源小程序的调用申请,开发者可在小程序管理后台「设置」-「第三方设置」-「半屏小程序管理」板块发起申请,最多可以申请10个小程序;)

申请后需要联系萤石开放平台同事(open-team@ezvizlife.com)统一申请才能拉起半屏

Step2:

调用微信接口wx.openEmbeddedMiniProgram(Object object)按照接口要求输入以下参数

【appId】wxf2b3a0262975d8c2

【页面路径和参数】'/pages/live/live?accessToken=' + tokenValue + '&deviceSerial='+ deviceValue + '&channelNo=' + channelNoValue

相关资料:

微信官方文件:

打开半屏小程序:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/openEmbeddedMiniProgram.html
 半屏接口:https://developers.weixin.qq.com/miniprogram/dev/api/navigate/wx.openEmbeddedMiniProgram.html

### 微信小程序调用摄像头并应用哈哈镜效果 #### 小程序开发环境配置 为了在微信小程序中实现摄像头调用以及图像处理功能,开发者工具需安装最新版本的小程序基础库。创建一个新的小程序项目,在`app.json`文件里注册页面组件。 #### 摄像头权限申请与初始化 通过`wx.getUserProfile()`获取用户授权访问相机硬件设备。一旦获得许可,则可通过`<camera>`标签来开启实时预览窗口[^1]: ```html <!-- index.wxml --> <view class="container"> <camera device-position="front" flash="off" binderror="error" style="width: 100%; height: 300px;" ></camera> </view> ``` #### 图像捕获与传输至服务器端处理 利用`canvas`组件绘制来自摄像机的画面帧,并将其转换成base64编码字符串形式的数据包发送给后台服务端进行进一步加工处理。前端部分主要负责采集工作而具体的视觉特效运算交由性能更强的服务器完成更合理一些: ```javascript // index.js Page({ captureImage() { const ctx = wx.createCameraContext(); ctx.takePhoto({ quality: 'high', success: (res) => { this.setData({ src: res.tempImagePath }); // 发送图片到服务器 wx.uploadFile({ url: 'https://example.com/upload', // 替换成实际接口地址 filePath: res.tempImagePath, name: 'file', formData: {}, success(uploadRes) { console.log('上传成功'); } }) } }); }, }) ``` #### 后台Python-OpenCV哈哈镜算法集成 后端接收到客户端提交的照片之后,可以采用Flask框架搭建RESTful API用于接收HTTP请求并将返回经过变形滤镜后的结果图。以下是简化版的API逻辑结构示例代码片段: ```python from flask import Flask, request, jsonify import cv2 import numpy as np import base64 from PIL import Image import io app = Flask(__name__) @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] img_bytes = file.read() image = Image.open(io.BytesIO(img_bytes)) opencv_image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) # 应用哈哈镜效果函数 distorted_img = apply_distortion(opencv_image) _, buffer = cv2.imencode('.jpg', distorted_img) jpg_as_text = base64.b64encode(buffer).decode() response_data = {"image": jpg_as_text} return jsonify(response_data) def apply_distortion(image): h, w = image.shape[:2] map_x = np.zeros((h,w),np.float32) map_y = np.zeros((h,w),np.float32) for y in range(0,int(h)): for x in range(0,int(w)): map_x.itemset((y,x),int(x + 10*np.sin(y/50))) map_y.itemset((y,x),int(y + 10*np.cos(x/50))) dst = cv2.remap(image,map_x,map_y,cv2.INTER_LINEAR) return dst if __name__ == '__main__': app.run(debug=True) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值