2017-01-23 12 views
0

rtspsrc 요소 속성 이름을 사용하여 오디오 및 비디오 큐를 연결하려고합니다. 파이프 라인은rtspsrc의 이름 요소를 오디오 및 비디오 큐와 연결하기위한 Gstreamer 응용 프로그램

gst-launch-1.0 rtspsrc location = "rtsp : //"latency = 0 name = demux demux입니다. ! 대기열! rtpmp4gdepay! aacparse! avdec_aac! audioconvert! 오디오 샘플! autoaudiosink demux. ! 대기열! rtph264depay! h264parse! omxh264dec! videoconvert! videoscale! video/x-raw, 너비 = 176, 높이 = 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); 

연결 절차 도움말은 매우

답변

1

videoConvert을 감사하고 videoScale은을 togheter, 당신이해야 연결되지 않은

/*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; 
    } 

: 코드의 부분은 다음과 그들을 연결하십시오.

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

대신 내가 gst_element_link_many에 추가 한 것 gst_element_link_filtered 호출 :

내가 capfilter 요소

videoCaps = gst_element_factory_make("capsfilter",NULL);

을 만든 것

필터를 추가

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