- 新增 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 链接头文件编译期报错属预期
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 上操作)
- 下载 ffmpeg-kit 维护版发布的 iOS full-gpl xcframework 压缩包
(对应 Android AAR 那个
ffmpeg-kit-full-gpl-6.0.3.aar的同批次 iOS 产物)。 - 解压得到
ffmpegkit.xcframework,拷入本目录。 - 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 行为一致)