vue3版本的录制视频上传案例

一、简介

HTML5 提供了一种简单而强大的方式来实现视频录制和上传功能。

通过使用 HTML5 的 video 元素和 MediaRecorder 接口,我们可以在浏览器中录制视频,并将其上传到服务器。

二、原理解释

  1. 使用 getUserMedia 方法获取用户的摄像头和麦克风权限。
  2. 创建 video 元素,将摄像头的视频流绑定到 video 元素上,实时显示摄像头的画面。
  3. 创建 MediaRecorder 对象,将 video 元素的画面录制为视频。
  4. 监听 dataavailable 事件,在录制过程中获取视频的数据块。
  5. 将数据块存储为 Blob 对象,并上传到服务器。
  6. 使用 URL.createObjectURL 方法把blob对象转化为对象url,赋值给video元素,进行预览已录制的视频。

注意

要创建对象 URL,可以使用 window.URL.createObjectURL() 方法,并传入 File 或 Blob 对象。如果不再需要相应数据,最好释放它占用的内容。但只要有代码在引用对象 URL,内存就不会释放。要手工释放内存,可以把对象 URL 传给 URL.revokeObjectURL()。

三、可能遇到的坑

1、在微信浏览器中,可能会遇到弹出摄像头授权后,依旧没法唤醒摄像头的情况。这是因为在微信浏览器中,video标签不会自动播放的原因,需要我们在摄像头初始化完成后,触发一下video的play方法。

videoEle.play()

2、在ios系统中,video标签播放的时候可能会默认弹出全屏播放(安卓手机可能没有这种情况)。要解决这种情况,可以在video标签里添加一个playsinline属性,限制一下。

<video width="400" height="300" autoplay muted playsinline ></video>

3、把录制的视频数据转化为可播放的blob数据时,可能在移动设备上会出现播放不了的情况,这有可能是转化数据格式的原因,可以尝试设置为常用的mp4格式,其他格式可参考Media Types的官方文档。

const blob = new Blob(chunks, { type: 'video/mp4' })

videoURL = URL.createObjectURL(blob)

4、要生成多段视频数据文件,我们需要在录制好一段视频后,执行录制停止事件,再重新开启录制才行,不然只是暂停后再录制,只会是生成一个视频数据而已。

5、在iOS设备上播放通过JavaScript录制的视频,你需要确保视频编码和协议支持是兼容的。iOS支持的视频格式包括MP4,并且通常需要使用H.264编码。

如果你是通过MediaRecorder API录制视频,确保视频和音频使用的是兼容的编码和分辨率。

如果你需要录制视频,并且要确保它可以在iOS上播放,你可以使用MediaRecorder API,并确保设置正确的mimeTypevideo/mp4audio/mp4(如果使用音频的话)。

// 创建MediaRecorder实例
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Vue调用摄像头录制视频的示例代码: ```html <template> <div> <video ref="video" autoplay></video> <button @click="startRecording">开始录制</button> <button @click="stopRecording">停止录制</button> </div> </template> <script> export default { data() { return { mediaRecorder: null, chunks: [], }; }, mounted() { navigator.mediaDevices.getUserMedia({ video: true }) .then((stream) => { this.$refs.video.srcObject = stream; this.mediaRecorder = new MediaRecorder(stream); this.mediaRecorder.ondataavailable = (e) => { this.chunks.push(e.data); }; this.mediaRecorder.onstop = () => { const blob = new Blob(this.chunks, { type: 'video/webm' }); const videoUrl = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = videoUrl; a.download = 'recorded_video.webm'; a.click(); URL.revokeObjectURL(videoUrl); this.chunks = []; }; }) .catch((error) => { console.error('Error accessing camera:', error); }); }, methods: { startRecording() { this.mediaRecorder.start(); }, stopRecording() { this.mediaRecorder.stop(); }, }, }; </script> ``` 这段代码使用了Vue框架来调用摄像头并录制视频。在模板,我们使用`<video>`元素来显示摄像头的视频流,并添加了两个按钮来控制录制的开始和停止。在脚本部分,我们使用`navigator.mediaDevices.getUserMedia()`方法来获取摄像头的视频流,并将其赋值给`<video>`元素的`srcObject`属性。然后,我们创建了一个`MediaRecorder`对象来录制视频,并设置了`ondataavailable`事件来处理录制的数据块。当点击停止录制按钮时,我们将录制的数据块合并为一个`Blob`对象,并通过创建一个下载链接来保存录制视频文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值