基于h5端的视频录制和回溯功能的实现

本文介绍了如何在H5端利用rrweb插件实现视频录制及回溯功能。首先,通过DOM快照记录页面状态,然后通过rrweb记录用户操作并分片上传到后台。在本地搭建nodejs服务处理文件,实现视频回放。文章提供了一个静态界面的示例,并附带前端面试宝典资源。
摘要由CSDN通过智能技术生成

背景

出于目前的对保险项目的监管要求,需要对用户操作进行录屏保存,特别是提交资料、文件审核等核心操作。这样在用户与保险公司之间产生纠纷时,就可以有迹可循。市面上有的录屏系统太大并且收费较贵,无法适用于目前我们内嵌于ReactNative 的一个单页h5应用。基于此我们试图寻找一种类似快照记录的方式,将h5界面的历史行为记录下来。文章将以一个本地demo 的为例展开用法

1. DOM快照

当我们想要查看用户在投保过程中某一时刻的页面状态时,我们只需要将那一刻的页面 dom结构以及页面中的 css 样式记录下来,然后在浏览器中重新渲染出来就能达到回溯的效果了。这样我们就实现了某一时刻 DOM 快照的功能。但是这个录制还只是内存中的一个对象,并没有实现远程录制。为了实现远程录制,我们需要将这个内存对象序列化成字符串,保存到服务端,然后在回放的时候从服务器上取出来,交给浏览器重新渲染。

2. rrweb插件引入

rrweb原理 —— rrweb 通过记录初始页面的DOM 状态,或者特定某个时刻的DOM 状态,后续收集不同时间点的操作指令 或者 某个时刻某个DOM 的变化作为一个增量快照,在原先快照的基础上,不断加入根据行为解析的DOM 数据,构建了后续的快照,减少大量数据的存储或传输。

2.1 实现录制功能

写一个原生的静态界面,支持一些简单的交互操作,如下代码所示:

<div id="root"><div class="container"><div class="content"><span id="showText">0</span></div><div class="btnBox"><div id="decrease" class="btn">减少</div><div id="add" class="btn">增加</div><div id="payStart" class="btn">支付开始(sdk场景)</div><div id="payEnd" class="btn">支付结束(sdk场景)</div><div id="recor
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
h5实现录制音频并上传到服务器,可以使用浏览器提供的`MediaRecorder`API进行录制,然后使用`XMLHttpRequest`对象或`fetch`函数将录制完成的音频文件上传到服务器。 以下是一个简单的示例代码,仅供参考: ```javascript // 获取录音按钮和上传按钮 const recordBtn = document.querySelector('#record-btn'); const uploadBtn = document.querySelector('#upload-btn'); // 定义录音相关变量 let mediaRecorder = null; // MediaRecorder对象 let audioChunks = []; // 录音数据数组 // 点击录音按钮开始录音 recordBtn.addEventListener('click', () => { // 请求用户授权使用麦克风 navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => { // 创建MediaRecorder对象 mediaRecorder = new MediaRecorder(stream); // 监听数据可用事件 mediaRecorder.addEventListener('dataavailable', event => { audioChunks.push(event.data); }); // 开始录音 mediaRecorder.start(); }); }); // 点击上传按钮上传录音文件 uploadBtn.addEventListener('click', () => { // 停止录音 mediaRecorder.stop(); // 创建Blob对象 const audioBlob = new Blob(audioChunks, { type: 'audio/wav' }); // 创建FormData对象 const formData = new FormData(); formData.append('audio', audioBlob); // 发送POST请求上传文件 fetch('/upload', { method: 'POST', body: formData }) .then(response => { console.log(response); }); }); ``` 此代码使用了`MediaRecorder`API进行录音,并将录音数据存储在`audioChunks`数组中,在点击上传按钮时将数据数组转换为Blob对象并使用`fetch`函数发送POST请求上传到服务器。在服务器端可以通过解析HTTP请求中的`audio`字段获取Blob对象并保存为音频文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值