如何显示信息?

时间:2015-03-22 11:44:28

标签: c gstreamer

抱歉上一篇文章。我会尝试更精确。

使用Gstreamer我创建了一个包含video.ts元素的管道,我可以毫无问题地看到和听到视频,但我想获得一些信息包video.ts。

感兴趣的信息是我的PTS,DTS,OFFSET和PID。为了查看这些值,我使用了Tsdemux的“emit-stats”属性。

  

g_object_set(G_OBJECT(v1_demux), “发射-统计”,1,NULL);

现在,我希望看到PTS,DTS,OFFSET和PID的值。为此,请使用“gst_bus_add_watch”并为消息创建多个案例

case GST_MESSAGE_EOS:
        g_print (" \n");
        g_print (" End of video\n");

        g_main_loop_quit (loop);
    break;

case GST_MESSAGE_ERROR: {
        gchar *debug;
        GError *error;

        gst_message_parse_error (msg, &error, &debug);

        g_free (debug);
        g_printerr ("Error: %s\n", error->message);
        g_error_free (error);

        g_main_loop_quit (loop);
        break;
}/*end case error*/

case GST_MESSAGE_ELEMENT:{

    if(strcmp(GST_MESSAGE_SRC_NAME (msg),"mux")==0){
        msg_struct=gst_message_get_structure(msg);

       i=i+1;
       g_print ("Element nº: %d \n", i);

       /* get PID,PTS,DTS,OFFSET value */
       pts =gst_structure_get_value (msg_struct,"pts");
       dts =gst_structure_get_value (msg_struct,"dts");
       offset =gst_structure_get_value (msg_struct,"offset");
       pid =gst_structure_get_value (msg_struct,"pid");

       /*display information PTS, DTS, OFFSET*/
       if(pts!=0){
           g_print(" *PID= % " G_GUINT64_FORMAT" *PTS= % " G_GUINT64_FORMAT " *Offset: % " G_GUINT64_FORMAT "\n",g_value_get_uint64(pid), g_value_get_uint64(pts),g_value_get_uint64(offset));
       }else if (dts!=0){
           g_print(" *DTS= % " G_GUINT64_FORMAT " *Offset: % " G_GUINT64_FORMAT "\n",g_value_get_uint64(dts),g_value_get_uint64(offset));
       }else if (pts==0 && dts==0){
           g_print(" *Paquete nulo: PTS=0 DTS=0 \n" );
       }
    }

现在我可以看到PTS,DTS和OFFSET的值。这部分可以解决很多耐心,测试和纠正错误。但PID没有正确显示,我真的不知道如何解决这个问题。

显示消息的快照

  

estoy imprimiendo estados n?:490    * DTS = 4672782274 *偏移量:12554828   元素n?:491

     

(test:3385):GLib-GObject-CRITICAL **:g_value_get_uint64:断言`G_VALUE_HOLDS_UINT64(值)'失败    * PID = 0 * PTS = 4672793074 *偏移量:12554828   元素n?:492

     

(test:3385):GLib-GObject-CRITICAL **:g_value_get_uint64:断言`G_VALUE_HOLDS_UINT64(值)'失败    * PID = 0 * PTS = 4672746274 *偏移量:12556520   元素n?:493

     

(test:3385):GLib-GObject-CRITICAL **:g_value_get_uint64:断言`G_VALUE_HOLDS_UINT64(值)'失败    * PID = 0 * PTS = 4672748074 *偏移量:12605024   元素n?:494

我能做些什么,正确地向我展示PID?

1 个答案:

答案 0 :(得分:0)

GstStructure是键/值对的集合。你可以使用

gchar * gst_structure_to_string (const GstStructure *structure);

显示所有字段。在你的情况下

g_print("%s\n", gst_structure_to_string(gst_message_get_structure(msg)));