2017-01-23 15 views
0

Я пытаюсь связать аудио и видео очередь с использованием имени свойства элемента rtspsrc. Трубопровод:Приложение Gstreamer для связывания элемента name rtspsrc со звуковой и видео-очередью

gst-launch-1.0 rtspsrc location = "rtsp: //" latency = 0 name = demux demux. ! очередь ! rtpmp4gdepay! aacparse! avdec_aac! аудиоконвертер! audioresample! автоаудиоиндика demux. ! очередь ! rtph264depay! h264parse! omxh264dec! видеоконвертер! videocale! video/x-raw, width = 176, height = 144! ximagesink

я мог бы создать значение имени элемента с помощью

g_object_set (источник, "название", "демультиплексор", NULL);

Но я не могу связать очереди аудио и видео, поэтому создайте. Ниже приводится часть кода:

audio = gst_bin_new ("audiobin"); 
audioQueue = gst_element_factory_make ("queue", "audio-queue"); 
audioDepay = gst_element_factory_make ("rtpmp4gdepay", "audio-depayer"); 
audioParse = gst_element_factory_make ("aacparse", "audio-parser"); 
audioDecode = gst_element_factory_make ("avdec_aac", "audio-decoder"); 
audioConvert = gst_element_factory_make ("audioconvert", "aconv"); 
audioResample = gst_element_factory_make ("audioresample", "audio-resample"); 
audioSink = gst_element_factory_make ("autoaudiosink", "audiosink"); 

видео бен

video = gst_bin_new ("videobin"); 
videoQueue = gst_element_factory_make ("queue", "video-queue"); 
videoDepay= gst_element_factory_make ("rtph264depay", "video-depayer"); 
videoParser = gst_element_factory_make ("h264parse", "video-parser"); 
videoDecode = gst_element_factory_make ("omxh264dec", "video-decoder"); 
videoConvert = gst_element_factory_make("videoconvert", "convert"); 
videoScale = gst_element_factory_make("videoscale", "video-scale"); 
videoSink = gst_element_factory_make("ximagesink", "video-sink"); 
capsFilter = gst_caps_new_simple("video/x-raw", 
        "width", G_TYPE_INT, 176, 
        "height", G_TYPE_INT, 144, 
        NULL); 

Связывание процедура

/*Linking filter element to videoScale and videoSink */ 
    link_ok = gst_element_link_filtered(videoScale,videoSink, capsFilter); 
    gst_caps_unref (capsFilter); 
    if (!link_ok) { 
      g_warning ("Failed to link element1 and element2!"); 
    } 
    /* Linking video elements internally */ 
    if (!gst_element_link_many(videoQueue, videoDepay, videoParser, videoDecode, videoConvert, NULL)) 
    { 
      g_printerr("Cannot link videoDepay and videoParser \n"); 
      return 0; 
    } 
    if (!gst_element_link_many(audioQueue, audioDepay, audioParse, audioDecode, audioConvert, audioResample, audioSink, NULL)) 
    { 
      g_printerr("Cannot link audioDepay and audioParse \n"); 
      return 0; 
    } 

Помощь высоко ценится

ответ

1

videoConvert и videoScale не связаны между собой совмещены, вы должны свяжите их.

Я бы создал capfilter элемент

videoCaps = gst_element_factory_make("capsfilter",NULL);

добавлен фильтр:

g_object_set (videoCaps , "caps", capsFilter, NULL);

и вместо вызова gst_element_link_filtered я бы добавил его gst_element_link_many:

gst_element_link_many(videoQueue, videoDepay, videoParser, videoDecode, videoConvert,videoScale, videoCaps, videoSink, NULL));