ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

video-compress-cj 开发者指南:如何扩展新视频格式与自定义压缩质量档位

video-compress-cj 开发者指南:如何扩展新视频格式与自定义压缩质量档位 video-compress-cj 开发者指南如何扩展新视频格式与自定义压缩质量档位【免费下载链接】video-compress-cj一个高性能的视频压缩器使用硬件解码和编码API(MediaCodec)。项目地址: https://gitcode.com/Cangjie-TPC/video-compress-cjvideo-compress-cj 是一款高性能的视频压缩三方库视频压缩 SDK面向 HarmonyOS 应用基于硬件编解码 APIMediaCodec实现低耗损的 mp4、ts 视频压缩内置高、中、低三档压缩质量。本文将带你快速上手该项目并讲解两个高频定制需求扩展新的视频格式与自定义压缩质量档位。 项目结构一览3 层架构看懂视频压缩器整个工程分为 3 层扩展功能前先弄清改哪里层级目录职责仓颉 API 层videocompressor/对外接口VideoCompressor与质量枚举CompressQualityC FFI 层videocompress_ffi/解封装、解码、编码、封装的完整压缩管线示例工程entry/高/中/低三档压缩的 UI 示例整体介绍见 README.md接口文档见 doc/feature_api.md。核心压缩流程在 cjcodec.cpp 中串联解封装DeMuxer→ 格式校验 → 视频/音频解码 → 硬件编码 → 封装输出Muxer 如何扩展新的视频格式当前支持的格式白名单如下详见 README.md 的支持的视频规格输入封装mp4、mpeg.ts视频编码AVCH.264、HEVCH.265音频编码AAC输出封装mp41. 找到格式守门员JudgeMime新格式被拒绝的地方是 cjcodec.cpp 中的JudgeMime函数——它只放行video/avc、video/hevc两种视频 mime 和audio/mp4a-latm音频 mime否则直接返回not support video mime错误。扩展新格式时只需在判断条件中追加目标 mime 即可例如想让库接受video/av01AV1if (bean-demuxer-get()-videoMime ! video/avc bean-demuxer-get()-videoMime ! video/hevc bean-demuxer-get()-videoMime ! video/av01) { // 拒绝并释放资源 }2. 确认设备硬件编解码能力这是最容易踩的坑MediaCodec 是硬件编解码框架新增格式必须先在目标设备验证硬件能力否则解码/编码器创建失败。解码端 mime 由解封装器自动识别见 DeMuxer.cpp 的GetTrackInfo无需改动编码端由 VideoEnc.cpp 的CreateVideoEncoder按 mime 创建编码器硬件不支持时该步骤会返回错误。3. 输出封装保持不变输出统一为 mp4封装参数宽高、旋转、帧率、音频通道等在 cjcodec.cpp 的CreateMutex中从解封装器透传给 Muxer新格式一般无需修改。4. 重建 FFI 库并验证选择videocompressor模块点击 Build 菜单 → Make Module 等待编译完成再用 entry 示例 压缩一个新格式样本观察resCode是否为 0。️ 如何自定义压缩质量档位现有高/中/低三档本质是原码率 × 比例高质量 0.8、中质量 0.5、低质量 0.3。新增档位需要改两处。1. 仓颉层扩展 CompressQuality 枚举在 compress_quality.cj 中新增枚举值并同步更新GetTypeNum映射为整数传递给 FFI和toStringpublic enum CompressQuality { | COMPRESS_QUALITY_HIGH | COMPRESS_QUALITY_MEDIUM | COMPRESS_QUALITY_LOW | COMPRESS_QUALITY_ULTRA // 新增超低档位 }2. C 层给档位分配码率比例在 VideoEnc.cpp 的GetQualityBitrate中为新档位增加分支例如新增ultraProportions 0.15并加对应case。函数末尾已有安全兜底码率会被钳制在 10 kbps ~ 100 Mbps 之间新档位无需担心越界。3. 参数流转路径一次压缩的完整链路调用 video_compressor.cj 的compressVideo枚举经GetTypeNum转为整数通过 FFI 声明的CompressVideo进入 C 入口 cjcodec.cppquality 存入AsyncCallbackInfoConfigureVideoEncoder用 quality 计算最终码率以 CBR 模式写入编码器配置。 本地构建与验证步骤git clone -b 具体分支名 --single-branch --recursive https://gitcode.com/Cangjie-TPC/video-compress-cj.git构建环境要求README.md 约束与限制IDEDevEco Studio 5.0.5 Release (5.0.13.200)插件DevEco Studio-Cangjie Plugin 5.0.13.200 Canary开发完成后选择videocompressor模块 → Build → Make Module 完成编译再运行 entry 示例目录 下对应档位页面验证。压缩输出文件会生成在应用沙盒路径/data/app/el2/100/base/(packagename)/haps/entry/files/见 video_compressor.cj 的命名规则。❓ 常见问题速查现象可能原因排查位置not support video mime格式未加白名单JudgeMime解码器创建失败硬件不支持该编码格式DeMuxer.cpp压缩后画质异常档位码率比例过激GetQualityBitrate回调 resultCode 非 0查看 resultStr 报错信息async_callback.cj✅ 小结扩展格式 硬件能力确认 JudgeMime白名单放行 FFI 重新编译自定义档位CompressQuality枚举加值 GetQualityBitrate加比例分支两层改动仓颉 C保持一致后重新构建videocompressor模块即可生效。按照以上步骤你可以在不破坏原有高/中/低档位行为的前提下安全地为 video-compress-cj 视频压缩器扩展新格式与专属质量档位。【免费下载链接】video-compress-cj一个高性能的视频压缩器使用硬件解码和编码API(MediaCodec)。项目地址: https://gitcode.com/Cangjie-TPC/video-compress-cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表