2013-07-31 3 views
1

У меня есть проблема problem!Gstreamer: динамически ссылка реализует

Я смущен, как реализовать динамическую связь с элементом «qtdemux» и «декодером»?

Командная строка работает хорошо. и когда с кодом

при запуске

gst-launch-1.0 filesrc location=/root/park-h264.mp4 ! qtdemux ! vaapidecode ! vaapisink 

это работает хорошо, но когда я скомпилировать и запустить следующий код, он потерпел неудачу.

if (!gst_element_link(demux, decoder)) 
    printf("link demux-decoder fail\n"); 

Есть ли какие-либо примеры или спецификации? Спасибо за помощь!

+0

Есть ли кто, что говорит лучше английский, который может помочь вам с вашим вопросом? Я не могу понять, что вы просите, потому что слова не имеют никакого смысла. – xaxxon

+0

@xaxxon Я просто меняю вопрос. моя проблема - есть примеры динамической ссылки. как [проблема] (http://gstreamer-devel.966125.n4.nabble.com/GStreamer-C-Code-to-play-video-td3715064.html) упоминается – syler

ответ

2

У меня есть эта проблема. с помощью this page

следующий код

GstElement *filesrc, *demux, *decoder, *sink; 
static void 
cb_new_pad (GstElement *element, 
      GstPad  *pad, 
      gpointer data) 
{ 
    gchar *name; 

    name = gst_pad_get_name (pad); 
    if (strcmp (name, "video_0") == 0 && 
     !gst_element_link_pads(demux, name, decoder, "sink")) { 
     printf("link demux-decoder fail\n"); 
    } 
    g_free (name); 
} 
static void 
pipeline_init(char *data) 
{ 
    filesrc = gst_element_factory_make ("filesrc", "filesrc"); 
    demux = gst_element_factory_make ("qtdemux", "qtdemux"); 
    decoder = gst_element_factory_make ("vaapidecode", "decoder"); 
    sink = gst_element_factory_make ("vaapisink", "sink"); 

    if (!filesrc || !demux || !decoder || !sink) 
     return; 

    g_object_set (G_OBJECT (filesrc), "location", data, NULL); 

    if (!gst_element_link(filesrc, demux)) { 
     printf("link filesrd--demux fail\n"); 
     return; 
    } 
    if (!gst_element_link(decoder, sink)) { 
     printf("link decoder--sink fail\n"); 
     return; 
    } 

    g_signal_connect (demux, "pad-added", G_CALLBACK (cb_new_pad), NULL); 

} 
Смежные вопросы