栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java调用FFmpeg实现视频录制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java调用FFmpeg实现视频录制

       FFmpeg是一个很好用的开源的视频处理工具,网上也有一些java调用FFmpeg的方法,然而这些文章大部分都有一个共同的特点,就是用java去调用FFmpeg去做视频处理,几乎没有去做录制视频和音频的,这些文章都巧妙的回避了一个问题,就是:如何能在java中正确关闭FFmpeg线程

        要在java中调用FFmpeg,无非是用java启动一个cmd命令的线程,俗话说请神容易送神难,这个cmd线程打开是很容易的,然而关闭却很难,这个线程如果不能正确关闭,就会使FFmpeg之前录制的视频全部无法正确保存,或者视频格式出现异常,无法播放。本人查阅了大量的国内论坛,没找到解决方案,也查看了很多国外的提问的帖子,至今也未能解决,本人经过反反复复尝试,研究,终于解决此问题,现分享给大家

整个实现过程如下:

 

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

 

public class TestConsole {
	private Runtime runtime;
	private Process pro;

	private void exec(String cmd) {
		try { 
			System.out.println("系统开始执行命令:n" + cmd);
			runtime = Runtime.getRuntime();
			pro = runtime.exec(cmd);
 
			InputStream stream = pro.getErrorStream();
			output(stream);
			pro.waitFor();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

	public void stop() throws IOException {
		 OutputStream ostream = pro.getOutputStream();  
		 ostream.write("qrn".getBytes());  
		 ostream.flush();
		 ostream.close();
	}

	public void output(InputStream stream) {
		InputStreamReader isr = null;
		BufferedReader br = null;
		try {
			isr = new InputStreamReader(stream, "gbk");
			br = new BufferedReader(isr);
			String str;
			// 通过readLine()方法按行读取字符串
			while ((str = br.readLine()) != null) {
				System.out.println(str);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			close(br, isr, stream);
		}
	}
	public void close(AutoCloseable ... acs) {
		for(AutoCloseable ac : acs) {
			try {
				ac.close();
			} catch (Exception e) { 
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) throws Exception {
		TestConsole console = new TestConsole();
		String cmd = "ffmpeg.exe -f gdigrab -offset_x 42 -offset_y 325 -video_size 1196x900 -i desktop -f dshow -i audio="virtual-audio-capturer" -vcodec libx264 -pix_fmt yuv420p  C:\Users\lv-wang\Desktop\测试录屏\ii.mp4";
		new Thread(()->console.exec(cmd)).start();
		Thread.sleep(1000*10);
		console.stop();
		System.out.println("已经停止");
		Thread.sleep(1000*5);
		
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996645.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号