坚持使用GStreamer记录

时间:2018-02-23 23:42:19

标签: c debugging logging gstreamer

我正在尝试将我的GStreamer应用程序日志信息通过GST_DEBUGGST_ERROR发送到日志文件。我已尝试在GST_DEBUG和代码中设置环境变量GST_DEBUG_FILECMakeLists.txt,但没有运气。

问题1:我需要做些什么来修复日志记录?

问题2:我可以同时通过GST_DEBUGGST_ERROR等和stdout进行记录吗?

执行GST_DEBUG("THIS IS A TEST".")时,终端和日志文件中都没有输出。

在`CMakeLists.txt:

find_package(PkgConfig)
pkg_check_modules(GST REQUIRED gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-app-1.0)

set(GST_DEBUG "*:6")
set(GST_DEBUG_FILE /var/log/myapp.log)
set(GST_DEBUG_DUMP_DOT_DIR ${ROOT_DIR}/tmp)

add_executable(myapp, ${SOURCE_FILES})
target_compile_options(myapp, ${CMAKE_C_FLAGS} ${BUILD_FLAGS} ${GST_CFLAGS} ${GST_DEBUG_OPTIONS} -g -ggdb -Wall -pedantic -enable-gst-debug=yes)

请注意,出于某种原因,我无法构建前缀enable-gst-debug = yes和两个" - ",即" - enable-gst-debug = yes"不编译,但" -enable-gst-debug = yes"确实

此外,GST_DEBUG_DUMP_DOT_DIR不适用于CMakeLists.txt,但是如果我使用" GST_DEBUG_DUMP_DOT_DIR =' ../ tmp'来自脚本运行我的应用程序。 ' MyApp的'"然后生成点文件。认为这可能是相关的。

在C:

GST_DEBUG_CATEGORY_STATIC(myapp)
#define GST_CAT_DEFAULT myapp

// Called previously when main parses args
g_option_context_add_group(pCntx, gst_init_get_option_group());

void init_myapp() {

    gst_init(NULL, NULL);// I know this is rather redundant because gst_init_get_option_group() has been called already.
    GST_DEBUG_CATEGORY_INIT(myapp, "myapp", 0, "Custom debugging cat.");
    setenv("GST_DEBUG", "*:6", 1);
    setenv("GST_DEBUG_FILE", "/var/log/myapp.log", 1);

    GST_DEBUG("THIS IS A TEST.");
}

1 个答案:

答案 0 :(得分:1)

Cmake是构建系统,它与正在运行的进程的环境变量无关。 您可以做的是使用cmake设置默认值,如下所示:

user www-data;

设置环境变量的正确方法是使用

# for escaped definitions
cmake_policy(SET CMP0005 NEW)

set(DEFAULT_GST_DEBUG "*:6" CACHE STRING "Default value for GST_DEBUG")
set(DEFAULT_GST_DEBUG_FILE /var/log/myapp.log CACHE STRING "Default value for GST_DEBUG_FILE")
set(DEFAULT_GST_DEBUG_DUMP_DOT_DIR ${ROOT_DIR}/tmp CACHE STRING "Default value for GST_DEBUG_DUMP_DOT_DIR")

add_definitions("-DDEFAULT_GST_DEBUG=\"${DEFAULT_GST_DEBUG}\"")
add_definitions("-D=DEFAULT_GST_DEBUG_FILE\"${DEFAULT_GST_DEBUG_FILE}\"")
add_definitions("-DDEFAULT_GST_DEBUG_DUMP_DOT_DIR=\"${DEFAULT_GST_DEBUG_DUMP_DOT_DIR}\"")

...

$ export VAR=VAL

用户必须能够覆盖您的默认值,不能使用该功能 来自用户。

$ VAR=VAL ./a.out 也应该有效,但即使the documentation从未提及过 它,我怀疑这些环境变量必须在之前设置 setenv被称为,因为我认为这是一个地方 环境变量被评估,因此之后可能会更改它们 对GStreamer中的日志记录行为没有影响。

您还可以选择将gst_init(NULL, NULL);argc传递给argv,但是 文档说未知的命令行选项会导致此功能 中止程序执行 cite API documentation 展示了如何处理它。

所以你可以这样做:

gst_init

现在,您可以使用#include <stdlib.h> GST_DEBUG_CATEGORY_STATIC(myapp) #define GST_CAT_DEFAULT myapp int init_myapp(); int main(int argc, char **argv) { // the setenvs must come before the gst_init char *env = getenv("GST_DEBUG"); if(env == NULL) setenv("GST_DEBUG", DEFAULT_GST_DEBUG, 1); env = getenv("GST_DEBUG_FILE"); if(env == NULL) setenv("GST_DEBUG_FILE", DEFAULT_GST_DEBUG_FILE, 1); env = getenv("GST_DEBUG_DUMP_DOT_DIR"); if(env == NULL) setenv("GST_DEBUG_DUMP_DOT_DIR", DEFAULT_GST_DEBUG_DUMP_DOT_DIR, 1); // if you must g_option_context_add_group(pCntx, gst_init_get_option_group()); init_myapp(); ... } int init_myapp() { // this should be the first call! gst_init(NULL, NULL); GST_DEBUG_CATEGORY_INIT(myapp, "myapp", 0, "Custom debugging cat."); } cmake -DDEFAULT_GST_DEBUG=value更改cmake中的默认值。

希望对你有所帮助。