#我的鸿蒙开发手记#鸿蒙Next相机录制完视频后如何将录制的视频文件进行压缩? 原创 精华

言程序plus
发布于 2025-5-6 09:03
浏览
0收藏

问题描述:鸿蒙Next相机录制完视频后如何将录制的视频文件进行压缩?

应用场景:最近在开发视频录制相关功能,在录制完视频后预览视频时,上传到服务器时有大小限制,所以需要对视频码流进行压缩之后,再转成base64字符串进行上传处理

#我的鸿蒙开发手记#鸿蒙Next相机录制完视频后如何将录制的视频文件进行压缩?-鸿蒙开发者社区

解决方案:

使用鸿蒙开源第三方库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
收藏
回复
举报
回复
    相关推荐