“虞渠成” 52a3e9f06c feat(video,ios): 接入 iOS 端 ffmpeg-kit 转码桥
- 新增 Assets/Plugins/iOS/FFmpegKitIOS.mm: ObjC++ extern C 桥,调 ffmpeg-kit executeWithArguments 做 libx264 重编码

- FFmpegKitBridge.cs 新增 UNITY_IOS 分支,经 DllImport(__Internal) 后台线程调用,参数与 Android 一致

- 新增 Assets/Plugins/iOS/FFmpegKit/README: 说明需放入的 ffmpegkit.xcframework 及构建来源

- 注: xcframework 需 macOS 自编译(arthenica ffmpeg-kit ios.sh --full --enable-gpl -x),放好前 .mm 链接头文件编译期报错属预期
2026-09-08 14:10:41 +08:00
..

iOS ffmpeg-kit 依赖放置说明

iOS 端转码复用 Android 同一套转码逻辑(libx264 重编码修复坏 PPS 裸流)。 与 Android 的 .so 不同,iOS 用 ffmpeg-kit 的 .xcframework(内含 ffmpegkit.framework), 放在本目录后 Unity 会在构建 Xcode 工程时自动链接

需要放入的文件

把 ffmpeg-kit iOS full-gpl 的 xcframework(含 libx264)解压后放进本目录,例如:

Assets/Plugins/iOS/FFmpegKit/
  └── ffmpegkit.xcframework/
        ├── Info.plist
        ├── ios-arm64_armv7/   (真机切片)
        │   └── ffmpegkit.framework/
        └── ios-arm64_i386_x86_64-simulator/   (模拟器切片,可选)
            └── ffmpegkit.framework/

(不同版本/项目解压出的骨架可能略有不同,只要有一个 ffmpegkit.xcframework 即可。)

版本要求

与 Android 端保持一致,避免转码行为差异:

  • 来源: dev.ffmpegkit-maintained:ffmpeg-kit-full-gpl:6.0.3(FFmpeg n6.1.6,含 libx264)
  • 必须是 full-gpl(含有)的 iOS 包;free/min 等版没有 libx264,转码会失败。
  • 若拿不到完全同 6.0.3 的 iOS 包,取同源(dev.ffmpegkit-maintained)最新 full-gpl 的 iOS 包也可,但需确认 ffmpeg 仍能 -c:v libx264

获取方式(macOS 上操作)

  1. 下载 ffmpeg-kit 维护版发布的 iOS full-gpl xcframework 压缩包 (对应 Android AAR 那个 ffmpeg-kit-full-gpl-6.0.3.aar 的同批次 iOS 产物)。
  2. 解压得到 ffmpegkit.xcframework,拷入本目录。
  3. Unity 重新 import(会自动生成 .meta)。

注:ffmpeg-kit 的 Apple 产物需在 macOS + Xcode 下构建/发布,Windows 无法直接获得, 故本目录仅空占位 + 说明,实际 xcframework 需你在 Mac 上获取后放入。

调用链

  • C# 桥: Assets/Scripts/Video/FFmpegKitBridge.cs#elif UNITY_IOS && !UNITY_EDITOR 分支
    • [DllImport("__Internal")] 调本目录原生符号 FFmpegKitExecuteWithArguments
    • 真正实现是 FFmpegKitIOS.mm(在 Assets/Plugins/iOS/,同目录上级)
  • 下载/播放服务: Assets/Scripts/Video/VideoDownloadPlayService.cs(平台无关,已兼容)

验证

  • 转码日志应出现 [FFmpegKitBridge] args: ... -c:v libx264 ...[FFmpegKitBridge] rc=0
  • 生成的 mp4 可正常播放、不卡帧(与 Android 行为一致)