Java操作ffmpeg遇到卡死問題


問題描述

使用Procees+Runtime操作ffmpeg時,執行比較大的文件操作會卡死,但cmd打開ffmpeg能正常執行

問題原因

因為waitfor()操作時wait但沒有指定時間,導致jvm緩沖流滿了,卡死

處理

  /**
     * 處理process輸出流和錯誤流,防止進程阻塞
     * 在process.waitFor();前調用
     * @param process
     */
    private static void dealStream(Process process) {
        if (process == null) {
            return;
        }

        // 處理InputStream的線程
        new Thread() {
            @Override
            public void run() {
                BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = null;
                try {
                    while ((line = in.readLine()) != null) {
                        // logger.info("output: " + line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
        // 處理ErrorStream的線程
        new Thread() {
            @Override
            public void run() {
                BufferedReader err = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                String line = null;
                try {
                    while ((line = err.readLine()) != null) {
                        //  logger.info("err: " + line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        err.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM