c - GStreamer gst_pad_get_offset 和 gst_pad_set_offset 不起作用
问题描述
首先我想澄清一下我的英语说得不是很好,所以如果我表达得不好,请提前道歉。
语境
根据命令gst-inspect-1.0 --gst-version,我有gstreamer 的1.14.5版本。
我开始了一个动态 gstreamer 项目,其简化的管道结构如下所示(显然我指定我使用编程语言而不是 gst-launch):
AnElementNoMatterWhich ! videomixer ! AnElementNoMatterWhich ! tee ! queue ! AnElementNoMatterWhich
现在想象一下,在10 秒后,我想添加一个元素,无论是什么女巫,到videomixer 接收器。或者假设我想在tee src 中添加一个项目(这与videomixer相同,只是我会在 tee 和元素之间添加一个尾巴,以免阻塞其他分支)。
在流进入 videomixer 的 sink pad 之前大约需要 10 秒。同样适用于三通的 src 垫。以此类推,在管道中添加元素(并将其连接到 videomixer 或 tee)之前花费的时间与 videomixer 和/或 tee pad 在传递流之前必须等待的时间大致相同。
与新创建的视频混音器和/或 T 形垫相比,这一切都可以通过管道执行的差异来解释。
这就是gst_pad_get_offset()和gst_pad_set_offset()两个方法发挥作用的地方。
我的问题
首先,我无法理解偏移单元(gint64)是什么。是时间单位吗?毫秒?微秒?纳秒?或者是别的什么 ?
我也不明白为什么gst_pad_get_offset()总是返回0。但是,如果我希望能够使用gst_pad_set_offset()方法设置正确的偏移量,则必须获取偏移量。根据文档,我必须在src pad上进行操作,但是在哪里?
最后我不明白为什么gst_pad_set_offset()不起作用。我显然在新创建的 videomixer 的 sink pad 或 tee (whatever)的 src pad 上运行它。它不会改变任何东西。此外,如果我有将值 10(例如)赋予 gst_pad_set_offset () 的想法,然后我在同一个焊盘上运行 gst_pad_get_offset (),理论上我应该有值 10。但是,我总是得到 0。它是好像 gst_pad_get_offset() 和 gst_pad_set_offset() 还没有实现。
我遵循了所有 gstreamer 教程并在论坛上呆了几天。我不知道该怎么办。但是,我知道如果没有这两种方法的正常运行,我的项目就会被阻止。我能做些什么 ?你有想法吗 ?
解决方案
是的,消费税没有很好的记录。
- 纳秒
- 默认情况下,偏移量为 0。您可以更改它,之后 get_offset 将返回新值
- 你可以使用这样的结构,对我来说它有效(Gst 1.18.4):
tee = pipe.get_by_name('t')
tee.srcpads[0].set_offset(1000000000)
在这个例子中,Tee 的第一个 src pad 将被延迟到 1 秒。
推荐阅读
- javascript - 如何通过 npm cli 将 env 变量传递给 rollup.config.js?
- html - 如何选择除特定 div 内的元素之外的所有元素
- ios - 我们可以为 2 个不同的国家/地区发布具有 1 或 2 个不同功能的相同应用程序吗?
- python - 无法通过使用 openpyxl 的列标题读取内容
- javascript - 在打字稿中获取输入值
- java - 如果插件 jar 中不同的 jar 具有相同的类名,则访问类
- algorithm - 如何证明完整二叉堆(min-heap)中第 k 个最小元素的预期深度为 O(logk)?
- server - 在 WSO2 身份服务器 5.8.0 中声明方言错误
- javascript - 如何使用 es6 过滤对象值
- git - git 子树与 Gerrit 兼容吗?