有没有一种方法可以将视频帧从GStreamer转换为SkImage实例,以便在Skia中使用



我目前正在用媒体的GStreamer和图形的Skia(Vulkan(编写我自己的游戏引擎。有没有一种方法可以将视频帧从GStreamer转换为SkImage实例,以便在Skia中使用?

我在网上搜索了文档和解决方案,但我发现我可以通过fakesink从GStreamer获得GstBuffer。不确定这是否有任何帮助。

您基本上需要app_sink.rsapp_src.rs示例的组合https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/tree/master/examples/src/bin。

第一个演示了如何从管道中获取(在本例中为音频(缓冲区。您将为每个到达的缓冲区调用一个回调。然后你可以选择

  1. 从回调中提取它们,并通过某种通道将它们传递给您的skia代码
  2. 只需通知您的skia代码有可用的缓冲区,然后从skia代码中提取它
  3. 直接从skia代码中提取:这将阻止,直到有缓冲区可用

第二个演示如何使用gst_video::VideoFrameAPI映射gst::Buffer并访问原始视频数据。这应该可以让你以某种方式把它传给skia。我不知道skia是怎么工作的,所以你必须自己弄清楚这个部分。

您还需要确保GStreamer以正确的格式为您提供数据,例如ARGB。app_sink.rs示例通过在appsink元素上设置上限来实现这一点,在您的情况下,您希望在那里设置相应的视频上限,以描述skia想要的格式。

该目录中另一个可能有用的示例是glupload.rs示例。它使用appsink来获得作为GL纹理的GStreamer缓冲区,然后通过glutin渲染它们。Vulkan也可能出现类似的情况,但目前GStreamer Vulkan库还不是绑定的一部分。

相关内容

  • 没有找到相关文章

最新更新