All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.novelweb.video.command.assemble.CommandAssembleImpl Maven / Gradle / Ivy

package cn.novelweb.video.command.assemble;

import cn.hutool.core.map.MapUtil;
import cn.novelweb.tool.upload.fastdfs.utils.Log;
import org.apache.commons.lang.StringUtils;

import java.util.Map;

/**
 * 

默认命令组装器的实现

*

2020-02-24 22:36

* * @author Dai Yuanchuan **/ public class CommandAssembleImpl implements CommandAssemble { @Override public String assemble(Map paramMap) { try { if (MapUtil.isEmpty(paramMap)) { Log.debug("命令值参数为NULL,组装命令失败"); return null; } // 获取 Fast Forward Moving Picture Experts Group 路径 String path = paramMap.get("FFMPEGPath"); if (StringUtils.isNotBlank(path)) { // -i:输入流地址或者文件绝对地址 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(path); stringBuilder.append(" -i "); // 是否有必输项:输入地址,输出地址,应用名. // twoPart:0-推一个元码流;1-推一个自定义推流;2-推两个流(一个是自定义,一个是元码) boolean isRequiredField = paramMap.containsKey("input") && paramMap.containsKey("output") && paramMap.containsKey("appName") && paramMap.containsKey("twoPart"); if (isRequiredField) { String input = paramMap.get("input"); String output = paramMap.get("output"); String appName = paramMap.get("appName"); String twoPart = paramMap.get("twoPart"); String codec = paramMap.get("codec"); codec = (codec == null ? "h264" : codec); // 输入地址 stringBuilder.append(input); // 当twoPart为0时,只推一个元码流 boolean isZero = "0".equals(twoPart); if (isZero) { stringBuilder.append(" -vcodec ").append(codec) .append(" -f flv -an ").append(output).append(appName); } else { // -f:转换格式,默认flv String fmt = paramMap.get("fmt"); if (StringUtils.isNotBlank(fmt)) { stringBuilder.append(" -f ").append(fmt); } // -r :帧率,默认25;-g :帧间隔 String fps = paramMap.get("fps"); if (StringUtils.isNotBlank(fps)) { stringBuilder.append(" -r ").append(fps) .append(" -g ").append(fps); } // -s 分辨率 默认是原分辨率 String rs = paramMap.get("rs"); if (StringUtils.isNotBlank(rs)) { stringBuilder.append(" -s ").append(rs); } // 输出地址 + 发布的应用名 stringBuilder.append(" -an ").append(output).append(appName); // 当twoPart为2时推两个流,一个自定义流,一个元码流 boolean isTwo = "2".equals(twoPart); if (isTwo) { // 一个视频源,可以有多个输出,第二个输出为拷贝源视频输出,不改变视频的各项参数并且命名为应用名+HD stringBuilder.append(" -vcodec copy -f flv -an ") .append(output).append(appName).append("HD"); } } return stringBuilder.toString(); } } } catch (Exception e) { e.printStackTrace(); return null; } return null; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy