java的runtime创建cmd进程执行ffmpeg的录制命令,要如何正常的结束录制命令,达到录制的文件可以播放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的runtime创建cmd进程执行ffmpeg的录制命令,要如何正常的结束录制命令,达到录制的文件可以播放相关的知识,希望对你有一定的参考价值。

晕,刚看你的问题,去搜了这个玩意,挺厉害的,貌似C++正对它口味了,感觉我也喜欢上了它,你有没有尝试使用Q命令呢?
刚看说明,可以使用q可以退出的..试试...
另外Java也有这个专用的开源库,你可以不用这个静态的!
直接导入Java提供的那个,我觉得更加方便,你还可以做成GUI...我也是门外汉,仅谈谈..

参考技术A BufferedImage继承了Image类是带数据缓冲区的图像类,BufferedImage将生成的图像信息存在图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片

Java笔记:运行时

一、进程

抽象类Process用来封装进程,即执行的程序。Process主要用作由Runtime的exec方法创建的对象类型或由ProcessBuilder的start方法创建的对象类型的超类。

 

二、运行时环境

Runtime封装了运行时环境,不能实例化Runtime对象,而是通过调用静态方法Runtime.getRuntime方法来获得当前Runtime对象的引用。一旦获得当前Runtime对象的引用,就可以调用一些控制Java虚拟机的状态和行为。

 

三、内存管理

尽管Java提供了自动的垃圾回收功能,但是有时需要了解对象堆的大小或剩余空间的大小,可以使用totalMemory方法和freeMemory方法。我们直到Java垃圾回收器周期性地运行,回收不再使用的对象。但是,有时会希望在垃圾回收器下次指定运行之前回收废弃的对象。可以调用gc方法来要求运行垃圾回收器。

技术分享图片
class Solution {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        Double[] arr = new Double[100000];
        for (int i = 0; i < arr.length; i++)
            arr[i] = 0.0;
        arr = null;
        System.out.println(runtime.freeMemory());
        runtime.gc();
        System.out.println(runtime.freeMemory());
    }
}
View Code


四、执行其他程序

在安全环境中,可以在多任务操作系统下使用Java执行其他重量级的进程。有几种形式的exec方法运行命名希望运行的程序,并允许提供输入参数。exec方法返回Process对象,然后可以使用该对象控制Java程序与该新运行的进程的交互方式。因为Java程序可以运行各种平台和操作系统上,所以exec时环境独立的。

技术分享图片
import java.io.IOException;

class Solution {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        Process process = null;
        try {
            process = runtime.exec("notepad");//运行记事本
            process.waitFor();//等待进程关闭
        } catch (IOException exc) {
            System.out.println("Cannot execute notepad");
        } catch (InterruptedException exc) {
            System.out.println("Process interrupted");
        }
        System.out.println(process.exitValue());
    }
}
View Code


五、进程创建类

技术分享图片
import java.io.IOException;

class Solution {
    public static void main(String[] args) {
        try {
            ProcessBuilder builder = new ProcessBuilder("notepad.exe", "file.txt");
            builder.start();
        } catch (IOException exc) {
            System.out.println("Cannot execute notepad");
        }
    }
}
View Code


六、系统类

通过currentTimeMillis方法可获取自1970年1月1日午夜到当前时间的毫秒数。

技术分享图片
class Solution {
    public static void main(String[] args) {
        long begin = System.currentTimeMillis();
        try {

            for (int i = 0; i < 10; i++) {
                Thread.sleep(1000);
                long end = System.currentTimeMillis();
                System.out.println(end - begin);
            }
        } catch (InterruptedException exc) {
            System.out.println("Thread interrupted");
        }
    }
}
View Code

复制数组,相较于普通循环更快。

技术分享图片
class Solution {
    static int[] copyArray(int[] arr) {
        int[] cpy = new int[arr.length];
        System.arraycopy(arr, 0, cpy, 0, arr.length);
        return cpy;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int[] cpy = copyArray(arr);
        for (int i : cpy)
            System.out.println(i);
    }
}
View Code

环境属性。

技术分享图片
class Solution {
    public static void main(String[] args) {
        System.out.println(System.getProperties());
    }
}
View Code

 




以上是关于java的runtime创建cmd进程执行ffmpeg的录制命令,要如何正常的结束录制命令,达到录制的文件可以播放的主要内容,如果未能解决你的问题,请参考以下文章

java运行linux命令获得返回值的问题

怎么使用Java执行cmd命令

linux 查看java进程是啥时候启动的

Java笔记:运行时

Java 执行CMD/DOS

如何使用Java执行cmd命令