首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合GStreamer、AnyEvent和EV (perl)

组合GStreamer、AnyEvent和EV (perl)
EN

Stack Overflow用户
提问于 2011-05-20 22:36:36
回答 2查看 389关注 0票数 4

我正在尝试在一个现有的perl应用程序中使用GStreamer,该应用程序将AnyEvent与EV事件循环结合使用。它不是一个Glib应用程序。我已经加载了EV::Glib来让Glib主循环使用EV。我坦率地承认,关于Glib,我是相当无知的。我认为我已经拥有了我需要的所有部分,但我正在努力(失败)让它们协同工作。

如果我使用一个独立的perl程序来构建一个GStreamer管道,然后将其置于播放状态,那么一切都会简单地工作。我不需要对Glib主循环做任何事情,也不需要在GStreamer总线上做任何事情。

在我现有的应用程序中,在AnyEvent事件处理程序的上下文中构建相同的管道,则它无法运行该管道。我尝试过各种尝试使用它的方法,包括调用$pipeline->get_bus->poll()。如果我在原始事件处理程序中重复调用...->poll() (即处理程序不返回),那么它可以工作,但这显然不是一个有效的解决方案。在AnyEvent计时器回调中调用...->poll()不会运行管道。

我目前最好的猜测是,EV::Glib实现了某种程度的集成,但实际上并没有运行主循环的必要部分。我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2011-11-19 10:53:53

我带着类似的问题来到这里,关于EV::Glib的用法,但最终使用它没有任何问题。所以也许我错过了你想要做的。

下面是我用来测试EV::Glib如何工作的简单脚本:

代码语言:javascript
复制
use EV::Glib;
use Gtk2 '-init';

my $t = EV::timer 1, 1, sub { print "I am here!\n" };
Glib::Timeout->add(1000, sub { print "I am also here!\n" });

my $window = Gtk2::Window->new('toplevel');
$window->signal_connect(delete_event => sub { EV::unloop });

my $button = Gtk2::Button->new('Action');
$button->signal_connect(clicked => sub { 
    print("Hello Gtk2-EV-Perl\n");
});

$window->add($button);
$window->show_all;

EV::loop;

这样,按钮上的信号处理程序就可以工作了,计时器事件也可以工作。因此EV循环将正确地驱动整个过程。

我能看到的主要问题是documentation:“这个模块使Glib与EV兼容。对Glib主循环的调用或多或少等同于对EV::loop的调用(但反之亦然,您必须使用Glib主循环函数)。”这意味着如果你正在连接一个EV::loop事件,它不会等同于一个Glib::mainloop,因此可能不会‘挠挠’(或‘被挠挠’)你的GStreamer事件。也许这就是你遇到的问题,特别是当你使用AnyEvent和它的通用回调时,它们很可能会转换成EV::循环调用,而不是Glib::MainLoop调用。

这只是一种猜测--我自己从来没有使用过GStreamer,如果没有看到更多的代码,我肯定不知道您想要实现什么。但我认为我的半途而废的结论是相当合理的建议:如果您正在使用特定于Glib的东西,那么您可能应该使用Glib将事件与其关联起来。

票数 0
EN

Stack Overflow用户

发布于 2013-12-29 13:16:33

EV::Glib将Glib嵌入到EV中-您(和其他所有人)必须使用EV才能使其工作。gstreamer很可能不知道这一点,并且在内部无礼地调用glib mainloop函数,这是不起作用的。

幸运的是,另一个模块的作用正好相反: Glib::EV。该模块使Glib在内部使用EV。在使用它时,您可以/应该使用glib mainloop函数(您可以使用EV监视器,但不能从EV回调调用glib函数,因为glib不支持)。

它可能更适合您的应用程序,因为使用glib的应用程序将“正常工作”,因为EV的使用完全是内部的。

另一个可能的问题是perl模块是动态链接的,只是“意外”地获得了相同的库。要使所有这些都起作用,您需要确保所有perl模块都链接到相同的共享glib库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6073480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档