0

我正在 Win32 Windows 应用程序(而不是控制台应用程序)中测试 gstreamer。我也喜欢在我的 Win32 Windows 应用程序中抓取并显示“gstreamer”的调试和错误消息(通常打印在 win32 控制台应用程序中)。我在有自己的主窗口和几个子窗口(而不是命令提示符)的 Win32 Windows 应用程序中看不到它们。使用

g_log_set_handler( G_LOG_DOMAIN, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION, MyfGstGenLogHandle, NULL );

仅在我的“MyfGstGenLogHandle”函数中获取“应用程序”域日志消息;这意味着它只抓取例如我自己在我自己的代码中使用 g_debug( ... ) 命令的地方。我尝试了以下命令来获取并显示“gstreamer”的调试和错误消息(例如,这些是在 playbin 尝试播放媒体时生成的):

g_log_set_default_handler( MyfGstGenLogHandle, NULL );
g_log_set_handler( G_LOG_DOMAIN     , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( NULL             , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "GStreamer"      , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "GLib-GObject"   , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "GLib"           , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "GModule"        , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "GThread"        , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "Gnt"            , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "stderr"         , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "stdout"         , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "Gtk"            , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );
g_log_set_handler( "Gdk"            , (GLogLevelFlags) ( G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION ), MyfGstGenLogHandle, NULL );

到目前为止,这些尝试都没有帮助我在 Win32 Windows 应用程序中获取 gstreamer 调试消息,而如果我在 Win32 控制台应用程序中编写代码,则不使用 g_log_set_handler 的调试消息通常会打印在命令提示符中。有没有办法解决这个问题?先感谢您。

4

1 回答 1

3

GStreamer 有一个不同的 API 用于重定向日志,它被命名为gst_debug_add_log_function

作为参考,您可以使用我们在 android 中使用的代码将 GLib 和 GStreamer 日志重定向到 Android 的 logcat。

于 2013-10-24T15:51:19.010 回答