新闻详情

新闻详情

首页 / 资讯中心 / 详情

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 变迁
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

eslint-plugin-unicorn 的 comment-content 规则:用 `--fix` 一键规范注释里的品牌名与大小写 2026/9/18 1:39:02

eslint-plugin-unicorn 的 comment-content 规则:用 `--fix` 一键规范注释里的品牌名与大小写

eslint-plugin-unicorn 的 comment-content 规则:用 --fix 一键规范注释里的品牌名与大小写 【免费下载链接】eslint-plugin-unicorn More than 300 powerful ESLint rules 项目地址: https://gitcode.com/GitHub_Trending/es/eslint-plugin-unicorn comment…

阅读更多 →
微信小程序美发预约模板源码改造指南 2026/9/18 1:39:02

微信小程序美发预约模板源码改造指南

简介:本资源是一套开箱即用的美发预约类微信小程序模板源码,面向前端初学者、小程序开发者及中小型美发门店技术负责人,旨在快速搭建专业、轻量、可定制的线上预约服务平台。压缩包共79个文件,含18个JSON配置文件(定义…

阅读更多 →
从人管人到数据管人:京博智慧创新科研管理变革的底层逻辑 2026/9/18 1:39:02

从人管人到数据管人:京博智慧创新科研管理变革的底层逻辑

科研管理这事儿,很多企业说起来重视,做起来却总有一种“管了个寂寞”的感觉。立项的时候轰轰烈烈,结题的时候冷冷清清,中间过程完全靠研发人员的自觉和项目经理的催命连环call。京博控股集团这些年在科研管理上的打法,…

阅读更多 →
大数据治理运营闭环:数据标准、元数据、质量工单与SLA落地 2026/9/18 1:39:02

大数据治理运营闭环:数据标准、元数据、质量工单与SLA落地

简介:这份资源是一套面向企业数据治理从业者、数据架构师与信息化管理人员的《大数据治理运营工作实施整体解决方案》演示文稿,聚焦数据治理从总体设计到平台落地、再到日常运营的完整链路。内容围绕三部分展开:企业数据治理总体方案界定狭义…

阅读更多 →
用python-pptx拆解PPTX模板:安全课件批量重排与校验 2026/9/18 1:39:02

用python-pptx拆解PPTX模板:安全课件批量重排与校验

简介:这份资源是2022年安全生产月主题宣讲课件,面向企业安全管理人员、班组长、安全员以及需要组织安全生产月培训的部门负责人,核心解决的是围绕"遵守安全生产法 当好第一责任人"主题开展全员宣讲与培训时的课件准备问题。压缩包为…

阅读更多 →
Windows OpenSSH SFTP 企业级部署与审计实战指南 2026/9/18 1:36:02

Windows OpenSSH SFTP 企业级部署与审计实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞