AvueAvue
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
  • Article 文章
  • Group 分组容器
  • Title 标题文本
  • CountUp 数字动画
  • Comment 评论
  • Chat 客服聊天
  • Captcha 验证码
  • Contextmenu 右键菜单
  • Clipboard 复制文本
  • DialogForm 弹窗表单
  • Draggable 拖拽
  • Export Excel 导入与导出
  • Flow 流程
  • FilterBuilder 高级筛选
  • FileManager 文件管理
  • QRCode 二维码
  • Iframe 嵌入页面
  • ImagePreview 图片预览
  • Login 登录组件
  • License 授权书
  • Print 打印
  • Screenshot 页面截图
  • Search 标签搜索
  • Sign 电子签名
  • TextEllipsis 超出文本省略
  • Tabs 选项卡
  • Tree 树型
  • Video 摄像头
  • Calendar 日历组合示例

Video 摄像头

avue-video 获取本机摄像头流,支持录像和截取当前画面。摄像头需要浏览器许可与可用的安全上下文,首次连接可能失败,业务应处理错误状态。

效果预览可直接操作下方示例

示例关闭自动连接,点击“开始录制”后才请求摄像头;成功停止后提供本地视频预览。此页面不会上传录制内容。

正在加载示例…
<template>
  <el-space wrap>
    <el-button type="primary" :loading="connecting" :disabled="recording" @click="start">开始录制</el-button>
    <el-button type="danger" :disabled="!recording" @click="video?.stopRecord()">停止录制</el-button>
    <el-button :disabled="!ready" @click="photo = video?.takePhoto() || ''">截取画面</el-button>
  </el-space>
  <avue-video ref="video" width="100%" :auto-start="false" :audio="false"
              @ready="ready = true" @record-start="recording = true" @record-stop="recording = false"
              @video-error="handleError" @data-change="handleData" />
  <el-alert v-if="error" :title="error" type="error" :closable="false" />
  <p v-if="result">录制结果({{ size }} 字节):</p>
  <video v-if="result" :src="result" controls class="video-demo-result" />
  <img v-if="photo" :src="photo" class="video-demo-result" alt="摄像头当前画面截图" />
</template>

<script setup>
import { onBeforeUnmount, ref } from 'vue'
const video = ref(null)
const connecting = ref(false)
const recording = ref(false)
const ready = ref(false)
const error = ref('')
const result = ref('')
const photo = ref('')
const size = ref(0)
let disposed = false
onBeforeUnmount(() => { disposed = true })
async function start() {
  connecting.value = true
  error.value = ''
  try { await video.value?.startRecord() }
  catch (cause) { if (!disposed) handleError(cause) }
  finally { if (!disposed) connecting.value = false }
}
function handleError(cause) {
  error.value = cause.message || '摄像头连接失败'
  ready.value = false
  recording.value = false
}
function handleData(data, blob) {
  result.value = data
  size.value = blob.size
}
</script>

<style scoped>
.video-demo-result { display: block; width: 100%; max-width: 520px; margin-top: 12px; border-radius: 8px; }
</style>

Props

参数说明类型默认值
width / height显示尺寸,推荐数字或百分比;未设高度时按比例number / string500 / ''
aspectRatio宽高比number / string16 / 9
autoStart挂载后自动初始化摄像头,初始化并不等于开始录像booleantrue
autoplay / muted自动播放摄像头流 / 本地播放静音booleantrue
video / audio传给 getUserMedia 的视频 / 音频约束boolean / objecttrue / false
mimeType录制格式,需浏览器 MediaRecorder 支持string自动选择
mirror镜像显示预览booleanfalse
background显示在视频上方的引导图片string—
showBorder / showStatus显示四角边框 / 状态提示booleantrue

muted 只控制预览静音,录音需另设 audio。mirror 是显示效果,不改变实际拍照或录像数据。修改采集约束后可调用 retry() 重新连接。

Events

事件参数说明
readyMediaStream摄像头和录像实例就绪
video-errorError初始化或视频流播放失败
record-start / record-stop无录像开始 / 结束
status-changeloading / ready / recording / error当前状态
data-changedataUrl, blob停止录像后异步取得录制结果
photo-change图片 Data URL拍照成功

stopRecord 返回后文件读取仍可能进行中,应在 data-change 处理完整视频结果,不要在点击停止时立即假定数据已就绪。

Methods 与 Slots

方法返回值说明
init() / retry()Promise<boolean>初始化或重连,成功返回 true
startRecord()boolean 或 Promise<boolean>未就绪时先初始化,推荐统一 await
stopRecord()boolean请求停止当前录制
getData()Promise<string 或 null>读取已有视频 Blob 为 Data URL;停止后已自动调用
takePhoto(type?, quality?)string 或 null截取当前帧,默认 image/png
getRecord()string 或 null旧方法名,等同于 PNG 拍照,不是获取录像
destroyVideo()无停止并释放摄像头资源;组件卸载时自动执行

overlay 插槽参数为 { ready, recording, error },用于视频上层提示或业务控件。

最后更新:
贡献者: smallwei
Prev
Tree 树型
Next
Calendar 日历组合示例