项目地址:https://github.com/eguid/FFCH4J

FFCH4J(原用名:FFmpegCommandHandler4java)

FFCH4J项目全称:FFmpeg命令处理器,鉴于很多小伙伴们反馈原名太长,改为‘FFCH4J’

说明

java封装的提供ffmpeg命令执行、停止、查询功能的简单管理器 。 FFCH4j不仅仅只支持ffmpeg命令,还支持执行多平台的命令行指令,不管是执行linux命令还是windows的命令行都是手到擒来(注意:本项目并未屏蔽某些敏感操作,比如rm -rf,当然这会产生一些风险,还请注意规避)。 除了保证命令行运行,还拥有独立的轻量级的保活线程来重启因为异常故障导致中断的任务。

特性

零依赖(不依赖任何第三方jar包,只需要java运行环境即可运行),完全接口化(所有内部组件都实现了完全接口化,开发人员可以方便的修改和扩展程序,比如自行实现持久层接口来替换默认的持久层)

版本说明

本次更新说明
1、配置文件增加保活线程和回调地址
2、新增命令行流式组装执行器
3、新增保活线程处理器,用于在后台保证任务可靠运行,如果任务中途中断,则立即强制重启任务,定制需要实现OutHandlerMethod接口并注入到命令行管理器
4、新增事件回调,将下个版本将整合进主程序中 上个版本更新说明
1、本次更新主要针对配置文件的加载优化,详情见下面的使用说明
初始化FFmpegManager时会自动查找loadFFmpeg.properties配置文件
配置文件的加载方式如下:
(1)、javaSE项目会自动从项目根目录加载
(2)、javaEE项目会自动从classes目录下加载(编写web项目的src目录下)
(3)、如果上述位置都没有找到配置文件,会自动加载默认配置,默认的配置文件在config包下的defaultFFmpegConfig.properties中 2、支持自定义的消息输出 上个版本更新说明
3、增加一个String start(String id,String commond,boolean hasPath)接口,用于区分是否使用配置文件中的绝对路径,如果为false,请务必保证ffmpeg的路径可以正确加载
4、增加一个debug配置,用于判断是否输出关键位置的debug消息

基于

本项目基于jdk1.7开发,FFmpeg各版本支持的命令请参考FFmpeg官方文档

使用说明

	 //18.12.02新版本创建方式
CommandManager manager=new CommandManagerImpl(10); //老版本创建方式:
FFmpegManager manager=new FFmpegManagerImpl(10);
//当然也可以这样
FFmpegManager manager=new FFmpegManagerImpl();//这样会从配置文件中读取size的值作为初始化参数
//组装命令
Map map = new HashMap();
map.put("appName", "test123");
map.put("input","rtsp://admin:admin@192.168.2.236:37779/cam/realmonitor?channel=1&subtype=0");
map.put("output", "rtmp://192.168.30.21/live/");
map.put("codec","h264");
map.put("fmt", "flv");
map.put("fps", "25");
map.put("rs", "640x360");
map.put("twoPart","2");
//执行任务,id就是appName,如果执行失败返回为null
String id=manager.start(map);
System.out.println(id);
//通过id查询
TaskEntity info=manager.query(id);
System.out.println(info);
//查询全部
Collection<TaskEntity> infoList=manager.queryAll();
System.out.println(infoList); //停止id对应的任务
manager.stop(id); //流式命令行组装执行
manager.start("test1", CommandBuidlerFactory.createBuidler()
.add("ffmpeg").add("-i","rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov")
.add("-rtsp_transport","tcp")
.add("-vcodec","copy")
.add("-acodec","copy")
.add("-f","flv")
.add("-y").add("rtmp://eguid.cc/rtmp/test1"));
manager.stop("test1");//停止 //执行原生ffmpeg命令(不包含ffmpeg的执行路径,该路径会从配置文件中自动读取)
manager.start("test1", "ffmpeg -i input_file -vcodec copy -an output_file_video");
//包含完整ffmpeg执行路径的命令
manager.start("test2,","d:/ffmpeg/ffmpeg -i input_file -vcodec copy -an output_file_video",true);
//停止全部任务
manager.stopAll(); //用于销毁保活线程等
manager.destory();

关于FFmpegCommandHandler接口调用/使用方式也可以参考readme文件

下个版本构想

1、新增控制台,web控制台和客户端控制台,可以使用web来管理任务信息查看、发布任务、停止任务等
2、新增事件回调、命令的执行、停止、中断、保活等都将会使用外部接口回调通知或确认操作
目前事件回调已经完成,等待下个版本整合进主程序,保活处理器已经完成(已完成,下个版本中提供)
3、提供web方式的api接口,方便远程调用api来控制
4、不需要配置文件进行初始化(已完成,下个版本中提供)

一个非常好的开源项目FFmpeg命令处理器FFCH4J的更多相关文章

  1. 准备开一个地图SDK的开源项目

    最近有点空闲时间了, 准备开一个地图SDK的开源项目, 现在的地图SDK已经有很多了, 再做一个跟重新发明个轮子差不多, 但还想做的原因是想在别的轮子的基础上造个轮子... 初步设想是基于开源的地图渲 ...

  2. 我发起并创立了一个 Javascript 前端库 开源项目 jWebForm

    在线演示地址: ( 在线演示 云平台 由 Kooboo 提供  https://www.kooboo.com/ ) 按钮:      http://iwebform.kgeking.kooboo.si ...

  3. 一个P2P点播直播开源项目:P2PCenter

    最近跟着公司的项目走,我也研究了不少东西,尤其是在P2P方面,广泛涉猎各种开源项目,尤其是国外的开源项目,意外的发现了一个国内的项目,做的还不错,推荐一下.---------------------使 ...

  4. 一个基于 Vue3 的开源项目,3个月时间 star 终于破千!

    本文主要是对如何做开源项目的一些思考. 前文回顾: <Vue3 来了,Vue3 开源商城项目重构计划正式启动!> <一个基于 Vue 3 + Vant 3 的开源商城项目> 关 ...

  5. 一个基于DDD的开源项目,各种技术!

    基于asp.net mvc + DDD 构架的开源.net cms系统. 运行截图: 特性: 跨平台 支持Windows.Linux.MacOX运行.linux运行案例:http://blog.ops ...

  6. 我发起并创立了一个 C 语言编译器 开源项目 InnerC

    本文是 VMBC / D#  项目 的 系列文章, 有关 VMBC / D# ,  见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>)  https: ...

  7. 我发起了一个 网格计算 协议 开源项目 GridP

    GridP  是   Grid Protocol   的 全称  . 我在 <关于软件产业的两个契机>  https://www.cnblogs.com/KSongKing/p/95319 ...

  8. 我发起并创立了一个 EPWA 的 开源项目

    EPWA ,  是  Easy PWA  的 意思, PWA 取自于 Google 的 PWA, EPWA   是一个用   C#  Cef  Html  js  css   开发 桌面程序 的 架构 ...

  9. 开源项目SuperSocket的学习笔记

    近几日想在一个项目中引进一个Socket Server,用来接收客户端发送的命令消息并根据具体的业务逻辑对消息进行处理,然后转发给其它在线的客户端.因为以前在博客园关注过江大渔开源的SuperSock ...

随机推荐

  1. 《我是一只IT小小鸟》读书笔记——第七周

    我是一只IT小小鸟,每一个程序员都是从这样的阶段成长起来的,问题是是否能一开始就找到正确的路径,少走弯路.本书收集了许多年轻程序员从大学开始到就业的成长之路,十分有指导价值也很让人深思. 切忌急功近利 ...

  2. 一行Python代码画心型

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yanlaifan/article/deta ...

  3. 【OGG】OGG简单配置双向复制(三)

    [OGG]OGG简单配置双向复制(三) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O ...

  4. 异常详细信息: System.MissingMethodException: 无法创建抽象类。

    asp.net mvc 在使用post向后端传送json数据时报异常,在路由配置中添加如下即可 public static void RegisterRoutes(RouteCollection ro ...

  5. 云计算与大数据实验:Hbase shell操作用户表

    [实验目的] 1)了解hbase服务 2)学会hbase shell命令操作用户表 [实验原理] HBase是一个分布式的.面向列的开源数据库,它利用Hadoop HDFS作为其文件存储系统,利用Ha ...

  6. linux服务器中查看图片

    在图片目录下使用命令行:基于python3 python -m http.server 1 python2可能是: python -m SimpleHTTPServer 1 然后在浏览器输入服务器IP ...

  7. Python入门篇-StringIO和BytesIO

    Python入门篇-StringIO和BytesIO 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringIO(用于文本处理) 1>.使用案例 #!/usr/bin ...

  8. X509IncludeOption 枚举

    X509IncludeOption 枚举 指定 X.509 数据应包括 X.509 证书链的哪些内容. EndCertOnly 2 X.509 链信息中仅包括最终证书. ExcludeRoot 1 包 ...

  9. js获取ip内网地址

    <script type="text/javascript"> function getUserIP(onNewIP) { // onNewIp - your list ...

  10. 一套兼容win和Linux的PyTorch训练MNIST的算法代码(CNN)

    第一次,调了很久.它本来已经很OK了,同时适用CPU和GPU,且可正常运行的. 为了用于性能测试,主要改了三点: 一,每一批次显示处理时间. 二,本地加载测试数据. 三,兼容LINUX和WIN 本地加 ...