Flutter集成FFmpeg包实现RTSP视频流录制时遇编译错误求助
嘿,最近在Flutter项目里用FFmpeg包做RTSP视频流录制的时候,踩了个编译错误的坑,折腾了好一会儿才搞定,把问题和解决方法分享给大家,希望能帮到同处境的朋友。
先给大家看看我碰到的错误信息:
编译时弹出的错误内容:
Launching lib\main.dart on SM X115 in debug mode... C:\Users\hp\AppData\Local\Pub\Cache\hosted\pub.dev\ffmpeg_kit_flutter_full_gpl-6.0.3\android\src\main\java\com\arthenica\ffmpegkit\flutter\FFmpegKitFlutterPlugin.java:157: error: cannot find symbol public static void registerWith(final io.flutter.plugin.common.PluginRegistry.Registrar registrar) { ^ symbol: class Registrar location: interface PluginRegistry
问题原因
这个错误其实就是版本兼容问题:我用的FFmpeg Kit版本(6.0.3)里的代码还在使用旧的Flutter Android插件注册方式——Registrar接口,但这个接口在新版的Flutter或者Android Gradle插件里已经被废弃/移除了,所以编译器找不到这个类,直接报错。
解决方法
我试了几个方案,都能解决问题,大家可以根据自己的项目情况选:
方案一:升级FFmpeg Kit到最新稳定版
新版的FFmpeg Kit已经适配了新的Flutter插件注册规范,不再依赖Registrar了。打开项目根目录的pubspec.yaml,把FFmpeg的依赖改成最新版(可以查pub.dev上的最新稳定版号,比如当前是6.1.0左右):ffmpeg_kit_flutter_full_gpl: ^6.1.0然后执行
flutter pub get更新依赖,再跑flutter clean清理缓存,重新编译应该就没问题了。方案二:调整Android项目配置兼容旧接口
如果不想升级FFmpeg包,那可以调整Android端的配置:- 打开
android/app/build.gradle,把compileSdkVersion和targetSdkVersion调整到33以上(适配新版Android规范); - 打开
android/build.gradle,把ext.kotlin_version改成较新的版本,比如1.8.0; - 同样执行
flutter clean后重新编译。
- 打开
方案三:降级FFmpeg Kit到兼容旧Flutter版本的版本
如果你的Flutter SDK版本比较旧,不想升级Flutter的话,可以降级FFmpeg Kit到5.x的版本,比如5.1.0,在pubspec.yaml里指定:ffmpeg_kit_flutter_full_gpl: ^5.1.0然后执行
flutter pub get更新,清理缓存后编译即可。
备注:内容来源于stack exchange,提问作者Brijesh Gangwar

