uniapp在H5端如何调用摄像头录制视频
在uniapp开发H5页面时,如何调用摄像头实现视频录制功能?需要兼容主流浏览器,希望能提供具体的代码示例和权限配置方法。另外,录制完成后如何获取视频文件并上传到服务器?
2 回复
在H5端,使用uniapp的<camera>组件或uni.chooseVideo API调用摄像头录制视频。需注意浏览器兼容性,建议使用HTTPS协议。
在 UniApp 的 H5 端调用摄像头录制视频,可以使用 HTML5 的 getUserMedia API 结合 <video> 和 <input type="file"> 元素实现。以下是具体步骤和代码示例:
方法一:使用 getUserMedia API(适用于现代浏览器)
- 请求摄像头权限:通过
navigator.mediaDevices.getUserMedia获取视频流。 - 显示视频预览:将视频流绑定到
<video>元素。 - 录制视频:使用
MediaRecorderAPI 录制并保存视频。
<template>
<view>
<video ref="videoRef" autoplay muted></video>
<button @click="startRecording">开始录制</button>
<button @click="stopRecording">停止录制</button>
<video v-if="videoUrl" :src="videoUrl" controls></video>
</view>
</template>
<script>
export default {
data() {
return {
mediaRecorder: null,
recordedChunks: [],
videoUrl: ''
};
},
methods: {
async startRecording() {
try {
const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
this.$refs.videoRef.srcObject = stream;
this.mediaRecorder = new MediaRecorder(stream);
this.recordedChunks = [];
this.mediaRecorder.ondataavailable = (event) => {
if (event.data.size > 0) {
this.recordedChunks.push(event.data);
}
};
this.mediaRecorder.onstop = () => {
const blob = new Blob(this.recordedChunks, { type: 'video/mp4' });
this.videoUrl = URL.createObjectURL(blob);
stream.getTracks().forEach(track => track.stop()); // 释放摄像头
};
this.mediaRecorder.start();
} catch (error) {
console.error('无法访问摄像头:', error);
}
},
stopRecording() {
if (this.mediaRecorder && this.mediaRecorder.state === 'recording') {
this.mediaRecorder.stop();
}
}
}
};
</script>
方法二:使用 <input type="file">(简单兼容方案)
通过文件输入调用设备摄像头(移动端支持):
<template>
<view>
<input type="file" accept="video/*" capture="environment" @change="handleVideoUpload">
<video v-if="videoUrl" :src="videoUrl" controls></video>
</view>
</template>
<script>
export default {
data() {
return {
videoUrl: ''
};
},
methods: {
handleVideoUpload(event) {
const file = event.target.files[0];
if (file) {
this.videoUrl = URL.createObjectURL(file);
}
}
}
};
</script>
注意事项:
- 兼容性:
getUserMedia需 HTTPS 环境(本地 localhost 除外)。 - 用户授权:首次使用需用户允许摄像头权限。
- 格式支持:不同浏览器对视频格式支持可能不同(如 Chrome 支持 MP4)。
- UniApp 限制:H5 端无法直接使用原生组件(如
camera),需用 HTML5 API。
选择方法一可自定义录制过程,方法二更简单但功能有限。根据需求选择即可。

