我正在尝试从 java 应用程序中启动 VideoLAN 程序的实例。我尝试这样做的一种方法如下所示:
Process p = Runtime.getRuntime().exec("\"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe\" \"http://www.dr.dk/Forms/Published/PlaylistGen.aspx?qid=1316859&odp=true\" :sout=#std{access=udp,mux=ts,dst=127.0.0.1:63928}");
如果我执行上述命令,vlc 程序将被启动,并开始一个流式操作(它经过连接、缓冲和流式传输阶段)。
当命令由 Runtime exec(或 ProcessBuilder start)执行时,vlc 程序将在到达缓冲阶段结束时挂起。如果 java 程序中的所有线程都终止/运行结束,vlc 程序将进入流式处理阶段。java 进程在 vlc 进程关闭之前不会终止,因此这种行为显然是进程之间某种耦合的结果。
已尝试通过将命令写入 .cmd 文件然后执行它来间接执行该命令,但结果相同。
关于如何避免外部进程挂起的任何想法?