首页
/ Mobile-FFmpeg 跨平台多媒体处理框架详解

Mobile-FFmpeg 跨平台多媒体处理框架详解

2025-07-09 03:25:14作者:羿妍玫Ivan

框架概述

Mobile-FFmpeg 是一个专为移动平台设计的 FFmpeg 封装库,支持 Android、iOS 和 tvOS 平台。它将强大的 FFmpeg 多媒体处理能力带到了移动端,让开发者能够在移动应用中实现各种音视频处理功能。

核心特性

多平台支持

  • Android:支持 API Level 16+,构建 arm-v7a、arm-v7a-neon、arm64-v8a、x86 和 x86_64 架构
  • iOS:支持 iOS SDK 9.3+,构建 armv7、armv7s、arm64、arm64e、i386、x86_64 和 Mac Catalyst 架构
  • tvOS:支持 tvOS SDK 9.2+,构建 arm64 和 x86_64 架构

功能组件

  • 包含 FFmpeg 和 FFprobe 两个核心工具
  • 支持 FFmpeg v3.4.x 到 v4.4-dev 多个版本
  • 提供 29 个外部库支持,包括 5 个 GPL 授权库
  • 支持并发执行

系统集成

  • Android:支持 zlib 和 MediaCodec 系统库
  • iOS/tvOS:支持 bzip2、iconv、libuuid、zlib 系统库
  • iOS:额外支持 AudioToolbox、VideoToolbox、AVFoundation 框架

安装与配置

Android 集成

  1. 添加仓库依赖到 build.gradle:
repositories {
    mavenCentral()  // 4.4及以后版本
    // jcenter()    // 4.3.2及以前版本
}
  1. 添加 MobileFFmpeg 依赖:
dependencies {
    implementation 'com.arthenica:mobile-ffmpeg-full:4.4'
}

iOS/tvOS 集成

在 Podfile 中添加:

# iOS
pod 'mobile-ffmpeg-full', '~> 4.4'

# tvOS
pod 'mobile-ffmpeg-tvos-full', '~> 4.4'

核心功能使用指南

基本命令执行

同步执行

// Android
int rc = FFmpeg.execute("-i input.mp4 -c:v libx264 output.mp4");
if (rc == RETURN_CODE_SUCCESS) {
    // 处理成功
}
// iOS
int rc = [MobileFFmpeg execute: @"-i input.mp4 -c:v libx264 output.mp4"];
if (rc == RETURN_CODE_SUCCESS) {
    // 处理成功
}

异步执行

// Android
long executionId = FFmpeg.executeAsync(command, new ExecuteCallback() {
    @Override
    public void apply(long executionId, int returnCode) {
        // 回调处理
    }
});
// iOS
long executionId = [MobileFFmpeg executeAsync:command withCallback:self];

// 实现回调方法
- (void)executeCallback:(long)executionId :(int)returnCode {
    // 回调处理
}

媒体信息获取

// Android
MediaInformation info = FFprobe.getMediaInformation("input.mp4");
// iOS
MediaInformation *info = [MobileFFprobe getMediaInformation:@"input.mp4"];

摄像头访问

Android 摄像头录制

FFmpeg.execute("-f android_camera -i 0:0 -r 30 -pixel_format bgr0 -t 00:00:05 output.mp4");

iOS 摄像头录制

[MobileFFmpeg execute: @"-f avfoundation -r 30 -video_size 1280x720 -pixel_format bgr0 -i 0:0 -vcodec h264_videotoolbox -vsync 2 -f h264 -t 00:00:05 %@", outputPath];

高级功能

回调处理

日志回调

// Android
Config.enableLogCallback(new LogCallback() {
    public void apply(LogMessage message) {
        Log.d(TAG, message.getText());
    }
});
// iOS
[MobileFFmpegConfig setLogDelegate:self];

- (void)logCallback:(long)executionId :(int)level :(NSString*)message {
    NSLog(@"%@", message);
}

统计回调

// Android
Config.enableStatisticsCallback(new StatisticsCallback() {
    public void apply(Statistics newStatistics) {
        // 处理统计信息
    }
});
// iOS
[MobileFFmpegConfig setStatisticsDelegate:self];

- (void)statisticsCallback:(Statistics *)newStatistics {
    // 处理统计信息
}

执行管理

取消执行

// 取消所有执行
FFmpeg.cancel();

// 取消特定执行
FFmpeg.cancel(executionId);
// iOS
[MobileFFmpeg cancel];  // 取消所有
[MobileFFmpeg cancel:executionId];  // 取消特定

列出当前执行

List<FFmpegExecution> executions = FFmpeg.listExecutions();
NSArray* executions = [MobileFFmpeg listExecutions];

版本兼容性

Mobile-FFmpeg 从 4.2 版本开始与 FFmpeg 版本号对齐。以下是一些关键版本对应关系:

MobileFFmpeg 版本 FFmpeg 版本 发布日期
4.4 4.4-dev-416 2020-07
4.3.2 4.3-dev-2955 2020-04
3.1 4.1-10 2018-12
2.0 4.0.1 2018-06

最佳实践

  1. 选择合适的包:根据项目需求选择最小化的包,减少应用体积
  2. 错误处理:始终检查命令执行的返回码
  3. 资源清理:长时间运行的命令要提供取消机制
  4. 日志记录:在生产环境中合理配置日志级别
  5. 性能监控:使用统计回调监控处理进度

结语

Mobile-FFmpeg 为移动应用提供了强大的多媒体处理能力,开发者可以轻松实现音视频转码、编辑、分析等功能。通过合理使用其提供的API和功能,可以构建出功能丰富、性能优异的移动多媒体应用。