java多线程下的视频转码
来源:互联网 发布:淘宝店铺装修注意事项 编辑:程序博客网 时间:2024/06/08 14:41
前言
上一篇文章中介绍了linux下的java调用ffmpeg进行视频转码,完成之后发现存在一个问题:因为转码在服务器上需要很长时间,而当前页面需要等转码结束后才能响应跳转到视频列表页面,这个当然是不合理的了。所以,我采用了多线程进行处理,把视频的转码过程放在一个新的线程中完成,这样用户在上传页面的等待时间就会小很多了。关于java多线程的知识,这个博主总结的非常详细,http://blog.csdn.net/evankaka/article/details/44153709。
代码部分
//新开一个线程,去完成转码工作ExecutorService service = Executors.newSingleThreadExecutor();Runnable runnable = new Transcoding(absolutePath, filePath, mediaPicPath, storeName, userName, messageService, projectPath);service.submit(runnable);
这里是使用 ExecutorService 新建了一个线程,然后实现了Runnable接口,实例化了该方法,给Transcoding构造方法传了以上参数,下面看Transcoding类的代码。
import java.io.BufferedReader;import java.io.File;import java.io.InputStream;import java.io.InputStreamReader;import cn.xaut.video.domain.Message;import cn.xaut.video.service.MessageService;public class Transcoding implements Runnable{private String absolutePath;private String filePath;private String mediaPicPath;private String storeName;private String userName;private MessageService messageService = null;private String projectPath;public Transcoding(String absolutePath, String filePath,String mediaPicPath, String storeName, String userName, MessageService messageService, String projectPath) {super();this.absolutePath = absolutePath;this.filePath = filePath;this.mediaPicPath = mediaPicPath;this.storeName = storeName;this.userName = userName;this.messageService = messageService;this.projectPath = projectPath;}/** * 视频格式转换方法,把其他视频转换为.mp4格式 * * @param absolutePath * 输入文件 * @param filePath * 输出文件 * @param mediaPicPath * 截图保存地址 * @return */public void executeCodecs(String absolutePath, String filePath,String mediaPicPath, String storeName,String userName, String projectPath) {String videoCommend = "ffmpeg -i "+ absolutePath+ " -vcodec libx264 -r 29.97 -b 768k -ar 24000 -ab 64k -s 1280x720 "+ filePath;String picCommend = "ffmpeg -ss 00:02:06 -i " + absolutePath+ " -f image2 -y " + mediaPicPath;boolean flag = false;flag = runCmd(videoCommend);System.out.println("videoCommend successful");flag = runCmd(picCommend);System.out.println("picCommend successful");String destPath = projectPath + File.separator + ".."+ File.separator + "tempVideo" + File.separator;String url = destPath + storeName;System.out.println(url);new File(url).delete();System.out.println("删除成功");}/** * 运行命令 * * @param command */public boolean runCmd(String command) {try {Runtime rt = Runtime.getRuntime();Process proc = rt.exec(command);InputStream stderr = proc.getErrorStream();InputStreamReader isr = new InputStreamReader(stderr);BufferedReader br = new BufferedReader(isr);String line = null;while ((line = br.readLine()) != null){System.out.println(line);}int exitVal = proc.waitFor();System.out.println("Process exitValue: " + exitVal);return true;} catch (Throwable t) {System.out.println(t);t.printStackTrace();return false;}}@Overridepublic void run() {executeCodecs(absolutePath, filePath, mediaPicPath, storeName, userName, projectPath);Message msg = new Message();msg.setState("0");msg.setReceiver(0);msg.setUrl("videoAction_checkList.action"); String content="有一个新的视频需要审核!";msg.setContent(content);messageService.save(msg);System.out.println("转码结束!");}}
以上就是新建立一个线程处理视频转码的过程了。
0 0
- java多线程下的视频转码
- linux下的java调用ffmpeg进行视频转码
- Java的多线程机制下
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
- java基础视频需要记忆的部分备忘 - 多线程
- 用多线程下载视频(Java)
- cocos2dx 3.8中ScrollView记载TableView(代码详解)
- Java数据通讯中使用Googgle Protobuf 序列化与反序列化
- iOS移除父视图的子视图
- App测试流程
- java.swing中 真正认识 JFrame 和 getContentPane() 方法
- java多线程下的视频转码
- 免安装版tomcat出问题的时候来看看安装版吧!
- matlab一些常用的命令(自用)
- TortoiseSVN客户端使用方法
- iOS 闪退,程序杀死处理
- Google ProtocolBuffers2.4.1应用说明
- java验证码
- upload to app Atore 错误信息汇总
- HDU OJ-1084 数塔