禁用vlc中的日志记录

时间:2014-03-05 19:02:17

标签: error-handling vlc libvlc vlcj

我正在编写一个用vlc查看MJPEG流的程序。当直接通过命令行运行vlc时,我反复收到错误消息[mjpeg @ 0x10203ea00] No JPEG data found in image(使用不同的pid)。我想摆脱这个,因为我认为所有的文本输出都会让我的程序陷入困境(并且使我的文本输出无法看到,因为它在写入控制台后大约是.5秒)

我正在连接蓝色虹膜,并正在用vlcj实现我的程序。

http://10.10.80.39:8080/mjpg/cam1/video.mjpeg我已经尝试了所有可以找到的安静选项,将详细程度设置为0,我对如何忽略此错误感到茫然。

我正在运行vlc 2.1。错误发生在多台计算机和多个操作系统上。

1 个答案:

答案 0 :(得分:0)

您根本无法禁用vlc或vlc所依赖的库可能会发出的所有内容。并非您看到的所有日志/错误消息都可以通过设置vlc的日志级别来控制。

对我来说,问题主要是libdvdnav向stderr发送不相关的消息。

你说你正在使用vlcj,我也想要一种方法来轻松忽略来自Java应用程序内部的错误消息。使用最新的vlcj-git(在撰写本文时),有一个实验性NativeStreams [1]类可能对您有帮助。

此类使用JNA包装“C”标准库,并以编程方式重定向本机进程stdout和stderr流中的一个或两个。

您不能像某些人预期的那样简单地重定向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