微信小程序之录像功能制作--使用camera组件

学习目标:

工作中呢,领导提出了一个不使用小程序自带API(wx.chooseImage)去完成录像功能的这样一个需求


解决方法:

这时候我想到使用小程序组件 camera    去完成开发需求,具体步骤如下

步骤:

1.进行布局,引入组件调整布局

 <camera device-position="back" flash="off"  binderror="error" id="camera"></camera>

调整页面布局与样式,单位为 vh  具体长度为顶部画面为80vh;底部按钮区域为20vh

 2.创建 camera 上下文 CameraContext 对象。在js文件 onLoad 方法中引入

onLoad(options) {
    var that = this
    var ctx = wx.createCameraContext();
    that.setData({
      ctx:ctx
    });
},

3.完成录像按钮样式,在录像按钮中写入点击方法

<view bindtap="startRecord" style="background: #5468b2;">
        <image src="../../../utils/img/photo/0.png" class="btn_icon"></image>
        <text style="color: #fff;">录像</text>
</view>

    录像点击事件方法如下

startRecord() {
    var that = this;
    that.data.ctx.startRecord({
      timeout:20,
      success: (res) => {
        that.start()   // 此方法为定时器方法,可删掉
        that.setData({
          type:'2'
        })
      },
      fail:(res) => {
        app.wxAlert('录制失败,请重新录制');
      },
      complete:(res) => {

      }
    })
 },

4.视频录制结束辣,录像终止方法附上

 stopRecord() {
    var that = this;
    that.setData({
      mask:true
    })
    that.stop();
    app.wxAlert('压缩中...')
    that.data.ctx.stopRecord({
      compressed: true, //压缩视频
      success: (res) => {
        that.setData({
          type:'4',
          src: res.tempThumbPath,
          videoSrc: res.tempVideoPath   // 请注意,这里是所拍视频文件的临时路径,需上传到服务器
        })
      },
      fail:(res) => {
        console.log('停止失败')
      },
      complete: function (res) {
        wx.hideToast();
        that.setData({
          mask: false,
        })
      }
    })
  },

5.拍摄的视频不满意,需重新录制,怎么办,代码如下。这里需要重新去定义 CameraContext 对象,对象重定义需写入延时器中,否则重定义无效,已亲测,项目已上线

 // 重新录制
  againRecord(){
    var that = this;
    that.setData({
      type:'2',
      videoSrc:'',
      ctx:''
    });
    var ctx = wx.createCameraContext()
    setTimeout(function(){
      that.setData({
        ctx:ctx
      });
      that.startRecord();
    },500)
  },

6.视频录制完成后,利用 wx.uploadFile 将我们需要将所拍视频上传到服务器里面

submit(){
    var that = this;
    var video = that.data.videoSrc
    wx.uploadFile({
      url: app.globalData.api,  // 上传路径,请自定义
      filePath: video,
      name: 'myFile',
      formData: {},
      success(re) {
        wx.hideLoading();
        var data = JSON.parse(re.data)
        app.wxAlert('上传成功');
        console.log(data.message)
      }
    })
  },

7.到这里呢,相信小伙伴们对我们的录像功能就已大致明白该如何去进行开发了


完结啦!如有问题欢迎指出

### 微信小程序实现录像功能 微信小程序提供了多种接口来支持多媒体处理,其中包括录像功能。通过调用微信小程序的相关 API 可以轻松实现这一需求。 #### 请求摄像头权限 在使用录像功能之前,需要先向用户请求摄像头权限。以下是一个简单的代码示例: ```javascript wx.getSetting({ success(res) { if (!res.authSetting['scope.camera']) { wx.authorize({ scope: 'scope.camera', success() { console.log('授权成功'); }, fail() { console.error('授权失败'); } }); } else { console.log('已获得摄像头权限'); } } }); ``` 上述代码展示了如何检测并申请摄像头权限[^1]。 #### 使用 `wx.startRecord` 和 `wx.stopRecord` 录制音频 虽然题目提到的是录像功能,但如果仅需录制音频,则可以考虑如下方法: ```javascript // 开始录音 wx.startRecord(); // 停止录音 setTimeout(function () { wx.stopRecord({ success: function (res) { const tempFilePath = res.tempFilePath; console.log(tempFilePath); }, fail: function (err) { console.error(err); } }); }, 10000); // 设置录音时间为10秒 ``` 需要注意的是,以上代码适用于单独的音频录制场景,而非视频录制[^2]。 #### 使用 `<camera>` 组件进行录像 对于真正的录像功能,推荐使用 `<camera>` 组件。该组件允许用户直接拍摄照片或录制视频。下面是一段完整的录像功能代码示例: ```html <view> <camera device-position="back" flash="off" binderror="error" style="width: 100%; height: 300px;" ></camera> <button type="primary" bindtap="startRecording">开始录像</button> <button type="warn" bindtap="stopRecording">停止录像</button> </view> ``` ```javascript Page({ startRecording(e) { this.ctx = wx.createCameraContext(); this.ctx.start({success: (res) => {console.log("录像开始")}}) }, stopRecording(e) { this.ctx.stop({ success: (res) => { console.log(res.tempVideoPath); // 获取临时文件路径 }, fail: (err) => { console.error(err); } }) } }) ``` 此代码片段利用了 `<camera>` 组件及其上下文对象 `wx.createCameraContext()` 来控制录像过程,并最终保存录好的视频到本地临时存储位置。 ### 注意事项 - **用户体验**:确保提供清晰的操作指引给用户,在适当时候提醒他们授予必要的权限。 - **隐私保护**:告知用户为何以及何时会访问他们的设备资源,尊重个人数据安全与隐私政策。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值