package cc.eguid.FFmpegCommandManager;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import cc.eguid.FFmpegCommandManager.dao.TaskDao;
import cc.eguid.FFmpegCommandManager.dao.TaskDaoImpl;
import cc.eguid.FFmpegCommandManager.entity.TaskEntity;
import cc.eguid.FFmpegCommandManager.service.CommandAssembly;
import cc.eguid.FFmpegCommandManager.service.CommandAssemblyImpl;
import cc.eguid.FFmpegCommandManager.service.DefaultOutHandlerMethod;
import cc.eguid.FFmpegCommandManager.service.OutHandlerMethod;
import cc.eguid.FFmpegCommandManager.service.TaskHandler;
import cc.eguid.FFmpegCommandManager.service.TaskHandlerImpl;
/**
* FFmpeg命令操作管理器
*
* @author eguid
* @since jdk1.7
* @version 2017年10月13日
*/
public class FFmpegManagerImpl implements FFmpegManager {
/**
* 任务持久化器
*/
private TaskDao taskDao = null;
/**
* 任务执行处理器
*/
private TaskHandler taskHandler = null;
/**
* 命令组装器
*/
private CommandAssembly commandAssembly = null;
/**
* 任务消息处理器
*/
private OutHandlerMethod ohm = null;
public FFmpegManagerImpl() {
this(null);
}
public FFmpegManagerImpl(Integer size) {
init(size);
}
/**
* 初始化,如果几个处理器未注入,则使用默认处理器
*
* @param size
*/
public void init(Integer size) {
if (config == null) {
System.err.println("配置文件加载失败!配置文件不存在或配置错误");
return;
}
if (size == null) {
size = config.getSize() == null ? 10 : config.getSize();
}
if (this.ohm == null) {
this.ohm = new DefaultOutHandlerMethod();
}
if (this.taskDao == null) {
this.taskDao = new TaskDaoImpl(size);
}
if (this.taskHandler == null) {
this.taskHandler = new TaskHandlerImpl(this.ohm);
}
if (this.commandAssembly == null) {
this.commandAssembly = new CommandAssemblyImpl();
}
}
public void setTaskDao(TaskDao taskDao) {
this.taskDao = taskDao;
}
public void setTaskHandler(TaskHandler taskHandler) {
this.taskHandler = taskHandler;
}
public void setCommandAssembly(CommandAssembly commandAssembly) {
this.commandAssembly = commandAssembly;
}
public void setOhm(OutHandlerMethod ohm) {
this.ohm = ohm;
}
/**
* 是否已经初始化
*
* @param 如果未初始化时是否初始化
* @return
*/
public boolean isInit(boolean b) {
boolean ret = this.ohm == null || this.taskDao == null || this.taskHandler == null|| this.commandAssembly == null;
if (ret && b) {
init(null);
}
return ret;
}
@Override
public String start(String id, String command) {
return start(id, command, false);
}
@Override
public String start(String id, String command, boolean hasPath) {
if (isInit(true)) {
System.err.println("执行失败,未进行初始化或初始化失败!");
return null;
}
if (id != null && command != null) {
TaskEntity tasker = taskHandler.process(id, hasPath ? command : config.getPath() + command);
if (tasker != null) {
int ret = taskDao.add(tasker);
if (ret > 0) {
return tasker.getId();
} else {
// 持久化信息失败,停止处理
taskHandler.stop(tasker.getProcess(), tasker.getThread());
if (config.isDebug())
System.err.println("持久化失败,停止任务!");
}
}
}
return null;
}
@Override
public String start(Map<String, String> assembly) {
// ffmpeg环境是否配置正确
if (config == null) {
System.err.println("配置未正确加载,无法执行");
return null;
}
// 参数是否符合要求
if (assembly == null || assembly.isEmpty() || !assembly.containsKey("appName")) {
System.err.println("参数不正确,无法执行");
return null;
}
String appName = (String) assembly.get("appName");
if (appName != null && "".equals(appName.trim())) {
System.err.println("appName不能为空");
return null;
}
assembly.put("ffmpegPath", config.getPath() + "ffmpeg");
String command = commandAssembly.assembly(assembly);
if (command != null) {
return start(appName, command, true);
}
return null;
}
@Override
public boolean stop(String id) {
if (id != null && taskDao.isHave(id)) {
if (config.isDebug())
System.out.println("正在停止任务:" + id);
TaskEntity tasker = taskDao.get(id);
if (taskHandler.stop(tasker.getProcess(), tasker.getThread())) {
taskDao.remove(id);
return true;
}
}
System.err.println("停止任务失败!id=" + id);
return false;
}
@Override
public int stopAll() {
Collection<TaskEntity> list = taskDao.getAll();
Iterator<TaskEntity> iter = list.iterator();
TaskEntity tasker = null;
int index = 0;
while (iter.hasNext()) {
tasker = iter.next();
if (taskHandler.stop(tasker.getProcess(), tasker.getThread())) {
taskDao.remove(tasker.getId());
index++;
}
}
if (config.isDebug())
System.out.println("停止了" + index + "个任务!");
return index;
}
@Override
public TaskEntity query(String id) {
return taskDao.get(id);
}
@Override
public Collection<TaskEntity> queryAll() {
return taskDao.getAll();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
nginx、ffmpeg转流文件源码
共44个文件
java:18个
class:18个
properties:4个
5星 · 超过95%的资源 需积分: 50 174 下载量 122 浏览量
2018-11-05
16:58:54
上传
评论 7
收藏 41KB RAR 举报
温馨提示
nginx、ffmpeg转流文件源码。多个同时转流。详情看代码 nginx、ffmpeg转流文件源码。多个同时转流。详情看代码 nginx、ffmpeg转流文件源码。多个同时转流。详情看代码 nginx、ffmpeg转流文件源码。多个同时转流。详情看代码 nginx、ffmpeg转流文件源码。多个同时转流。详情看代码
资源推荐
资源详情
资源评论
收起资源包目录
FFmpegCommandHandler4java-master.rar (44个子文件)
FFmpegCommandHandler4java-master
bin
cc
eguid
FFmpegCommandManager
dao
TaskDao.class 534B
TaskDaoImpl.class 2KB
config
FFmpegConfig.class 1KB
defaultFFmpegConfig.properties 353B
FFmpegManager.class 1KB
test
Test.class 4KB
web
ManagerController.class 344B
service
DefaultOutHandlerMethod.class 732B
OutHandler.class 3KB
CommandAssembly.class 302B
TaskHandlerImpl.class 3KB
OutHandlerMethod.class 209B
TaskHandler.class 372B
CommandAssemblyImpl.class 2KB
entity
TaskEntity.class 1KB
util
ReflectUtil.class 6KB
PropertiesUtil.class 5KB
CommonUtil.class 2KB
FFmpegManagerImpl.class 7KB
loadFFmpeg.properties 236B
.settings
org.eclipse.core.resources.prefs 189B
org.eclipse.jdt.core.prefs 598B
src
cc
eguid
FFmpegCommandManager
dao
TaskDao.java 1KB
TaskDaoImpl.java 1KB
config
FFmpegConfig.java 603B
defaultFFmpegConfig.properties 353B
test
Test.java 5KB
FFmpegManager.java 2KB
FFmpegManagerImpl.java 5KB
web
ManagerController.java 129B
service
DefaultOutHandlerMethod.java 556B
TaskHandler.java 855B
CommandAssembly.java 333B
OutHandler.java 2KB
TaskHandlerImpl.java 2KB
CommandAssemblyImpl.java 3KB
OutHandlerMethod.java 282B
entity
TaskEntity.java 718B
util
PropertiesUtil.java 4KB
CommonUtil.java 1KB
ReflectUtil.java 5KB
loadFFmpeg.properties 236B
.project 379B
.classpath 302B
共 44 条
- 1
w_小小泽
- 粉丝: 28
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AIS2024 valid
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页