如何在Windows中使用d3dvideosink在窗口的一部分中显示视频

时间:2019-12-18 14:51:10

标签: gstreamer hwnd

我编写了以下gstreamer函数,以在Windows的Win32窗口(HWND)上显示videotestsrc视频。此功能可以完美运行,并在给定的“ win”窗口句柄的整个窗口中显示videotestsrc。

void runGstPipe(HWND win)
{
    GstElement *pipeline =
    gst_parse_launch
        ("rtspsrc location=\"...\" ! decodebin ! d3dvideosink name=sink", NULL);

    GstElement *sink = gst_bin_get_by_name(GST_BIN(pipeline), "sink");
    gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(sink), (guintptr)win);
    GstStateChangeReturn sret = gst_element_set_state(pipeline,
            GST_STATE_PLAYING);
}

接下来,我尝试使用以下选项来增强上述功能,以在“ win”窗口的一部分中显示videotestsrc。

a)通过如下使用glimagesink和render-rectangle选项

"rtspsrc location=\"...\" ! decodebin ! glvideosink render-rectange=\"<50, 50, 200, 150>\" name=sink"

b)通过如下使用gst_video_overlay_set_render_rectangle

gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(sink), 50, 50, 200, 150);

以上两个选项均未更改渲染区域。即videotestsrc仍然占据整个窗口,而不是给定的坐标。谢谢,如果我能得到任何建议。

0 个答案:

没有答案