【问题标题】:GStreamer Window management with XOverlay使用 XOverlay 进行 GStreamer 窗口管理
【发布时间】:2013-11-17 17:42:23
【问题描述】:

我正在尝试编写一个媒体播放器应用程序,该应用程序将在使用 GStreamer 0.10.36 的 ARM 处理器上运行。我的目标是让两个视频之间的过渡期尽可能短,并希望完全消除它。目前为了实现这一点,我正在使用两个管道,每个管道都有自己的源和接收器。我使用的处理器允许使用相同类型的多个接收器垫(我使用的是 Freescale i.MX6Q mfw_isink 元件)。当我到达第一个视频的结尾时,我改变了管道的状态,以便第二个视频开始播放。在看到第二个视频之前可能会有半秒的延迟,在此期间桌面是可见的。我相信正在发生的事情是第二个视频在播放之前打开了一个新窗口。如果这是真的,那么我需要使用 XOverlay 窗口 ID 来告诉第二个视频要在哪个窗口中打开,但我不确定这样做实际上需要什么。我看到的所有 xoverlay 示例都在其中添加了大量 GUI 代码,但我无法确定是什么。

有人可以解释一下获取/设置窗口 ID 需要什么,以便我始终可以在同一个窗口中玩吗?我将其编写为 C++ 应用程序,并且可以使用 GTK+ 2.0,但我想远离任何 QT 方法。

提前谢谢你, 乔什·库兰德

【问题讨论】:

    标签: video gtk gstreamer


    【解决方案1】:

    gst-plugins-base/tests/examples/overlay/ 提供了如何将叠加层与各种工具包一起使用的示例。关于延迟,最好使用 playbin,因为它具有无缝播放的功能。当接近第一个视频的结尾时,它将准备第二个视频。最后考虑使用 gstreamer-1.X,因为 0.10 处于维护模式。

    【讨论】:

    • 谢谢,我会看看那个例子。我在我的应用程序中使用 playbin(2),但我不知道它能够无缝播放。我已经对“即将完成”的信号进行了试验,但我的印象是它在 0.10 上已被弃用并且非常有问题,并且还针对音频应用程序而不是视频应用程序。至于使用 1.x 版和 0.10 版,我希望这是一个选项,几乎我一直在尝试做的所有事情在 1.x 上都更容易。我正在为 ARM 板进行开发,据我所知,1.x 端口并没有被积极开发。
    【解决方案2】:

    使用gtk_widget_get_window(),您可以获得任何已实现小部件的GdkWindow。如果您需要它的 X ID,请使用GDK_WINDOW_XID()

    使用gtk_widget_set_window() 设置小部件的GdkWindow。阅读文档以了解注意事项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 2014-11-17
      相关资源
      最近更新 更多