一個非常好的開源項目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、不需要配置文件進行初始化(已完成,下個版本中提供)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM