使用ffmepg对流进行抓取图片
使用ffmepg对流进行抓取图片
在linux上安装ffmepg
尽量不要在官网下载原始包,因为需要编译
wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz
tar -zxvf ffmpeg-3.1.tar.gz
进入解压后目录,自己指定的安装目录,然后配置环境变量,因为后续我们需要在java中使用命令进行截图
vi /etc/profile
按下i进行输入状态
在最后PATH添加环境变量:
export PATH=$PATH:/usr/local/ffmpeg/bin
按下esc并:wq
保存退出
查看是否生效
source /ect/profile 设置生效
然后可以使用流地址进行测试是否可以抓图,命令如下:
ffmpeg -i "+ VedioUrl +" -vframes 1 -y -f image2 -t 1 -s " + size + " " + realPath
其中VedioUrl 为流地址 size为图片大小(长和宽) realPath为截取过后的存储地址
有图片即成功
java具体实现
service层
/**
* 抓取图片
*
*/
public String capture(String VedioUrl,Integer height,Integer width,String path) {
String realPath = path+UUID.randomUUID().toString() + ".jpeg";
String size = height+"x"+width; // 600x480
String command ="ffmpeg -i "+ VedioUrl +" -vframes 1 -y -f image2 -t 1 -s " + size + " " + realPath;
log.info("截图命令调用"+command);
try {
Process process = Runtime.getRuntime().exec(command);
//以下代码无意义,为了判定当前有无数据,如果没有就抛出异常
InputStreamReader ir = new InputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
while ((line = input.readLine()) != null) {
}
} catch (java.io.IOException e) {
}
return realPath;
}
拿到返回路径可以进行上传等操作啦!