2010年8月31日 星期二

GStreamer Debugging 參數說明

Standard
[GStreamer] 是一個優異的多媒體處理元件 Library,其架構了最先進的多媒體資料流機制,在目前主流的 Linux 系統中,應用極為廣範。GStreamer 支援以 Plugin 的形態擴充自身功能,可以是編解碼器(Encoder/Decoder),亦或是效果處理(Processing),因此,有許多生產硬體解碼晶片的廠商,都會透過提供 Gstreamer Plugin 的方式,支援 Linux 上的多媒體播放。說到多媒體架構,或許讀者也曾聽過 OpenCore/OpenMax,其實 Gstreamer 和 OpenCore 兩者是相類似的東西,只是前者主要被應用在桌面系統居多,後者則常見於嵌入式系統(Embedded System)應用,最廣為人知的便是 Android Multimedia Framework。在此,細節就不多談,本文將要探討 GStreamer Debugging 的一些手段。

如果曾開發過 GStreamer Application,對初始化 GStreamer Backend 應該很熟悉:
gst_init(&argc, &argv);

我們可以理解所有的 GStreamer Application,都會經過這段 Initialization 的動作,因此 gst_init() 會從 main() 得到程式被執行時所代入的後綴參數,換言之,理論上不管是什麼 Application ,我們可以透過這種方式去開啟 GStreamer 的 Debug 模式:
$ ./totem --gst-debug-level=3
0:00:00.003322140 13127  0x8c530a0 INFO                GST_INIT gstquery.c:105:_gst_query_initialize: init queries
0:00:00.004700946 13127  0x8c530a0 INFO                GST_INIT gstmessage.c:73:_gst_message_initialize: init messages
0:00:00.005529752 13127  0x8c530a0 INFO      GST_PLUGIN_LOADING gstplugin.c:348:_gst_plugin_initialize: registering 0 static plugins
0:00:00.005766514 13127  0x8c530a0 INFO      GST_PLUGIN_LOADING gstplugin.c:254:gst_plugin_register_static: registered static plugin "staticelements"
0:00:00.005795498 13127  0x8c530a0 INFO      GST_PLUGIN_LOADING gstplugin.c:256:gst_plugin_register_static: added static plugin "staticelements", result: 1
0:00:00.006600699 13127  0x8c530a0 INFO            GST_REGISTRY gstregistry.c:1586:ensure_current_registry: reading registry cache: /home/fred/.gstreamer-0.10/registry.i486.bin
0:00:00.029082746 13127  0x8c530a0 INFO            GST_REGISTRY gstregistrybinary.c:601:gst_registry_binary_read_cache: loaded /home/fred/.gstreamer-0.10/registry.i486.bin in 0.022431 seconds
0:00:00.029188137 13127  0x8c530a0 INFO            GST_REGISTRY gstregistry.c:1446:scan_and_update_registry: Validating plugins from registry cache: /home/fred/.gstreamer-0.10/registry.i486.bin
0:00:00.031259140 13127  0x8c530a0 INFO            GST_REGISTRY gstregistry.c:1548:scan_and_update_registry: Registry cache has not changed
0:00:00.031292035 13127  0x8c530a0 INFO            GST_REGISTRY gstregistry.c:1615:ensure_current_registry: registry reading and updating done, result = 1
0:00:00.031311032 13127  0x8c530a0 INFO                GST_INIT gst.c:786:init_post: GLib runtime version: 2.24.1

0:00:00.031331007 13127  0x8c530a0 INFO                GST_INIT gst.c:788:init_post: GLib headers version: 2.24.1
... 以下省略

參考 GStreamer 官方文件,會發現有數種參數可以使用:

  • --gst-debug-level=LEVEL
    設定 Debug 級別,LEVEL 範圍從 0 (不輸出訊息) 到 5 (輸出所有訊息)
  • --gst-debug=LIST
    要求特定的 Plugin 所 Debug 訊息輸出,亦可以分別設定不同 plugin 有的不同 Debug 級別,格式範例:
    --gst-debug=GST_AUTOPLUG:5,avidemux:3
  • --gst-plugin-spew
    輸出 Plugin 載入的錯誤訊息

References

GStreamer Application Development Manual:
http://www.gstreamer.net/data/doc/gstreamer/head/manual/html/section-checklist-debug.html