js调用摄像头录像并传到后端

参考自https://juejin.im/entry/5b91e8e7f265da0ac55e2cd6?tdsourcetag=s_pcqq_aiomsg
项目要求前端h5页面调用摄像头录像,然后传给后端进行人脸识别,根据返回值进行路由跳转,流媒体这方面以前接触过的都是推流拉流转发之类的软件,前端进行流媒体开发,最常用的是flash,兼容性也最好,但是它的学习成本太高了,flash这方面由公司另找人做了,我主要负责移动手机页面的开发,然后把页面嵌入到app产品里面,公司领导找到了解决方案,我跟着改写了一下,效果还是可以的,特此记录

利用的是浏览器自带的apiMediaRecorder这个api

它有3个事件

onstart

录制开始

onstop

录制结束

onstart

录制结束时同时触发,事件对象中返回录制的媒体数据

 /*navigator.mediaDevices.getUserMedia是获取手机摄像头跟话筒的方法,它返回的是promise对象,因为用户要手动选择同意,只支持火狐浏览器,chrome浏览器必须在localhost,https协议下访问,如果用ip+端口的话会因为安全策略拒绝获取摄像头*//*{ audio: true, video: { facingMode: "user" } }这里是选择了前置摄像头*/
requestAudioAccess() {navigator.mediaDevices.getUserMedia({ audio: true, video: { facingMode: "user" } }).then(stream => {this.mediaStreamTrack =typeof stream.stop === "function"? stream: stream.getTracks()[1];this.recorder = new window.MediaRecorder(stream);this.stream = stream;this.bindEvents();this.onPreview();},error => {alert("出错,请确保已允许浏览器获取音视频权限");});},

绑定事件

bindEvents () {//录制结束的时候获取视频保存下来this.recorder.ondataavailable = this.getRecordingData;this.recorder.onstop = this.saveRecordingData;
},

结束录制并传到后端,这里一开始用的axios,但是使用时会把二进制文件序列化导致失效,于是用的原生ajax

saveRecordingData() {Indicator.open("上传视频中...");this.uploading = true;let blob = new Blob(this.chunks, { type: "video/webm" }),videoStream = URL.createObjectURL(blob);this.chunkList.push({ stream: videoStream });var file = new File([blob],"msr-" + new Date().toISOString().replace(/:|\./g, "-") + ".webm",{type: "video/webm"});var formData = new FormData();formData.append("fileName", file);formData.append("name", this.name);formData.append("idCard", this.idCard);var request = new XMLHttpRequest();var url = "yourURL";request.open("POST", url);request.send(formData);let self = this;request.onreadystatechange = function() {var res = request.responseText;if (request.readyState == 4 && request.status == 200) {Indicator.close();this.uploading = false;res = JSON.parse(res);if (res.data.faceAuthFlg && res.data.faceAuthFlg == "1") {self.$router.push({path: "/rlsb/success",query: {successUrl: res.data.successUrl}});} else {self.$router.push({path: "/rlsb/result",query: {failCount: res.data.failCount}});}} else {Indicator.close();this.uploading = false;self.$router.push({path: "/rlsb/result",});}};}

前端js调用摄像头进行录像并传到后端相关推荐

  1. JS打开摄像头并截图上传

    直入正题,JS打开摄像头并截图上传至后端的一个完整步骤 1. 打开摄像头主要用到getUserMedia方法,然后将获取到的媒体流置入video标签 2. 截取图片主要用到canvas绘图,使用dra ...

  2. JS调用摄像头、实时视频流上传(一次不成功的试验)

    JS调用摄像头.实时视频流上传(一次不成功的试验) 思路 前端调用摄像头,获取视频流,从视频流中取一帧转图片,用websocket上传图片. 研究了一下发现了WebRTC这种技术,看到有博客说一些直播 ...

  3. 前端js华为云obs断点续传上传

    前端js华为云obs断点续传上传 断点续传上传就是将待上传的文件分成若干份分别上传,并实时地将每段上传结果统一记录在断点续传记录对象中,仅当所有分段都上传成功时返回上传成功的结果,否则在回调函数中返回 ...

  4. js调用摄像头并截图

    js调用摄像头并截图 <!DOCTYPE html> <html><head><meta charset="utf-8"><t ...

  5. 在网页中调用摄像头实现拍照上传 - 高拍仪二次开发

    在网页中调用摄像头实现拍照上传 高拍仪二次开发     在一些公共部门的办事处,比如银行.护照办理中心.税务等,我们可能会注意到办公桌上摆着这样一台机器.办公人员用它拍摄各种证件.文件.表格,有时候还 ...

  6. c++ 二次开发 良田高拍仪_在网页中调用摄像头实现拍照上传 - 高拍仪二次开发...

    来源于  https://blog.csdn.net/weixin_40659738/article/details/78252562 在网页中调用摄像头实现拍照上传 高拍仪二次开发 在一些公共部门的 ...

  7. 前端js调用后端API获取数据的三种方法(2022.7.25)

    前端js调用后台API获取数据的三种方法(2022.7.25) 前言 需求分析 一个Get实例 浏览器请求 SoapUI软件请求 一个Post实例 浏览器请求 SoapUI软件请求 1.Http简介( ...

  8. java集合转js数值_前端js调用接口转换Map数组数据

    返回Map数据 后端接口返回数据格式 { "code": 1, "msg": "操作成功!", "count": 0, ...

  9. 前端js以application/octet-stream方式上传文件

    今天又学会了一种上传文件的文件流方法. 本人后端采用了CXF框架实现的 api层 package com.inspur.gs.tax.tbs.utils;import org.glassfish.je ...

最新文章

  1. python比c语言开发速度快多少倍_Python语言其实很慢,为什么机器学习这种快速算法步骤通常还是用呢?...
  2. MLNLP顶会论文发表总榜:谷歌最狂,清北入前十,周明、张岳、刘挺华人前三...
  3. python基础知识资料-Python基础知识(一)—简介
  4. PHP版Leetcode题解开始随缘更新
  5. 二、“究恒常之宇宙,成一家之学说”
  6. 一个SAP加拿大实习生在当地观察到的美景
  7. 定义一个手表_华米Amazfit Pop评测:一款功能全面的“性价比”手表
  8. 5分钟搞定jQuery zepto.js 面向对象插件
  9. Linux下tomcat无法启动/启动后无法用过127.0.0.1:8080访问解决方案
  10. nginx 启动命令_Nginx实战001:Window中配置使用Nginx入门
  11. DSSM模型的原理简介,预测两个句子的语义相似度
  12. Spring源码下载步骤
  13. Neuron:空间注意中的Alpha同步和神经反馈控制
  14. 四川大学计算机学院2020转专业,四川大学化学学院2020年本科生转专业工作实施方案...
  15. 逻辑学学习.3--- 命题逻辑 (一):基本概念
  16. 宇宙机器人超级计算机,宇宙机器人无线控制器使用指南白金攻略
  17. 《自然》:深度学习超分辨显微成像方法
  18. 数据库里存放的是什么?
  19. oracle中的取余函数
  20. 怎么合并或注销重复LinkedIn领英帐号?

热门文章

  1. 《算法竞赛入门经典》(第二版)代码及详细解释(持续更新!)
  2. Linux技巧:使用Fsck命令修复损坏的分区
  3. 下拉列表之前后端交互
  4. 阿里云虚拟主机,免费用
  5. 国企银行秋招不完全指南
  6. 操作系统之GDT和IDT(三)
  7. sentinel限流入门
  8. php 两种递归方法
  9. 全职ui设计师岗位需要具备哪些工作技能
  10. 关于C和C++的争论