2014-03-05 109 views
1

我正在編寫一個程序來查看與vlc的MJPEG流。當通過命令行直接運行vlc時,我會一遍又一遍地得到錯誤消息[mjpeg @ 0x10203ea00] No JPEG data found in image(使用不同的pid)。我想擺脫這一點,因爲我認爲所有的文本輸出都讓我的程序陷入了困境(並且使得我的文本輸出不可能看到,因爲它在寫入控制檯後的0.5秒內不可見)在vlc中禁用日誌

我連接到藍色虹膜,並正在使用vlcj實施我的程序。

http://10.10.80.39:8080/mjpg/cam1/video.mjpeg我已經嘗試了所有可以找到的安靜選項,將詳細程度設置爲0,但我無法理解如何忽略此錯誤。

我正在運行vlc 2.1。錯誤發生在多臺計算機和多個操作系統上。

+0

如果我沒有讓它在這個問題清楚,當我運行我的程序錯誤也出現 – Reid

回答

0

您根本無法禁用vlc或vlc依賴的庫可能發出的所有內容。並非所有您看到的日誌/錯誤消息都可以通過設置vlc的日誌級別來控制。

對我來說,問題主要是libdvdnav向stderr噴出不相關的消息。

你說你正在使用vlcj,我也想要一種輕鬆忽略來自Java應用程序內部的錯誤消息的方法。使用最新的vlcj-git(寫作時),有一個實驗性的NativeStreams [1]類可以幫助你。

該類使用JNA包裹「C」的標準庫和編程重定向任一個或兩者天然過程輸出和錯誤流。

您不能像有些人所期望的那樣簡單地重定向System.out和System.err,因爲很清楚這些消息來自JVM之外的本機代碼,並且當然不使用System.out或System.err。

您可以重定向到日誌文件(可能只是繼續增長)或「/ dev/null」。

缺點是,如果您重定向本地流,您也不可避免地重定向相應的Java流 - 您將失去自己的應用程序輸出。在我自己的應用程序中,這不是問題,因爲我登錄到stdout(我不重定向),而vlc的消息我不想偶然地去stderr(我重定向)。

您也可以在啓動JVM時以通常方式重定向您的java進程輸出流。我希望能夠以編程方式執行此操作,而不必編寫shell腳本。

所以這不是一個理想的解決方案,但它適用於我(僅在Linux上測試過)。

[1] https://github.com/caprica/vlcj/blob/a95682d5cd0fd8ac1d4d9b7a768f4b5600c87f62/src/main/java/uk/co/caprica/vlcj/runtime/streams/NativeStreams.java