FFmpegKit Flutter 平台接口层演进解析:ffmpeg_kit_flutter_platform_interface 0.1.0 到 0.2.1 的关键 API 变迁
发布时间:2026/9/17 23:47:42来源:尧图网络
FFmpegKit Flutter 平台接口层演进解析ffmpeg_kit_flutter_platform_interface 0.1.0 到 0.2.1 的关键 API 变迁【免费下载链接】ffmpeg-kitFFmpeg Kit for applications. Supports Android, Flutter, iOS, Linux, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.项目地址: https://gitcode.com/GitHub_Trending/ff/ffmpeg-kit本篇文章以ffmpeg_kit_flutter_platform_interfaceFFmpegKit 的 Flutter 平台接口包的 CHANGELOG.md 为脉络梳理该插件自初始发布以来三个版本0.1.0、0.2.0、0.2.1的核心变更execute系列方法的落地、getSafParameter的签名合并、getMediaInformation的引入与修复以及 MediaInformation 会话列表能力的补齐。读完本文你将理解 FFmpegKit 在 Flutter 侧平台接口层 MethodChannel 实现的架构分工并掌握 0.2.x 之后编写 FFmpeg/FFprobe 调用代码时的正确 API 形态。平台接口层在整个 Flutter 插件中的定位FFmpegKit 的 Flutter 插件采用了 Dart 官方推荐的platform interface 模式业务代码所在的主包ffmpeg_kit_flutter源码位于 flutter/flutter/lib不直接接触原生通道而是面向一个抽象接口编程这个抽象接口就被独立抽取为ffmpeg_kit_flutter_platform_interface包位于 flutter/flutter_platform_interface其 pubspec.yaml 声明依赖plugin_platform_interface: ^2.0.2版本号为0.2.1。接口层的核心是抽象类FFmpegKitPlatformffmpeg_kit_flutter_platform_interface.dart。它通过PlatformInterface.verifyToken机制保证实例只能被合法实现替换并持有一个默认实现MethodChannelFFmpegKitabstract class FFmpegKitPlatform extends PlatformInterface { FFmpegKitPlatform() : super(token: _token); static final Object _token Object(); static FFmpegKitPlatform _instance MethodChannelFFmpegKit(); static FFmpegKitPlatform get instance _instance; static set instance(FFmpegKitPlatform instance) { PlatformInterface.verifyToken(instance, _token); _instance instance; } // 其余为一系列以 throw UnimplementedError(...) 为默认实现的抽象方法 }默认实现 method_channel_ffmpeg_kit_flutter.dart 建立了一个名为flutter.arthenica.com/ffmpeg_kit的MethodChannel把接口层的每个方法逐一映射为原生方法调用。例如archDetectGetArch()对应通道方法getArchffmpegKitCancel()对应cancelffmpegKitListSessions()对应getFFmpegSessions。这种接口抽象 通道实现的双层结构使得未来即使更换通信机制如改用 FFI业务层代码也无需改动。0.1.0初始发布确立接口层骨架版本0.1.0是平台接口包的首次发布。从当前源码可以推断接口层骨架在此版本已经定型以AbstractSession会话创建、日志、状态查询、FFmpegKit取消、会话列表、FFmpegKitConfig重定向、字体目录、管道、环境变量、信号处理、会话历史三大类方法为基本盘。此时主包ffmpeg_kit_flutter中FFmpegKit.execute、FFprobeKit.execute等 API 已经通过这个骨架工作对应主包源码见 ffmpeg_kit.dart 与 ffprobe_kit.dart。0.2.0一补齐 execute 执行方法0.2.0的第一项变更是Implements execute methods。在此之前接口层对于会话的执行动作覆盖不完整此版本将同步/异步执行方法完整落地到平台接口中形成以下四组通道调用对应 ffmpeg_kit_flutter_platform_interface.dart接口层方法原生通道方法语义ffmpegKitConfigFFmpegExecute(sessionId)ffmpegSessionExecute同步执行 FFmpeg 会话ffmpegKitConfigAsyncFFmpegExecute(sessionId)asyncFFmpegSessionExecute异步执行 FFmpeg 会话ffmpegKitConfigFFprobeExecute(sessionId)ffprobeSessionExecute同步执行 FFprobe 会话ffmpegKitConfigAsyncFFprobeExecute(sessionId)asyncFFprobeSessionExecute异步执行 FFprobe 会话MethodChannel 实现中这些方法把sessionId作为参数传给原生层method_channel_ffmpeg_kit_flutter.dart。从主包的调用链看会话先通过FFmpegSession.create/FFprobeSession.create创建并获得sessionId随后FFmpegKitConfig包装这四个通道方法ffmpeg_kit_config.dart最终暴露给FFmpegKit.execute / executeAsync与FFprobeKit.execute / executeAsyncffprobe_kit.dart。同步与异步的核心区别在于execute返回的Future等待执行完成而executeAsync立即返回必须通过FFmpegSessionCompleteCallback获知结果。0.2.0二getSafParameter 签名合并与 openMode 参数第二项变更是Merges existing getSafParameter methods into a single method with a new openMode parameter即把原本按读写场景拆分的多个 SAF 参数方法合并为一个携带openMode参数的统一方法。这在接口层表现为FutureString? ffmpegKitConfigGetSafParameter( String uriString, String openMode) async { ... }ffmpeg_kit_flutter_platform_interface.dart通道实现将其转发为getSafParameter携带uri与openMode两个参数method_channel_ffmpeg_kit_flutter.dart。主包侧为了保持开发者友好基于该统一方法派生出了三个面向场景的封装ffmpeg_kit_config.dart即 ffmpeg_kit_config.dartgetSafParameterForRead(uriString)—— 固定以r作为openMode把content:前缀的 SAF Uri 转换为可读输入路径getSafParameterForWrite(uriString)—— 固定以w作为openMode转换为可写输出路径getSafParameter(uriString, openMode)—— 通用版本由调用方显式指定打开模式。三者均为Android 专用在非 Android 平台调用会失败且要求 Android API Level ≥ 19更低版本返回空字符串。这是 FFmpegKit 处理 Android 存储访问框架SAF文件的标准入口配合selectDocumentForRead/selectDocumentForWrite原生文件选择器使用。0.2.0三getMediaInformation 与媒体信息会话列表第三、四项变更分别是Adds getMediaInformation method与Adds list media information sessions methods to FFprobeKit它们共同补全了 FFprobeKit 的媒体信息能力getMediaInformation落地接口层新增ffmpegKitConfigGetMediaInformationExecute(sessionId, waitTimeout)与ffmpegKitConfigAsyncGetMediaInformationExecute(sessionId, waitTimeout)ffmpeg_kit_flutter_platform_interface.dart并新增mediaInformationSessionGetMediaInformation(sessionId)用于取回解析结果同文件 L385-L389。MethodChannel 侧对应mediaInformationSessionExecute、asyncMediaInformationSessionExecute与getMediaInformation三个通道方法method_channel_ffmpeg_kit_flutter.dart。FFprobeKit 中的媒体信息会话列表接口层新增ffprobeKitListMediaInformationSessions()通道方法为getMediaInformationSessionsmethod_channel_ffmpeg_kit_flutter.dart主包FFprobeKit.listMediaInformationSessions()直接使用它遍历会话历史ffprobe_kit.dart。主包侧FFprobeKit.getMediaInformation(path)是这一能力的最高层封装ffprobe_kit.dart它内部组装标准 ffprobe 参数final commandArguments [ -v, error, -hide_banner, -print_format, json, -show_format, -show_streams, -show_chapters, -i, path ];随后创建MediaInformationSessionmedia_information_session.dart通过getMediaInformationExecute执行再以mediaInformationSessionGetMediaInformation取回并由FFmpegKitFactory.mapToNullableMediaInformationffmpeg_kit_factory.dart转换为MediaInformation对象。waitTimeout参数用于控制同步等待的时长上限可空时使用原生默认值。同时getMediaInformationAsync、getMediaInformationFromCommand、getMediaInformationFromCommandArguments及各自的 Async 变体也一并可用其中 FromCommand 系列要求命令输出必须为 JSON 格式才能成功解析。0.2.1修复 getMediaInformation 方法签名0.2.1只有一项变更Fixes the signature of getMediaInformation method。对照当前源码接口层mediaInformationSessionGetMediaInformation(int? sessionId)接受的是会话 ID 而非其他对象ffmpeg_kit_flutter_platform_interface.dart通道实现向getMediaInformation传递{sessionId: sessionId}method_channel_ffmpeg_kit_flutter.dart主包FFprobeKit也正是以session.getSessionId()调用它ffprobe_kit.dart。从调用链可以推断该修复统一了getMediaInformation系列 API 的入参约定getMediaInformation同步、getMediaInformationFromCommandArguments及其 Async 版本在完成执行后都经由同一签名方法取回媒体信息。因此如果你的项目曾基于0.2.0早期开发升级到0.2.1时应重点核对与getMediaInformation相关的自定义调用是否与新签名匹配。版本对照与升级要点版本核心变更主包对应 API0.1.0平台接口包初始发布确立接口骨架FFmpegKit.execute、FFprobeKit.execute等基础执行链路0.2.0实现 execute 方法合并getSafParameter并引入openMode新增getMediaInformation为FFprobeKit增加媒体信息会话列表FFmpegKitConfig.getSafParameterForRead/ForWrite/getSafParameter、FFprobeKit.getMediaInformation*、FFprobeKit.listMediaInformationSessions0.2.1修复getMediaInformation方法签名FFprobeKit.getMediaInformationFromCommandArguments*内部取回逻辑对本仓库当前状态而言接口包版本即0.2.1见 pubspec.yaml与主包ffmpeg_kit_flutter6.0.3 配合使用。升级到 0.2.x 后涉及 Android SAF 读写时请优先使用带语义的getSafParameterForRead/getSafParameterForWrite封装而非自行拼装openMode获取媒体信息时注意waitTimeout为可空参数传入null表示不显式超时。理解这三条演进主线即可清晰把握 FFmpegKit Flutter 插件从接口定义到能力完整的迭代路径。【免费下载链接】ffmpeg-kitFFmpeg Kit for applications. Supports Android, Flutter, iOS, Linux, macOS, React Native and tvOS. Supersedes MobileFFmpeg, flutter_ffmpeg and react-native-ffmpeg.项目地址: https://gitcode.com/GitHub_Trending/ff/ffmpeg-kit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网