Thanks to visit codestin.com
Credit goes to gitcode.com

video-compress-cj:高性能视频压缩三方库,支持H.264/H.265编码与多质量压缩

一个高性能的视频压缩器,使用硬件解码和编码API(MediaCodec)。

分支5Tags3

video-compress-cj

介绍

video-compress-cj是一款高性能的视频压缩三方库

特性

  • 🚀 支持视频压缩。

  • 🚀 支持高,中,低三种质量压缩。

源码目录

├── README.md                                 #整体介绍
├── doc                                       #文档目录
│   └── feature_api.md                        #API接口文档
├── videocompressor                           #源码目录 
├── videocompress_ffi                         #C++源码目录
├── entry                                     #示例目录
└── hvigor                                    #构建工具目录

支持的视频规格

支持的解封装格式:

媒体格式 封装格式
视频 mp4、mpeg.ts

支持的视频解码格式:

视频解码类型
AVC(H.264)、 HEVC(H.265)

支持的音频解码格式:

音频解码类型
AAC

支持的视频编码格式:

视频编码类型
AVC(H.264)、 HEVC(H.265)

支持的音频编码格式:

音频编码类型
AAC

支持的封装格式:

媒体格式 封装格式
视频 mp4

接口说明

主要类和函数接口说明详见 API

使用说明

编译构建

描述具体的编译过程:


    1.先通过命令把代码下载下来,
      git clone -b 具体分支名 --single-branch --recursive  https://gitcode.com/Cangjie-TPC/video-compress-cj.git
          
    2.选择videocompressor模块,点击Build菜单,然后点击 Make Module 'videocompressor' 等待编译完成,项目则编译成功
    

功能示例

1. 把video-compress-cj作为三方库依赖引入

当前仓颉语言三方库还不支持中心仓库,可以把依赖库克隆到本地引入,具体步骤如下:

a. 目标工程把依赖库作为源码引入

> cd $工程根目录
>mkdir third-party
>cd  third-party
>git clone -b 具体分支名 --single-branch --recursive  https://gitcode.com/Cangjie-TPC/video-compress-cj.git
然后按照上面流程把video-compress-cj库正常编译通过即可

b. 打开 .\entry\src\main\cangjie\cjpm.toml,添加依赖

  [dependencies.videocompressor]
    path = "../../../../thirdparty/video-compress-cj/videocompressor/src/main/cangjie"

2. 使用video-compress-cj压缩视频

示例代码如下:


package ohos_app_cangjie_entry

import ohos.state_macro_manage.*
import videocompressor.*
import ohos.concurrency.*

@Entry
@Component
class CompresstxtHigh {
    @State
    var message: String = "开始压缩"

    @State
    var compressresult: String = ""

    @State
    var res: ?CompressorResponse = Option<CompressorResponse>.None
    func build() {
        Row {
            Column {
                Button(message).onClick {
                    let comprossor: VideoCompressor = VideoCompressor()
                    let inputFilePath: String = "/data/storage/el1/bundle/test.mp4"
                    let fut: Future<Unit> = spawn {
                        let result: ?CompressorResponse = comprossor.compressVideo(globalAbilityContext.getOrThrow(),
                            inputFilePath, CompressQuality.COMPRESS_QUALITY_HIGH)
                        launch {
                            res = result
                            if (let Some(i) <- result) {
                                compressresult = i.message
                            } else {
                                compressresult = "压缩失败"
                            }
                        }
                    }
                }.fontSize(40).height(80)
                Text(compressresult)
            }.width(100.percent)
        }.height(100.percent)
    }
}

执行结果如下:

视频压缩成功,并在对应的沙盒路径 /data/app/el2/100/base/(packagename)/haps/entry/files/ 中生成了一个压缩后的视频,生成视频大小比原视频小,且能正常播放

约束与限制

IDE : DevEco Studio 5.0.5 Release (5.0.13.200)

Plugins (SDK) : DevEco Studio-Cangjie Plugin 5.0.13.200 Canary

开源协议

本项目基于 Apache License ,请自由的享受和参与开源。

参与贡献

欢迎给我们提交PR,欢迎给我们提交Issue,欢迎参与任何形式的贡献。

项目介绍

一个高性能的视频压缩器,使用硬件解码和编码API(MediaCodec)。

定制我的领域