HarmonyOS鸿蒙Next中怎么简便的使用ffmpeg,有示例吗请问?

HarmonyOS鸿蒙Next中怎么简便的使用ffmpeg,有示例没有?

3 回复

这里有一个非常不错的第三方库:

https://gitee.com/changsanjiang/ffmpeg_harmony_os

FFmpeg for HarmonyOS

  1. 目前移植了 fftools/ffmpeg, fftools/ffprobe, 可以在App中执行 ffmpegffprobe 相关的脚本命令, 支持并发;
  2. 基于 ffmpeg + AudioRenderer 封装的音乐播放器;
  3. 音频实时编码及封装器, 可实时将传入的 PCM 音频数据进行编码并封装到指定的目标文件中;

与在终端使用类似, 通过拼接 ffmpeg 命令执行脚本:

import { FFProgressMessageParser, FFmpeg } from '@sj/ffmpeg';
        
let commands = ["ffmpeg", "-i", inputPath, outputPath, "-y"];            
FFmpeg.execute(commands, {
  logCallback: (logLevel: number, logMessage: string) => console.log(`[${logLevel}]${logMessage}`),
  progressCallback: (message: string) => console.log(`[progress]${JSON.stringify(FFProgressMessageParser.parse(message))}`),
}).then(() => {
  console.info("FFmpeg execution succeeded.");
}).catch((error: Error) => {
  console.error(`FFmpeg execution failed with error: ${error.message}`);
});

更多关于HarmonyOS鸿蒙Next中怎么简便的使用ffmpeg,有示例吗请问?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,可使用FFmpeg-Kit通过ohpm安装。示例:在工程的oh-package.json5中添加依赖"ffmpeg-kit": "^6.0.LTS",运行ohpm install安装。代码中导入并使用FFmpegSession执行命令,如执行简单转码:FFmpegKit.executeAsync("-i input.mp4 output.avi")

在HarmonyOS Next中,可通过以下方式简便使用FFmpeg:

  1. 集成FFmpeg库:将预编译的FFmpeg静态库(如.a文件)添加到工程的cpp目录,并在CMakeLists.txt中配置链接:

    target_link_libraries(your_target PRIVATE ffmpeg)
    
  2. 调用FFmpeg API:在Native C++代码中引入头文件并调用函数。以下示例实现视频解码为RGB数据:

    #include "ffmpeg/avformat.h"
    #include "ffmpeg/swscale.h"
    
    void decodeVideo(const char* filePath) {
      AVFormatContext* fmt_ctx = nullptr;
      avformat_open_input(&fmt_ctx, filePath, nullptr, nullptr);
      // ... 获取视频流、解码器初始化等步骤
      AVFrame* frame = av_frame_alloc();
      // 循环调用av_read_frame和avcodec_send_packet/avcodec_receive_frame
    }
    
  3. 数据传递:通过Native API与ArkTS层交互,将解码后的数据传递到UI进行渲染或处理。

注意事项:

  • 确保FFmpeg库已针对HarmonyOS架构(arm64-v8a/armeabi-v7a)编译
  • 需处理FFmpeg的线程安全及内存管理(如手动释放AVFrame等资源)
  • 可封装为Native SDK供ArkTS直接调用,简化使用流程

示例仅展示核心流程,实际需补充错误处理与资源释放。

回到顶部