2014-03-05 435 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