UNPKG

@itmirror/uvc-camera-jssdk

Version:

封装uvc-camera安卓方法和上传功能的jssdk

254 lines (225 loc) 5.51 kB
# @itmirror/uvc-camera-jssdk js-sdk for uvc-camera,封装安卓端方法调用和上传 ### 安装 ``` npm i @itmirror/uvc-camera-jssdk --save ``` ### 使用 ``` import uvcCamera from '@itmirror/uvc-camera-jssdk' // web开发环境调试,需引入下面的测试数据 // 生产环境记得删除 import guaguaData from '@itmirror/uvc-camera-jssdk/lib/guaguaData.js' uvcCamera.init('camera', { devData: guaguaData }); ``` 创建实例 ```javascript // 第一个参数为父容器的id,需要设置宽高 let myCamera = uvcCamera.init('camera', { host: '', // 请求地址 uploadAction: '/upload', // 上传路径 successAction: '/success', // 成功路径 fps: 20, // 帧率 retry: 3, // 上传重试次数 fileType: 'base64' // 返回的文件格式 buttonEvent: function () {} // 硬件按钮触发 }, function () { console.log('init success'); }) ``` 修改配置 ```javascript myCamera = uvcCamera.update({ fps: 15, retry: 5, fileType: 'file' }) ``` 开启摄像头 ```javascript myCamera.open(function (json) {}) // 开启后,自动开始传输数据 ``` 开始传输数据 ```javascript myCamera.start() ``` 拍照 ```javascript myCamera.takePicture(function (data) { console.log('图片为:', data) }) ``` 换灯 ```javascript // 可选值: green, red, blue myCamera.setLight('red') ``` 重拍上一张 ```javascript myCamera.prev() ``` 拍下一张 ```javascript myCamera.next() ``` 上传 ```javascript myCamera.upload({ options: { timeout: 10000 }, success: (ret) => { console.log('上传成功!') }, fail: (err, ret) => { console.log('啊哦,上传失败了~') }, progress: (percent) => { console.log('上传进度: ', percent) } }) ``` 取消上传 ```javascript myCamera.abortUpload() ``` 清除全部文件 ```javascript myCamera.clear() ``` 停止传输数据 ```javascript myCamera.stop() ``` 关闭摄像头 ```javascript myCamera.close() ``` 销毁实例:可能会导致重新请求usb授权,原则上无需销毁 ```javascript myCamera.destroy() ``` ### 参数 | 字段 | 默认值 | 类型 | 描述 | | :---------: | :---------: | :---------: | :---------: | |fps|20|Number|帧率,最大为20| |retry|3|Number|上传失败重试次数| |fileType|base64|String|拍照返回的文件类型: base64, file| |buttonEvent|null|Function|硬件按钮事件| |host | '' | String| 请求地址 | |uploadAction|'/api/uploadImg'|String|上传路径| |successAction|'/api/uploadImgSuccess'|String|上传完成通知路径| |uploadMultiple|true|Boolean|是否一起上传| ### 完整示例 ```javascript // html <script src="../lib/guaguaData.js"></script> <script src="../lib/index.js"></script> // js <script> const $result = document.getElementById('result'); const $statusBtn = document.getElementById('statusBtn'); // 初始化 let isInit = false; let isOpen = false; let c; init(); function init(cb = function() {}) { c = uvcCamera.init('camera', { host: 'http://192.168.61.156:7001', // 上传地址 uploadAction: '/skinTest/uploadImg', // 上传地址 successAction: '/skinTest/uploadImgSuccess', // 通知地址 devData: guaguaData, buttonEvent: function() { console.log('button-handle'); takePicture(); } }, () => { isInit = true; cb(); console.log('init success'); }); } function doChange() { if (!isInit) { init(changeStatus); } else { changeStatus(); } } // 开始 or 停止 let isStop = true; function changeStatus() { if (!isOpen) { // 开启摄像头 c.open((json) => { if (!json.status) { console.log('摄像头开启失败!') isStop = true; $statusBtn.innerText = '开始'; return; } isOpen = true; isStop = false; $statusBtn.innerText = '停止'; }) return } isStop = !isStop; $statusBtn.innerText = isStop ? '开始' : '停止'; isStop ? c.stop() : c.start(); }; // 换灯 let light_i = 0; const lights = ['green', 'red', 'blue']; function changeLight() { light_i++; light_i = light_i > lights.length - 1 ? 0 : light_i; c.setLight(lights[light_i]) } // 拍照 function takePicture() { c.takePicture(function (data) { console.log('data is: ', data) const img = document.createElement('img'); img.src = data; $result.appendChild(img); setTimeout(() => { c.next(); // 拍下一张 }, 1500); }); } // 上传 function upload() { c.upload({ success: function(res) { console.log(res) console.log('上传成功!') c.destroy() }, fail: function(err) { console.log(err) console.log('上传失败...') }, progress: function(val) { console.log(val) console.log('上传进度: ', val); }, }) } // 销毁 function destroy() { if (c) { c.destroy(); c = null; isStop = true; isInit = isOpen = false; $statusBtn.innerText = '开始'; } } </script> ``` ### 注意❗ * 上传完成会清空所有拍摄的照片,请自行保存 * 调用open之前需要等init完成 * 对应安卓方法在 [android.md](./android.md)