Gstreamer 0.10通过键盘切换输出选择器

Gstreamer 0.10通过键盘切换输出选择器,gstreamer,Gstreamer,我使用的是gstreamer 0.10版本。 我的用例有两个分支(tee元素)。其中一个我有->解码器->T恤->jpegenc->输出选择器->伪造链接 ->多叶水槽 这是在应用程序中实现的。现在,我使用g_timeout_add在两个输出之间切换,但在这种情况下,如果它连接到fakesink,则会同时连接到多文件接收器。我想存档:如果我按下一个按钮只将一帧保存为jpg。如果我再次按下它,我应该以不同的名称保存它(这就是为什么我使用multifilesink,filesink将覆盖它)。有人能

我使用的是gstreamer 0.10版本。 我的用例有两个分支(tee元素)。其中一个我有->解码器->T恤->jpegenc->输出选择器->伪造链接 ->多叶水槽


这是在应用程序中实现的。现在,我使用g_timeout_add在两个输出之间切换,但在这种情况下,如果它连接到fakesink,则会同时连接到多文件接收器。我想存档:如果我按下一个按钮只将一帧保存为jpg。如果我再次按下它,我应该以不同的名称保存它(这就是为什么我使用multifilesink,filesink将覆盖它)。有人能帮我提供一些提示吗?我怎样才能用键盘上的事件来存档呢 这更像是一个如何从控制台读取字符的例子。您可以使用getchar()或GIOChannel,因为您的应用程序()可能还需要一个mainloop。使用GIOChannel的示例。这里可以找到一个示例应用程序:(虽然它等待读取整行内容,但您可以根据需要进行修改)


另一个关于管道的建议是在jpegenc之前使用输出选择器,以避免仅仅为了丢弃而对图像进行编码。此外,通过使用缓冲垫探测,可能更容易实现您想要的结果,该探测将返回FALSE以删除缓冲区,或返回TRUE以使其在0.10中通过,或返回_dropand _OK以1.0(选择1.0!)。这将比为您的案例使用输出选择器更容易。

如何使用此缓冲垫探针以及如何使用gstreamer 0.10的键盘事件控制它?在1.0中(我建议您使用)或参考以获取过时的API。文档中包含了一些示例,我在上面的回复中包含了一个使用GIOChannel读取键盘(读取整行)的示例。当您编写代码时,您可以在此处共享它,以供其他人将来参考。事实上,现在我可以在0.10上管道处于播放状态时取消链接并链接FileLink元素。我删除了输出选择器,在这种情况下,我只是不需要它。谢谢你的帮助。我遇到了另一个问题:如何检查src缓冲区是否包含完整的帧?这样我可以检查我的框架,但我需要任何框架不在乎是我。(GST_BUFFER_FLAG_是_SET(BUFFER,GST_BUFFER_FLAG_DELTA_UNIT)){返回FALSE;}否则如果(!GST_BUFFER_FLAG_是_SET(BUFFER,GST_BUFFER_FLAG_IN_CAPS)){返回TRUE;}