- 集成 ffmpeg-kit-full-gpl 6.0.3(arm64),用 libx264 重编码修复 .h264 缺 SPS/PPS 导致的播放卡死 - 新增 VideoDownloadPlayService/VideoCacheManager,.mp4 直下直播、.h264 下载后转 mp4 缓存,转码完成后删除临时 .h264 - FFmpegKitBridge 走主线程 JNI 调用规避 IL2CPP 后台线程 FindClass 不稳定 - 视频列表按缓存状态显示 下载/播放 按钮,下载中亮色条显示百分比;播放面板原下载按钮改为保存到相册
53 lines
2.3 KiB
Markdown
53 lines
2.3 KiB
Markdown
# FFmpegKit (full-gpl) 归档与放置说明
|
|
|
|
本项目用 ffmpeg-kit 在 Android 端做 H.264/裸流 → MP4 转码(libx264 重编码),
|
|
以修复各设备(如 OPPO/MTK)解码器对坏 PPS 流播放卡死的问题。
|
|
|
|
## 依赖来源
|
|
|
|
- Maven: `dev.ffmpegkit-maintained:ffmpeg-kit-full-gpl:6.0.3`
|
|
(原 `com.arthenica:ffmpeg-kit-full` 已于 2025-04 从 Maven Central 下架;`full` 不含 x264,必须用 `full-gpl`)
|
|
- FFmpeg 内部版本: **n6.1.6**
|
|
- 含 libx264(重编码用)
|
|
- 仅 arm64-v8a(项目只发布 arm64)
|
|
|
|
本目录 `ffmpeg-kit-full-gpl-6.0.3.aar` 即下载的原始包(36.6MB),作为来源/备份。
|
|
|
|
## 运行时文件位置(勿乱动!)
|
|
|
|
Unity Android 对 native 库与 jar 的打包位置有强约束,放错地方会导致 APK 缺少
|
|
native 库或类,运行时 `UnsatisfiedLinkError`/`ClassNotFoundException`。请**保持现状**:
|
|
|
|
- `.so` → `Assets/Plugins/Android/jniLibs/arm64-v8a/`
|
|
- libavcodec / libavdevice / libavfilter / libavformat / libavutil
|
|
- libswresample / libswscale
|
|
- libffmpegkit / libffmpegkit_abidetect
|
|
- **libc++_shared.so(必带,full 构建的 C++ 运行时依赖)**
|
|
- 类包 → `Assets/Plugins/Android/libs/ffmpeg-kit-classes.jar`
|
|
(由 `Assets/Plugins/Android/mainTemplate.gradle` 的
|
|
`implementation files('libs/ffmpeg-kit-classes.jar')` 引用)
|
|
|
|
## 调用链
|
|
|
|
- C# 桥接: `Assets/Scripts/Video/FFmpegKitBridge.cs`
|
|
- `#if UNITY_ANDROID && !UNITY_EDITOR`(Android 专用)
|
|
- JNI 必须在 Unity 主线程执行:经由 `MainThreadDispatcher.cs` 派发
|
|
- 转码参数: `-c:v libx264 -preset ultrafast -crf 23 -pix_fmt yuv420p -movflags +faststart -fflags +genpts`
|
|
- 视频页: `Assets/Scripts/UI/Pages/VideoPage/VideoPageCtrl.cs`
|
|
- 下载/播放服务: `Assets/Scripts/Video/VideoDownloadPlayService.cs`
|
|
|
|
## 升级方法
|
|
|
|
1. 重新下载目标版本 aar。
|
|
2. 解压,用 `jni/arm64-v8a/*.so` 整体覆盖上面 jniLibs 目录(含 libc++_shared.so)。
|
|
3. 用 aar 内 `classes.jar` 覆盖 libs/ 下的 jar。
|
|
4. clean 重建 release(不要增量)。
|
|
|
|
## 备注
|
|
|
|
- x264 为 GPL,与服务端已用的 libx264 转码策略一致,License 口径以项目自身为准。
|
|
- 播放验证关键日志:
|
|
- `[VideoDownloadPlayService]` -> `[FFmpegKitBridge] args`(确认含 `libx264`)
|
|
- `rc=` `isSuccess=True`、`[ProbeMp4Info]` mp4 正常尺寸
|
|
- `[vf-3]` VideoPrepared 的 frameCount / length 正常
|
|
- 播放过程不应再出现长时间卡帧。 |