gstreamer 将元素添加到通过 gst_parse_launch 创建的管道
gstreamer add an element to a pipline created through gst_parse_launch
我正在尝试创建一个管道,然后在创建它之后添加一个视频接收器。我需要这样做,以便在将视频接收器提交到管道之前设置视频覆盖 window 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";
}
当我 运行 它无法 link 元素。
知道为什么会这样。我假设这是因为我试图 link 一个元素到 "bin" 而不是另一个元素。但是,我看不到有人将元素添加到通过 gst_parse_launch.
创建的管道的任何示例
您无法将其连接到回收站。您需要指定一个 pad - 或者它试图从中选择一个 pad 的元素。因此,您需要遍历 bin 并从列表中选择 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
我正在尝试创建一个管道,然后在创建它之后添加一个视频接收器。我需要这样做,以便在将视频接收器提交到管道之前设置视频覆盖 window 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";
}
当我 运行 它无法 link 元素。
知道为什么会这样。我假设这是因为我试图 link 一个元素到 "bin" 而不是另一个元素。但是,我看不到有人将元素添加到通过 gst_parse_launch.
创建的管道的任何示例您无法将其连接到回收站。您需要指定一个 pad - 或者它试图从中选择一个 pad 的元素。因此,您需要遍历 bin 并从列表中选择 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