微信小程序录制视频功能实现

本文介绍了在微信小程序中实现视频录制功能的背景和选择小程序的原因。通过利用camera和video组件,详细阐述了如何利用onCameraFrame接口获取原始帧数据,并结合startRecord和stopRecord API实现视频录制和预览。最后提供了代码实现的概要。
摘要由CSDN通过智能技术生成

 背景:

之前项目中有个需求,需要在pc端的web页面做一套业务的开户流程,其中在开户流程中需要法人上传本人的开户视频(需要支持扫二维码在手机上录制视频上传)。pc端上传的功能比较好实现,但是扫二维码在手机上录制视频并且同步到pc页面的开户流程中就不太好做了。

一开始有想到两种方案:

a: 做一个h5的视频录制页面,然后生成链接的二维码,手机扫二维码进到h5页面录制视频。

  • 优点:视频录制的时长可以控制
  • 缺点:无法自定义视频拍摄的界面,只能使用相机原生的界面拍摄,可能还要适配各种机型

b: 在小程序的页面里录制视频,而且有现成的组件和api比较好实现

  • 优点:视频拍摄的界面可以调整,比如在界面上添加展示文案,不需要再花精力去适配机型
  • 缺点:录制时长比较短,目前有5分钟的时长限制

考虑到这个开户视频需要在录制界面上展示一段朗读的文字,h5可能暂时无法实现,刚好公司目前有一个微信小程序已经上线,所以最终选择了在小程序上开发一个录制视频的功能页面。

实现原理

要在微信小程序实现录制视频的功能要用到两个媒体组件camera和video,其中camera组件用来拍摄视频,video组件用来预览拍摄的视频。

camera

camera组件可以调用系统相机进行拍照或者视频录制,其中onCameraFrame 接口可以根据 属性frame-size 返回不同尺寸的原始帧数据,这个原始帧数据就是我们要拍摄的视频数据。

用法

html
<camera device-position="front" flash="off" binderror="error"></camera>

js

// 创建 camera 上下文 CameraContext 对象
const context = wx.createCameraContext() 
// context.onCameraFrame()返回视频图像的监听器
const listener = context.onCameraFrame((frame) => {
  // frame.data 就是视频数据 格式是ArrayBuffer
  console.log(frame.data instanceof ArrayBuffer, frame.width, frame.height)
})
listener.start() // 开始监听帧数据
setTimeou(() => {
  listener.start() // 停止监听帧数据
}, 10)

video

通过camera组件的api接口可以拿到实时的视频数据了,但是ArrayBuffer格式的数据是无法预览的。那要预览视频可以用video媒体组件,video组件中可以指定视频的src路径,即播放视频的资源地址,但是只支持网络路径、本地临时路径、云文件ID这些选项。

所以要播放录制的视频还需要拿到视频的本地临时路径,那怎么拿到呢,需要结合下面两个api

开始录像CameraContext.startRecord,可以设置视频的时长

结束录像CameraContext.stopRecord,通过成功的回调函数拿到视频的临时路径

官方给出的使用例子

<view class="page-body">
  <view class="page-body-wrapper">
    <camera device-position="back" flash="off" binderror="error" style="width: 100%; height: 300px;"></camera>
    <view class="btn-area">
      <button type="primary" bindtap="startRecord">开始录像</button>
    </view>
    <view class="btn-area">
      <button type="primary" bindtap="stopRecord">结束录像</button>
    </view>
    <view class="preview-tips">预览</view>
    <vi
  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
微信小程序提供了wx.createCameraContext()方法来创建相机上下文对象,以实现拍照和录像功能实现拍照功能: 1. 在wxml文件中添加一个按钮,点击时触发拍照事件: ``` <button bindtap="takePhoto">拍照</button> ``` 2. 在对应的js文件中定义takePhoto方法: ``` Page({ takePhoto() { const ctx = wx.createCameraContext(); ctx.takePhoto({ quality: 'high', success: (res) => { this.setData({ src: res.tempImagePath }) } }) } }) ``` 3. 调用createCameraContext()方法创建相机上下文对象,然后调用takePhoto()方法,设置照片质量和成功后的回调函数,将拍摄的照片临时路径存储在data中。 实现录像功能: 1. 在wxml文件中添加一个按钮,点击时触发录像事件: ``` <button bindtap="startRecord">开始录像</button> <button bindtap="stopRecord">停止录像</button> ``` 2. 在对应的js文件中定义startRecord和stopRecord方法: ``` Page({ data: { videoSrc: '' }, startRecord() { const ctx = wx.createCameraContext(); ctx.startRecord({ success: (res) => { console.log('startRecord') } }) }, stopRecord() { const ctx = wx.createCameraContext(); ctx.stopRecord({ success: (res) => { this.setData({ videoSrc: res.tempVideoPath }) } }) } }) ``` 3. 调用createCameraContext()方法创建相机上下文对象,然后调用startRecord()方法开始录像,调用stopRecord()方法停止录像并将录制视频临时路径存储在data中。 需要注意的是,在小程序中使用摄像头时,需要在app.json文件中添加相机权限: ``` { "permissions": { "scope.camera": { "desc": "用于拍照和录像" } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值