一个非常好的开源项目FFmpeg命令处理器FFCH4J
项目地址: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的更多相关文章
- 准备开一个地图SDK的开源项目
最近有点空闲时间了, 准备开一个地图SDK的开源项目, 现在的地图SDK已经有很多了, 再做一个跟重新发明个轮子差不多, 但还想做的原因是想在别的轮子的基础上造个轮子... 初步设想是基于开源的地图渲 ...
- 我发起并创立了一个 Javascript 前端库 开源项目 jWebForm
在线演示地址: ( 在线演示 云平台 由 Kooboo 提供 https://www.kooboo.com/ ) 按钮: http://iwebform.kgeking.kooboo.si ...
- 一个P2P点播直播开源项目:P2PCenter
最近跟着公司的项目走,我也研究了不少东西,尤其是在P2P方面,广泛涉猎各种开源项目,尤其是国外的开源项目,意外的发现了一个国内的项目,做的还不错,推荐一下.---------------------使 ...
- 一个基于 Vue3 的开源项目,3个月时间 star 终于破千!
本文主要是对如何做开源项目的一些思考. 前文回顾: <Vue3 来了,Vue3 开源商城项目重构计划正式启动!> <一个基于 Vue 3 + Vant 3 的开源商城项目> 关 ...
- 一个基于DDD的开源项目,各种技术!
基于asp.net mvc + DDD 构架的开源.net cms系统. 运行截图: 特性: 跨平台 支持Windows.Linux.MacOX运行.linux运行案例:http://blog.ops ...
- 我发起并创立了一个 C 语言编译器 开源项目 InnerC
本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>) https: ...
- 我发起了一个 网格计算 协议 开源项目 GridP
GridP 是 Grid Protocol 的 全称 . 我在 <关于软件产业的两个契机> https://www.cnblogs.com/KSongKing/p/95319 ...
- 我发起并创立了一个 EPWA 的 开源项目
EPWA , 是 Easy PWA 的 意思, PWA 取自于 Google 的 PWA, EPWA 是一个用 C# Cef Html js css 开发 桌面程序 的 架构 ...
- 开源项目SuperSocket的学习笔记
近几日想在一个项目中引进一个Socket Server,用来接收客户端发送的命令消息并根据具体的业务逻辑对消息进行处理,然后转发给其它在线的客户端.因为以前在博客园关注过江大渔开源的SuperSock ...
随机推荐
- nginx小结
1.nginx下部署网站 网站为:http://10.1.75.177:8000 nginx端口为80 配置如下: user nginx; worker_processes auto; error_l ...
- 【RAC】 RAC For W2K8R2 安装--安装过程中碰到的问题(九)
[RAC] RAC For W2K8R2 安装--安装过程中碰到的问题(九) 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...
- Linux环境宿主机进入Docker容器、连接数据库、复制文件
我们默认mysql容器已经正常启动,以下为关键命令.1.docker exec -it mysql bash : 进入已经正常启动的容器bash中,mysql是指实际容器名称.2.mysql -uro ...
- python写一些简单的tcp服务器和客户端
代码贴上,做个记录 TcpClient # -*- coding:utf-8 -*- import socket target_host = "127.0.0.1" #服务器端地址 ...
- 【转】GnuPG使用介绍
一.什么是 GPG 要了解什么是 GPG,就要先了解 PGP. 1991 年,程序员 Phil Zimmermann 为了避开政府监视,开发了加密软件 PGP.这个软件非常好用,迅速流传开来,成了许多 ...
- 动态规划——背包问题python实现(01背包、完全背包、多重背包)
目录 01背包问题 完全背包问题 多重背包问题 参考: 背包九讲--哔哩哔哩 背包九讲 01背包问题 01背包问题 描述: 有N件物品和一个容量为V的背包. 第i件物品的体积是vi,价值是wi. 求解 ...
- QT 子文件的建立(pri)
QT 在做项目的时候有时会有许多不同种类的文件,如果这些文件放在一起会显得特别乱,我们可以将文件用文件夹分类,这样会比较有条理. 1. 在项目文件夹下建立新的文件夹,并在文件夹中添加文本文档将后缀改为 ...
- PyInstaller库,打包成exe基本介绍
一.pyinstaller简介 Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各 ...
- python变量选中后高亮显示
file>settings>editor>color scheme>general>code>identifier under caret>backgroun ...
- Windows10安装Redis过程
下载 Redis下载地址:https://github.com/microsoftarchive/redis/releases 以3.2.100版本为例,下载Redis-x64-3.2.100.zip ...