gstreamer 1.0 rtspsrc到rtph264depay无法链接

时间:2015-08-26 17:49:29

标签: gstreamer rtsp

我正在尝试使用gstreamer连接到ubiquiti相机并使用以下命令成功。

gst-launch-1.0 --gst-debug = 4 rtspsrc location =“rtsp://:554 / live / ch00_0”! rtph264depay! h264parse! openh264dec! d3dvideosink

我看看调试,它说无法将padsrtsrc链接到rtph264depay。 Picture

但是它可以正常播放视频。当我把它放入一个c项目时,它说不能将源链接到rtph264parse。我环顾四周说要使用带有以下代码的动态垫

static void on_pad_added (GstElement *element, GstPad *pad, gpointer data)
{
    GstPad *sinkpad;
    GstElement *decoder = (GstElement *) data;
    /* We can now link this pad with the rtsp-decoder sink pad */
    g_print ("Dynamic pad created, linking source/demuxer\n");
    sinkpad = gst_element_get_static_pad (decoder, "sink");
    gst_pad_link (pad, sinkpad);
    gst_object_unref (sinkpad);
}

int main(int argc, char *argv[])
{
   /* Initialize GStreamer */
   gst_init(&argc,&argv);

   /* Build Pipeline */ 
   pipel.pipeline = gst_pipeline_new("My pipeline");
   pipel.source = gst_element_factory_make ("rtspsrc","source");
   g_object_set (G_OBJECT (pipel.source), "latency",2000,NULL);
   pipel.rtppay = gst_element_factory_make( "rtph264depay", "depayl");
   pipel.parse = gst_element_factory_make("h264parse","parse");
   pipel.filter1 = gst_element_factory_make("capsfilter","filter");
   pipel.decodebin = gst_element_factory_make ("openh264dec","decode");
   pipel.sink = gst_element_factory_make("d3dvideosink","sink");

   g_object_set (G_OBJECT (pipel.sink), "sync",FALSE,NULL);

   //create_uri(url,url_size,ip_address,port);
   g_object_set(GST_OBJECT(pipel.source),"location","rtsp://<IP>:554/live/ch00_0",NULL);

   filtercaps = gst_caps_from_string("application/x-rtp");
   g_object_set (G_OBJECT (pipel.filter1), "caps",filtercaps,NULL);

   gst_caps_unref(filtercaps);

   gst_bin_add_many (GST_BIN (pipel.pipeline),pipel.source
                                          ,pipel.rtppay
                                          ,pipel.parse
                                          ,pipel.decodebin
                                          ,pipel.sink
                                          ,NULL);
   if(!gst_element_link(pipel.source,pipel.rtppay))
        printf("\nFailed source to rtppay\n");
   if(!gst_element_link_many(pipel.parse,pipel.decodebin,pipel.sink,NULL))
        printf("\nFailed to link parse to sink");

    g_signal_connect(pipel.rtppay, "pad-added", G_CALLBACK(on_pad_added), pipel.parse);
}

0 个答案:

没有答案