uni-app 录制固定时长的视频

发布于 1周前 作者 itying888 来自 Uni-App

uni-app 录制固定时长的视频

求大佬出个录制固定时长的视频的demo

1 回复

uni-app 中实现录制固定时长的视频功能,你可以结合 uni.createCameraContext()MediaRecorder API 来完成。以下是一个简单的代码示例,展示了如何录制一个固定时长(例如5秒)的视频。

首先,你需要在页面的 <template> 中添加一个 <camera> 组件,用于视频录制:

<template>
  <view class="container">
    <camera device-position="back" flash="off" id="myCamera"></camera>
    <button @click="startRecording">开始录制</button>
    <button @click="stopRecording" :disabled="!isRecording">停止录制</button>
    <video :src="videoSrc" controls v-if="videoSrc"></video>
  </view>
</template>

接下来,在 <script> 部分实现录制逻辑:

<script>
export default {
  data() {
    return {
      context: null,
      recorder: null,
      isRecording: false,
      videoSrc: '',
      recordingStartTime: 0,
      fixedDuration: 5000, // 固定时长5秒
    };
  },
  methods: {
    startRecording() {
      this.context = uni.createCameraContext();
      this.context.startRecord({
        success: (res) => {
          this.recorder = res.recorder;
          this.recordingStartTime = Date.now();
          this.isRecording = true;
          // 使用setTimeout来模拟固定时长录制
          setTimeout(() => {
            this.stopRecording();
          }, this.fixedDuration);
        },
        fail: (err) => {
          console.error('录制失败', err);
        },
      });
    },
    stopRecording() {
      if (this.recorder) {
        this.recorder.stop({
          success: (res) => {
            this.videoSrc = res.tempVideoPath;
            this.isRecording = false;
          },
          fail: (err) => {
            console.error('停止录制失败', err);
          },
        });
      }
    },
  },
};
</script>

<style> 部分,你可以根据需要调整布局:

<style>
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}
button {
  margin: 10px;
}
video {
  width: 300px;
  height: auto;
}
</style>

这个示例中,当用户点击“开始录制”按钮时,会启动视频录制,并且使用 setTimeout 在5秒后自动停止录制。录制的视频将显示在页面的 <video> 元素中。

请注意,uni-appcreateCameraContext API 可能在不同平台上有所差异,确保在实际项目中根据平台文档进行相应调整。此外,由于权限管理等因素,确保在 manifest.json 中已正确配置相关权限。

回到顶部