繁体   English   中英

如何关闭libavformat错误消息

[英]How can I turn libavformat error messages off

默认情况下,libavformat将错误消息写入stderr ,如:

Estimating duration from bitrate, this may be inaccurate

我怎么能把它关掉? 或者更好的是,把它管道到我自己的整洁记录功能?

编辑:将stderr重定向到其他地方是不可接受的,因为我需要它用于其他日志记录目的,我只是希望libavformat不写入它。

通过代码查看,您可以通过为av_log函数编写自己的回调函数来更改行为。

libavutil / log.h中的这个函数的描述:

如果级别小于或等于当前av_log_level,则将指定的消息发送到日志。 默认情况下,所有日志消息都将发送到stderr。 可以通过设置不同的av_vlog回调函数来更改此行为。

API提供了一个允许您定义自己的回调的函数:

void av_log_set_callback(void (*)(void*, int, const char*, va_list));

在您的情况下,您可以编写一个简单的回调函数,完全丢弃消息(或将它们重定向到专用日志等),而不会污染您的stderr流。

尝试av_log_set_level(level)

  1. 包含此头文件

     #include <libavutil/log.h> 
  2. 添加此代码将禁用日志

     av_log_set_level(AV_LOG_QUIET); 

您可以将它们重定向到自定义文件, 它将重定向所有cerr条目

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
  ofstream file("file.txt");

  streambuf *old_cerr = cerr.rdbuf();

  cerr.rdbuf (file.rdbuf());

  cerr << "test test test" << endl; // writes to file.txt

  // ...

  cerr.rdbuf (old_cerr); // restore orginal cerr

  return 0;
}

编辑:编辑问题后,我警告上面的代码,它将所有cerr条目流重定向到file.txt

我不熟悉libavformat,但是如果它的代码是不可更改的,你可以在调用库的api之前临时将cerr重定向到文件并再次将它重定向到原始的cerr 。(但这很丑陋)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM