我想编写(但首先我想了解如何去做)基于 GStreamer 框架的应用程序(多个),它们将同时共享相同的硬件资源。
例如:有一个硬件带有硬件加速,用于视频解码。我想同时启动两个能够使用硬件加速解码不同视频流的应用程序。当然,我假设 HW 能够处理此类请求,有适当的驱动程序(但不是 GStreamer 元素)来执行此操作,但是如何编写支持在单独进程之间共享此类资源的 GStreamer 元素?
我将不胜感激任何链接,建议从哪里开始......
我想编写(但首先我想了解如何去做)基于 GStreamer 框架的应用程序(多个),它们将同时共享相同的硬件资源。
例如:有一个硬件带有硬件加速,用于视频解码。我想同时启动两个能够使用硬件加速解码不同视频流的应用程序。当然,我假设 HW 能够处理此类请求,有适当的驱动程序(但不是 GStreamer 元素)来执行此操作,但是如何编写支持在单独进程之间共享此类资源的 GStreamer 元素?
我将不胜感激任何链接,建议从哪里开始......
您有可以同时访问的硬件。因此,同时访问它的两个 gstreamer 元素应该可以工作!这里没有具体的 Gstreamer。
假设您想编写一个解码元素,它就像任何解码元素一样,并且您可以正确访问您的硬件。您的驱动程序应该处理并发访问。起点是 Gstreamer 插件编写者指南。
因此,您需要一个控制硬件解码器并解码来自多个源的流的单个进程。
我建议构建一个守护进程,它本身也可能基于 GStreamer。gdppay 和 gdpdepay 提供了非常简单的方法来通过套接字将数据传递到守护程序并返回。守护进程将等待指定端口(或 unix 套接字)上的连接,并为每个连接打开一个虚拟解码器。单独应用程序中的视频解码器元素将在内部连接到守护程序并取回解码的视频。