C++ gstreamer将元素添加到通过gst\u parse\u启动创建的管道中

C++ gstreamer将元素添加到通过gst\u parse\u启动创建的管道中,c++,gstreamer,C++,Gstreamer,我正在尝试创建一个管道,然后在创建之后添加一个视频接收器。我需要这样做,以便在提交到管道之前设置videosink的视频覆盖窗口id 所以我有这个密码 pipeline = gst_parse_launch( "filesrc location=file.svg ! rsvgdec ! imagefreeze", &err ); sink = gst_element_factory_make( "glimagesink" ); gst_video_overlay_set_window

我正在尝试创建一个管道,然后在创建之后添加一个视频接收器。我需要这样做,以便在提交到管道之前设置videosink的视频覆盖窗口id

所以我有这个密码

pipeline = gst_parse_launch( "filesrc location=file.svg ! rsvgdec ! imagefreeze", &err );

sink = gst_element_factory_make( "glimagesink" );

gst_video_overlay_set_window_handle( GST_VIDEO_OVERLAY( sink ), this->winId() );

gst_bin_add_many( GST_BIN( pipeline ), sink, nullptr );

if ( !gst_element_link_many( pipeline, sink, nullptr ) )
{
    qCritical() << "Unable to link elements";
}
pipeline=gst\u parse\u启动(“filesrc location=file.svg!rsvgdec!imagefreeze”,&err);
水槽=gst元件工厂制造(“glimagesink”);
gst_视频_覆盖_设置_窗口_句柄(gst_视频_覆盖(接收器),this->winId());
gst_-bin_-add_-many(gst_-bin(管道)、水槽、空PTR);
if(!gst\u元素\u链接\u多(管道、接收器、空PTR))
{

qCritical()您无法将其连接到存储箱。您需要指定一个焊盘或一个元素,从中尝试拾取焊盘。因此,您需要遍历存储箱并从列表中拾取
imagefreeze
元素

替代方法-添加水槽并从管道中获取:

pipeline = gst_parse_launch( "filesrc location=file.svg ! rsvgdec ! imagefreeze ! glimagesink name=mysink", &err );

GstElement *sink = gst_bin_get_by_name( GST_BIN( pipeline ), "mysink" );

gst_video_overlay_set_window_handle( GST_VIDEO_OVERLAY( sink ), this->winId() );

gst_object_unref( sink );
您可能会遇到困难,因为您可能需要
videoconvert
来满足接收器的格式要求

filesrc location=file.svg ! rsvgdec ! imagefreeze ! videoconvert ! glimagesink
或许

filesrc location=file.svg ! rsvgdec ! imagefreeze ! glupload ! glcolorconvert ! glimagesink

谢谢,谢谢你的帮助。