Я пытаюсь запустить экземпляр программы VideoLAN из Java-приложения. Один из способов, которыми я пытался это сделать, показан здесь:
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), программа vlc зависнет, когда достигнет конца фазы буферизации. Если все потоки в java-программе завершены / запущены до конца, программа vlc перейдет к фазе потоковой передачи. Процесс Java не будет завершен, пока процесс vlc не будет закрыт, поэтому такое поведение, очевидно, является результатом некоторой связи между процессами.
Попытка выполнить команду косвенно, записав ее в файл .cmd и затем выполнив ее, но приводит к тому же поведению.
Есть идеи, как избежать зависания внешнего процесса?