• uniapp的APP端录制视频_保存本地并读取视频


    前言

    要实现APP端:

    页面A录制视频,并保存到本地;

    页面B播放保存到本地的视频;

    我的业务需求:在页面A中录制视频,保存到本地并,从页面B中也可以获取到保存的视频并播放。这个过程中不会出现从相册选择视频的操作。所以本文不涉及保存到相册的功能

     演示

    页面A:添加视频

    页面A:弹出框

    页面A:录制

     页面B:读取视频

     

    代码

    录制视频、保存本地

    关键API

    用于打开相机:

    用于将视频存在本地:

     用于记录视频本地path:

     代码:

    //界面A
    <view class="dflex-j-sb border-b padding-xs">
    	<view >视频</view>//文字
           //icon,点击开始录制视频
    	<uni-icons type="plus" size="25" @click="videoRecording"></uni-icons>
    </view>
    

      界面A的js部分

    //录视频
    videoRecording() {
        let that = this;
           //弹出提示框
        uni.showModal({
            content: '视频最长录制30s',
            showCancel: false,
            success: () => {
                //录视频
                uni.chooseVideo({
                    count: 1,//只录制一个视频
                    sourceType: ['camera'],//开启视频相机
                    maxDuration: 30,//时长30s
                    mediaType: ['video'],//类型为视频
                    success: res => {    
                        //录制成功         
                        that.videoRecordingPath = res.tempFilePath;
                        //存储到本地
                        that.saveToLocal();
                    fail: (err) => {
                //提示 uni.showToast({ title:
    '视频录制失败!', duration: 2000 }); } }) } }); }, // 存到本地 saveToLocal() { uni.showLoading({ title: '保存中...' }); uni.saveFile({ tempFilePath: this.videoRecordingPath, success: (res) => { uni.hideLoading(); this.svideoPath = res.savedFilePath;  //记录保存地址,将来在页面B中通过地址读取文件
            uni.setStorageSync('videoPath',this.
    svideoPath )
            }
        })
    
    },                 

    读取视频

    关键API

    用于获取本地视频:

     用于读取视频:

     代码:

    //界面B,读取视频,并自动播放1帧作为缩略图
    <view class="video-wrapper">
          <video :src="videoPath" controls class="video-size" id="editVideo" show-play-btn="true" show-fullscreen-btn="false" show-progress="true" :autoplay="autoPlay" @timeupdate="video_time_update"></video>
    </view>//读取视频
    readVideo() {
          //获取视频本地存储路径
          let params=uni.getStorageSync('videoPath')
          //读取本地文件
          uni.getSavedFileInfo({
            filePath: params, //
                success:  (res)=> {
                 //读取视频信息,注意,必须要这么包裹写:先读取本地文件,再读取视频信息。只写getVideoInfo不写getSaveFileInfo在跨页面的时候无法读取本地存的储视频
    uni.getVideoInfo({ src:params, success: (res) => { this.videoImgShow=true; this.videoPath = params }, fail: (err) => { } }) } }); }, //缩略图,在APP端读取视频后,默认是黑屏。想要以第一帧作为缩略图通常使用canvas获取视频第一帧生成图片。但是这里用了个讨巧的方法,即:加载视频后播放 //一帧暂停,达到缩略图的效果。 //参考网址:https://blog.csdn.net/qq_39543805/article/details/124148252 video_time_update(e) { // e.detail.duration 为视频总长度,在没有加载到视频的时候总长度为 -0.0001 // 当获取到视频长度后进入if //debugger; if (this.video_time_update_status && e.detail.duration > 0) { // 第一次进入if 关闭更新状态,防止循环暂停 this.video_time_update_status = false; // 获取视频 this.videoContext = uni.createVideoContext('editVideo'); // 暂停视频 this.videoContext.pause(); } }

    完结

  • 相关阅读:
    join()方法作用
    多线程的运行状态
    守护线程和非守护线程
    多线程快速入门
    Spring Boot2.0之注解方式启动Springmvc
    Spring Boot2.0之 原理—创建内置Tomcat容器
    Spring Boot2.0之纯手写框架
    Sprin Boot2.0之整合Mybatis整合分页插件
    linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
    PHP编程效率的20个要点
  • 原文地址:https://www.cnblogs.com/liuXiaoDi/p/16226159.html
Copyright © 2020-2023  润新知