前台获取数据
第一步从前台获取需要用到的数据,包括节目名称,帧率,亮度,RGB的值。
后台拿到数据需要先对文件名称进行校验,如节目名称已存在则直接抛出异常,就不需要进行生成图片等操作,提高系统效率。
ObjAnimationInfo objAnimationInfo = new ObjAnimationInfo();
objAnimationInfo.setName(animationVo.getProgramName());
objAnimationInfo.setDeviceId(animationVo.getDeviceId());
ObjAnimationInfo item = objNodeStateMapper.findByNameAndDeviceId(objAnimationInfo.getName(),objAnimationInfo.getDeviceId());
if (item != null){
throw new CustomException("节目名称已存在");
}
生成图片
生成图片时需要临时存放图片的一个路径,和图片的宽高(图片尺寸也可从前台获取),以及从前台获取的RGB值,
使用ImageUtils中的colorImage方法即可
public static String colorImage(int r,int g,int b,int width,int height,String path){
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2d=(Graphics2D) bufferedImage.getGraphics();
graphics2d.setBackground(Color.WHITE);
graphics2d.clearRect(0, 0, width, height);
graphics2d.setPaint(new Color(r,g,b));
graphics2d.fillRect(0, 0, width, height);
String rgbString= "r" + r + "g" + g + "b" + b + System.currentTimeMillis();
String filePath=path + rgbString +".png";
File file = new File(filePath);
try {
ImageIO.write(bufferedImage, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
return filePath;
}
生成视频
生成视频时需要视频存放的临时路径,和之前生成的图片的路径,然后通过Ffmpeg生成视频
String targetFile = TEMP_PATH + System.currentTimeMillis() + "convert." + EXTENSION_MP4;
String[] inputArgs = {"-r","25","-loop","1"};
String[] outputArgs = {"-pix_fmt","yuv420p","-vcodec","libx264","-b:v","600k","-r:v","25","-preset","medium","-crf","30","-vframes","250","-r","25","-t","30"};
try {
FfmpegUtil.convert(FFMPEG,FFPROBE,imgPath,targetFile,inputArgs,outputArgs);
} catch (IOException e) {
e.printStackTrace();
}
上传ftp
需要将视频上传ftp可以进行这一步操作,不需要上传则直接将生成视频的临时路径存入数据库
首先通过ftp工具类,连接到ftp 然后需要一个ftp中存放视频的路径,和文件名,然后将视频流进行上传
FTPClient ftpClient = FtpUtil.connectFtpServer(FTP_IP, FTP_PORT, FTP_USERNAME, FTP_PASSWORD, "utf-8");
ftpClient.enterLocalPassiveMode();
charset(ftpClient);
File ftpFile = new File(targetFile);
in = new FileInputStream(ftpFile);
fileName = System.currentTimeMillis() + "animation." + EXTENSION_MP4;
boolean flag = ftpClient.storeFile(ANIMATION_PATH + fileName, in);
视频数据存入数据库
存入数据库就很简单,构造一个实体类,将需要的数据set进实体类中,通过inset存入数据库即可
删除临时文件
public static void delFile(String filePathAndName) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
java.io.File myDelFile = new java.io.File(filePath);
myDelFile.delete();
} catch (Exception e) {
System.out.println("删除文件操作出错");
e.printStackTrace();
}
}
通过删除指定路径中的文件的方法,如果不上传ftp,则只需要删除临时图片的文件,上传了ftp则需要删除临时图片和临时视频
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)