ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

7个平台一套API:把视频转码搬进应用的FFmpeg-Kit

7个平台一套API:把视频转码搬进应用的FFmpeg-Kit 7个平台一套API把视频转码搬进应用的FFmpeg-Kit【免费下载链接】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-kitFFmpeg-Kit是一个让FFmpeg命令直接在应用里跑起来的封装工具覆盖Android、iOS、Linux、macOS、tvOS、Flutter和React Native共7个平台。对做移动端和跨平台应用的开发者来说它替代了你手动交叉编译FFmpeg原生库这件事装一个依赖就能在应用内做转码、媒体探测和流传输。嵌入FFmpeg进应用的2个真实痛点痛点一你要在App里做视频压缩。Android上得用NDK交叉编译装20多个构建工具4个CPU架构各编一遍一次编译能卡掉一天。用了FFmpeg-Kit之后gradle里一行依赖.aar里是现成的.so文件。痛点二你在终端跑ffmpeg没问题但进了应用要拿返回码、日志和进度命令行输出是一整段文本只能自己正则解析。用了FFmpeg-Kit之后每次执行都会创建一个sessiongetReturnCode()、getLogs()、getStatistics()直接就有。3步跑通第一个转码任务第1步装依赖。以Android为例dependencies { implementation com.arthenica:ffmpeg-kit-full:6.0 }第2步选包。一共有8种包包名按内置的编码库来区分min最小只有FFmpeg自带编码器默认装的https包含gmp和gnutls能播https流full带上全部25个LGPL外部库。要H.264编码就选min-gpl及以上因为x264是GPL许可。第3步跑第一条命令。// 同步执行一次转码 FFmpegSession session FFmpegKit.execute( -i input.mp4 -c:v mpeg4 output.mp4); // 检查返回码 boolean ok ReturnCode.isSuccess(session.getReturnCode());你会看到什么目标路径下多出一个output.mp4session.getOutput()里有一行frame 123 fps28 q28.0 size ...返回码是success说明编码跑完了。能力拆解按你要做的事分同一套预编译二进制能装进各平台的工程里Xcode中的集成界面长这样FFmpeg-Kit二进制装进macOS工程后的结构同一套代码跨Apple各平台场景一压缩和转格式输入一个mp4输出体积更小的mp4。关键参数参数作用移动端建议值-c:v视频编码器libx264需gpl包-preset速度与压缩比fast-crf质量越小越好23-threads线程数2装哪个包决定了你能用哪些编码器对比项minmin-gplfull外部编码库无x264、x265、xvidcore、vid.stab全部25个LGPL库H.264编码不支持支持支持MP3/Opus编码不支持不支持支持许可证LGPL 3.0GPL 3.0LGPL 3.0Android端的封装库源码见android/ffmpeg-kit-android-lib/Linux端是C实现在linux/src/两边API一一对应写命令时不用记两套。FFmpeg-Kit静态库在Xcode项目中的配置界面内置完整音视频编解码器场景二获取媒体信息不用启动ffmpegFFprobeKit直接把媒体信息输出成JSONFFprobeSession probe FFprobeKit.execute(-i input.mp4); String json probe.getJsonOutput(); // 含流数量、编码、时长拿到的是一个JSON字符串几路流、编码名、时长、比特率都在里面做文件信息页面直接解析。场景三实时监控进度换异步执行传3个回调FFmpegSession session FFmpegKit.executeAsync( -i in.mp4 -c:v libx264 out.mp4, s - { /* 会话完成时触发 */ }, l - { /* 实时日志回调 */ }, st - { /* 实时进度回调 */ });最后一个回调能拿到已处理时长、当前帧数和比特率画进度条够用。踩坑4个我遇到过的问题遇到Could not find encoder for libmp3lame。不是ffmpeg没装是装的包里没带lame。换成含lame或shine的包full包直接可用。遇到Command failed with state COMPLETED and rc -1。别只盯着返回码先调session.getFailStackTrace()和session.getOutput()十有八九是输入路径不对或输出目录没有写权限。别把execute放主线程。同步调用会阻塞UI长任务一律用executeAsync在complete回调里更新界面。老设备跑不起来或没有硬件加速。LTS包支持Android API 16、iOS 10但不含VideoToolboxMain包API 24有硬件加速。要兼容旧设备就选LTS接受纯软件编码的速度只面向新设备选Main。注意一点许可证的事默认包都是LGPL 3.0用带-gpl后缀的包时整个bundle受GPL v3.0约束。商业应用优先用min或https包x264/x265涉及专利上线前建议过一遍法务。生态位现状与替代方案README里写得很直白FFmpegKit已官方停止维护历史版本和文档留在仓库里原作者在FFmpegKitNext继续开发只分发源码。想自己编二进制的构建脚本体系还在scripts/目录android.sh、ios.sh、linux.sh等5个脚本各管一个平台直接拷走就能用。FFmpegKitNext原作者的延续项目源码分发跟进更新的FFmpeg版本和平台支持。MobileFFmpeg / flutter_ffmpegFFmpeg-Kit替代掉的前辈项目Maven Central和pub.dev上仍有社区维护的版本可装。系统ffmpeg命令行没有会话和回调体系但也不用操心SDK版本做服务器侧批处理更省事。如果你是做移动端或跨平台应用、需要处理视频的人现在就可以装一个ffmpeg-kit包试试。它让应用自己会转码命令行留给工程师。【免费下载链接】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),仅供参考
返回列表