運行ffmpeg的命令運行從Java調用Runtime.getRuntime一個ffmpeg的命令()。EXEC。 ffmpeg命令基本上從直播流中剪切圖像。 其實當我運行這個命令沒有&時,它在五分鐘後正常工作,它停止剪切圖像。我如何在後臺從Java
但是當我的ffmpeg命令使用「&」這並不在所有的工作。
存在實時數據流爲當我跑在Linux它工作正常此ffmpeg的命令沒有問題。
我的主要問題是如何從Java後臺運行ffmpeg的命令。
運行ffmpeg的命令運行從Java調用Runtime.getRuntime一個ffmpeg的命令()。EXEC。 ffmpeg命令基本上從直播流中剪切圖像。 其實當我運行這個命令沒有&時,它在五分鐘後正常工作,它停止剪切圖像。我如何在後臺從Java
但是當我的ffmpeg命令使用「&」這並不在所有的工作。
存在實時數據流爲當我跑在Linux它工作正常此ffmpeg的命令沒有問題。
我的主要問題是如何從Java後臺運行ffmpeg的命令。
你寫它停止分鐘後工作。你有沒有檢查退出代碼(Process.exitValue()
)。另外,你是否從外部進程檢查輸出流和錯誤流?
測試中沒有任何東西..我猜測它掛了五分鐘後 – jack 2010-09-19 12:33:55
'&'是一個shell指令將任務放到後臺。從Process.exec()
運行不涉及shell。
如果進程停滯不前(即運行,但只是不工作),那麼我懷疑它的阻塞等待你消耗標準輸出/標準錯誤。您必須使用線程來執行此操作,以防止進程阻塞等待您使用其輸出。有關更多詳細信息,請參閱this SO answer。
要在後臺運行(即同時你的Java程序做其他的東西),你需要:
Process.exec
調用流程/ stderr(都在單獨的線程中),最後得到退出代碼我測試過的線程也.. ..但結果仍然相同。 如何將任務放入後臺意味着如何使用「&」 – jack 2010-09-19 12:31:38
您是否將參數傳遞給數組?如果它在一段時間內有效,你是否將所有預期的論點都給了它? (打印出來並檢查)。這是我爲你挖出的ffmpeg的一個例子。
String[] ffmpeg = new String[] {"ffmpeg", "-ss", Integer.toString(seconds),"-i", in, "-f", "image2", "-vframes", "1", out};
Process p = Runtime.getRuntime().exec(ffmpeg);
/usr/sites/ffmpeg -i livestream -r4 folderpth/image%d.jpeg – jack 2010-09-18 10:41:31
您是否嘗試將參數作爲字符串列表傳遞?在原始問題中發佈一些代碼,向我們展示您擁有的內容。我上面的代碼獲取輸入文件的時間和輸出圖像的整數參數。 – dekz 2010-09-18 11:37:58
這裏是示例代碼.. String cmd =「/ usr/sites/ffmpeg -i」+ livestream +「-r4」+ folderpth +「/ image%d.jpeg」; try { Process p = Runtime.getRuntime()。exec(cmd); } catch {} – jack 2010-09-18 19:40:42
String livestream = "/Users/videos/video_10/video_1.mp4";
String folderpth = "/Users/videos/video_10/photos";
String cmd="/opt/local/bin/ffmpeg -i "+ livestream +" -r 10 "+folderpth+"/image%d.jpeg";
Process p = Runtime.getRuntime().exec(cmd);
視頻是10秒。很長,它創建了100 jpeg的照片文件夾。您必須提供文件夾的絕對路徑。
還要在終端中找到ffmpeg二進制使用的路徑which ffmpeg
。我的是/opt/local/bin/ffmpeg
。
我知道你在尋求幫助你的命令行問題在Java,但你可能會對其他解決方案感興趣。
也許你可以試用一下這個庫: http://code.google.com/p/jjmpeg/
它是ffmpeg的一個包裝。 也許你可以嘗試創建一個Java線程並運行你的命令。
ffmpeg命令工作正常在php – jack 2010-09-18 08:41:27