回复
     #我的鸿蒙开发手记#鸿蒙Next相机录制完视频后如何将录制的视频文件进行压缩? 原创 精华
言程序plus
 发布于 2025-5-6 09:03
 浏览
 0收藏
问题描述:鸿蒙Next相机录制完视频后如何将录制的视频文件进行压缩?
应用场景:最近在开发视频录制相关功能,在录制完视频后预览视频时,上传到服务器时有大小限制,所以需要对视频码流进行压缩之后,再转成base64字符串进行上传处理

解决方案:
使用鸿蒙开源第三方库videocompressor 方法来实现对视频码流的压缩,具体解决思路如下:
1、第一步:在你的项目中 使用ohpm install @ohos/videocompressor 命令,下载三方库
2、第二步:在页面中引入三方库videocompressor
3、第三步:实例化 new VideoCompressor(),并传入 getContext(),this.selectFilePath,CompressQuality.COMPRESS_QUALITY_HIGH 等参数(说明 context:上下文,inputFilePath: 需要压缩的视频路径, quality: 压缩视频质量)
4、第四步:压缩完成后取到压缩后的地址 data.outputPath
5、第五步:再使用fileIo和相关工具类读取文件并转为base64字符串
代码示例:
这里给出示例代码,供大家参考学习
// 在页面中导入鸿蒙三方库videocompressor 
import { CompressorResponseCode, CompressQuality, VideoCompressor} from "@ohos/videocompressor"
// 封装压缩视频方法
zipVideo(){
    let videoCompressor = new VideoCompressor();
    videoCompressor.compressVideo(getContext(),this.videoUri,CompressQuality.COMPRESS_QUALITY_HIGH).then((data) => {
      if (data.code == CompressorResponseCode.SUCCESS) {
        console.log("videoCompressor HIGH message:" + data.message + "--outputPath:" + data.outputPath);
        const amrFile = fileIo.openSync(data.outputPath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
        const stat = fileIo.statSync(amrFile.fd)
        const buffer = new ArrayBuffer(stat.size)
        fileIo.readSync(amrFile.fd, buffer)
        const helper = new util.Base64Helper()
        let base64 = helper.encodeToStringSync(new Uint8Array(buffer))
        console.log('压缩之后的数据长度是'+ base64.length/1024)
           // this.bufferSize = 0
        // 删除缓存的文件 同时关闭文件 根据需求来
        fileIo.rmdirSync(data.outputPath)
        fileIo.closeSync(amrFile)
        // 将base64字符串传给后端
        let params: Record<string, Object> = { 'result': base64};
        apiPost(params)
        
      } else {
        console.log("videoCompressor HIGH code:" + data.code + "--error message:" + data.message);
      }
    }).catch((err:BusinessError) => {
      console.log("videoCompressor HIGH get error message" + err.message);
    })
  }
调用方法
    // 视频录制完成后的提交方法中来执行压缩方法
        this.zipVideo()   
备注说明
支持的视频规格:
1、支持的解封装格式:
媒体格式	  封装格式
视频	  mp4、mpeg.ts
2、支持的视频解码格式:
视频解码类型
AVC(H.264)、 HEVC(H.265)
3、支持的音频解码格式:
音频解码类型
AAC
4、支持的音频编码格式:
音频编码类型
AAC
5、支持的封装格式:
媒体格式	封装格式
视频	mp4
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
    已于2025-5-6 09:03:05修改
 
        赞
        2
 
        收藏 
      
 回复
  相关推荐
 



















