gpt4 book ai didi

video - GStreamer 的最低开销源格式?

转载 作者:行者123 更新时间:2023-11-29 08:14:04 25 4
gpt4 key购买 nike

我需要在 Rust 中生成一个实时叠加层以用作 GStreamer 源。

我有一些可变变量;需要叠加在 1080p60 视频流上的字符串数组和一些传感器数据。

最好是生成原始流,还是首先编码为 MJPG?在 Rust 应用程序和 GStreamer 之间,哪种方法的总开销最少?

最佳答案

此处有多个选项供您选择,具体取决于您希望如何生成叠加层。我不建议通过 MJPEG 或其他任何方式,而只是处理原始视频。这对于 Rust GStreamer 绑定(bind)来说非常方便,并且基本上具有尽可能低的开销。

1) 生成覆盖原始视频流,每一帧在没有覆盖的地方都是完全透明的。这可以类似于 Rust GStreamer 绑定(bind)中的 appsrc 示例来完成 here

然后您可以将其传递给合成器元素(或 glvideomixer 或其他使用某些硬件 API 的混合器元素),它可以合成您的普通视频流和覆盖流。

为了生成叠加层,您可以使用任何您想要的 API,这些 API 可以在 ARGB(或任何其他原始视频格式)之上渲染文本等。一种选择是开罗,它也有 Rust 绑定(bind)。​​

与下一个解决方案相比,它的缺点是您必须生成完整的视频帧,合成器必须为每个帧生成另一个视频帧。必须进行大量复制。

2) 您可以在 Rust 中编写一个 GStreamer 元素作为视频过滤器并在视频帧上绘制叠加层。有一个示例视频过滤器 here我写了一篇文章来解释每个部分 here

你不必在 src/lib.rs 中做所有的插件初始化工作,但可以只在你的应用程序中有 RGB2Gray 转换器的源文件的等价物,并在代码开头的某处调用 register 函数.

视频过滤器本身也会更简单一些,因为输入和输出格式将相同。

为了生成叠加层,您可以使用任何您想要的 API,这些 API 可以在 ARGB(或任何其他原始视频格式)之上渲染文本等。一种选择是开罗,它也有 Rust 绑定(bind)。​​

除了可能需要的视频格式转换(如果输入视频的格式不同于您支持在其上绘制的格式),这将是最有效的方法。

3) 利用cairooverlay GStreamer 元素。它基本上像 2) 一样工作,并直接为您提供 Cairo 上下文,然后您可以使用它在视频帧顶部绘制任何您想要的内容。对于通过元素的每一帧,您都会收到一个带有 Cairo 上下文的信号(“绘制”信号)。

但是那时您必须使用 Cairo API,并且您可能必须向 Rust Cairo 绑定(bind)添加一些 API 扩展。我不能 100% 确定所需的一切是否已经可用。

关于video - GStreamer 的最低开销源格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com