簡體   English   中英

Gstreamer元素未鏈接

[英]Gstreamer Elements not linking

我是Gstreamer的新手,我有一個問題,為什么我的元素無法鏈接在一起。 這是我的代碼:

CustomData data;

data.videosource = gst_element_factory_make("uridecodebin", "source");
cout << "Created source element " << data.videosource << endl;
data.demuxer = gst_element_factory_make("qtdemux", "demuxer");
cout << "Created demux element " << data.demuxer << endl;
data.decoder = gst_element_factory_make("ffdec_h264", "video-decoder");
cout << "Went to the video path " << data.decoder << endl;          
data.videoconvert = gst_element_factory_make("ffmpegcolorspace", "convert"); 
cout << "Created convert element " << data.videoconvert << endl;
data.videosink = gst_element_factory_make("autovideosink", "sink");
cout << "Created sink element " << data.videosink << endl;

if (!data.videosource ||!data.demuxer || !data.decoder || !data.videoconvert || !data.videosink)
{
    g_printerr ("Not all elements could be created.\n");
    system("PAUSE");
    return;
}

//Creating the pipeline
data.pipeline = gst_pipeline_new("video-pipeline");
if (!data.pipeline)
{
    g_printerr ("Pipeline could not be created.");
}


//Setting up the object
g_object_set(data.videosource, "uri", videoFileName[camID] , NULL);
//videoFileName[camID] is a char** with the content uri=file:///C://videofiles/...mp4


//Adding elements to the pipeline
gst_bin_add_many(GST_BIN (data.pipeline), data.videosource, data.demuxer, data.decoder, data.videoconvert, data.videosink, NULL);
//This is where the issue occurs
   if(!gst_element_link(data.videosource, data.demuxer)){
        g_printerr("Elements could not be linked. \n");
        system("PAUSE");
        return;
}

我想做的是分解mp4文件並僅顯示視頻內容,但是由於某些原因,當我嘗試鏈接源和多路分配器時,它顯示為false。

非常感謝你們!

讓我們看一下您正在使用的管道(為簡潔起見,我將在這里使用gst-launch ,但對於任何GStreamer管道也是如此):

gst-launch uridecodebin uri=file:///path/to/movie.avi \
   ! qtdemux ! ffdec_h264 ! ffmpegcolorspace \
   ! autovideosink

gst-inspect uridecodebin狀態:
自動插入URI並將其解碼到原始媒體

因此, uridecodebin可以獲取任何音頻/視頻源,並通過內部使用GStreamer的其他一些元素對其進行解碼。
其輸出類似於video/x-raw-rgbaudio/x-raw-int (原始音頻/視頻)

另一方面, qtdemux接收QuickTime流(仍進行編碼)並將其解復用。

但是在您的示例中得到的是已經解碼的原始視頻(這就是為什么它不會鏈接)的原因。

因此,您基本上有兩個選擇:

  • 只需使用uridecodebin

     gst-launch uridecodebin uri=file:///path/to/movie.avi \\ ! autovideosink 

    這將使您的管道幾乎可以解碼任何視頻文件

  • 只需使用qtdemux ! ffdec_h264 ! ffmpegcolorspace qtdemux ! ffdec_h264 ! ffmpegcolorspace qtdemux ! ffdec_h264 ! ffmpegcolorspace元素:

     gst-launch filesrc=/path/to/movie.avi \\ ! qtdemux ! ffdec_h264 ! ffmpegcolorspace ! autovideosink 

但是請記住,您的管道無法播放音頻。
要獲得此效果,請執行以下任一操作:

  • 只需使用playbin2

     gst-launch playbin2 uri=file:///path/to/movie.avi 
  • 您連接decodebin到音頻接收器以及GST推出uridecodebin名= d URI = ...! 自動視頻接收器d。 自動音頻接收器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM