java关于ffmpeg推流停止的问题

it2024-07-18  40

问题描述

Java程序中使用Runtime.getRuntime().exec()执行ffmpeg推流命令,大约五分钟后,推流停止,ffplay无法接收到流,但推流进程仍存在。

解决方法

process的阻塞: 在runtime执行大点的命令中,输入流和错误流会不断有流进入存储在JVM的缓冲区中,如果缓冲区的流不被读取被填满时,就会造成runtime的阻塞。所以在进行比如:大文件复制等的操作时,我们还需要不断的去读取JVM中的缓冲区的流,来防止Runtime的死锁阻塞。 利用单独两个线程,分别处理process的getInputStream()和getErrorSteam(),防止缓冲区被撑满,导致阻塞;

public class DealProcessStream extends Thread { private InputStream inputStream; public DealProcessStream(InputStream inputStream) { this.inputStream = inputStream; } public void run() { InputStreamReader inputStreamReader = null; BufferedReader br = null; try { inputStreamReader = new InputStreamReader( inputStream); br = new BufferedReader(inputStreamReader); // 打印信息 // String line = null; // while ((line = br.readLine()) != null) { // System.out.println(line); // } // 不打印信息 while (br.readLine() != null); } catch (IOException ioe) { ioe.printStackTrace(); }finally { try { br.close(); inputStreamReader.close(); } catch (IOException e) { e.printStackTrace(); } } } }

参考文章

https://www.cnblogs.com/tohxyblog/p/6501396.html https://www.cnblogs.com/MacrossFT/p/12038479.html

最新回复(0)