运行 每个 GStremer 管道到一个单独的 (GLib) 线程
Running every GStremer pipeline into a separate (GLib) thread
所有 GStremer 样本都通过以下某种形式初始化 GLib 主胎面:
loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(loop);
据我了解,这个主循环用于所有信号处理。
总线消息也在其中处理。
所以我有点担心如果我同时 运行 多个管道会发生什么。
或者其中一些有一个 issue/improper 实现。
很可能对于重负载,最好的解决方案是将管道分离到多个进程,从而减轻内存泄漏、挂起、死锁等所有可能的问题,而不影响主应用程序。
无论如何,至少 运行将它们分成单独的线程是有益的。
显然可以启动多个 GLib 主线程,首先创建 GMainContext。但是我无法理解(显然我缺少知识)之后如何 "assign" 他们到管道或向他们发信号等。
例如在"g_signal_connect"和"g_signal_emit"中没有指定在哪个"main"线程上执行。
这里有些 post 声称这是可能的(GStreamer 支持不同的主线程),但我找不到详细信息。
this 线程中讨论了类似的问题,但老实说我无法理解它。
在 this Whosebug post 中讨论了如何将超时附加到不同的 GLib 主线程。
我想可以为 GStreamer 管道和对象制作类似的东西,但我不确定。
谁能给我一点启发?
我将在 GStreamer-devel 论坛中发布相同问题的答案:
http://gstreamer-devel.966125.n4.nabble.com/Running-every-GStremer-pipeline-into-a-separate-GLib-thread-td4694469.html
引用:
GMainLoop 对于 GStreamer 是可选的(方便但可选)。你可以
直接使用 GstBus API。至于信号,它们是同步的,并且
不使用消息。
如果您决定使用 GMainLoop,您将只需要一个来处理
异步消息,因为所有消息都被序列化到循环中
队列。多管道是因为你不方便而变得方便
必须处理多个 GstBus 对象。
Streamer 已经将流媒体拆分为单独的线程。这
mainloop 线程始终可以用于其他任务(如 UI 任务)。
:引用结束
所有 GStremer 样本都通过以下某种形式初始化 GLib 主胎面:
loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(loop);
据我了解,这个主循环用于所有信号处理。 总线消息也在其中处理。
所以我有点担心如果我同时 运行 多个管道会发生什么。 或者其中一些有一个 issue/improper 实现。
很可能对于重负载,最好的解决方案是将管道分离到多个进程,从而减轻内存泄漏、挂起、死锁等所有可能的问题,而不影响主应用程序。
无论如何,至少 运行将它们分成单独的线程是有益的。
显然可以启动多个 GLib 主线程,首先创建 GMainContext。但是我无法理解(显然我缺少知识)之后如何 "assign" 他们到管道或向他们发信号等。 例如在"g_signal_connect"和"g_signal_emit"中没有指定在哪个"main"线程上执行。
这里有些 post 声称这是可能的(GStreamer 支持不同的主线程),但我找不到详细信息。
this 线程中讨论了类似的问题,但老实说我无法理解它。
在 this Whosebug post 中讨论了如何将超时附加到不同的 GLib 主线程。 我想可以为 GStreamer 管道和对象制作类似的东西,但我不确定。
谁能给我一点启发?
我将在 GStreamer-devel 论坛中发布相同问题的答案: http://gstreamer-devel.966125.n4.nabble.com/Running-every-GStremer-pipeline-into-a-separate-GLib-thread-td4694469.html
引用:
GMainLoop 对于 GStreamer 是可选的(方便但可选)。你可以 直接使用 GstBus API。至于信号,它们是同步的,并且 不使用消息。
如果您决定使用 GMainLoop,您将只需要一个来处理 异步消息,因为所有消息都被序列化到循环中 队列。多管道是因为你不方便而变得方便 必须处理多个 GstBus 对象。
Streamer 已经将流媒体拆分为单独的线程。这 mainloop 线程始终可以用于其他任务(如 UI 任务)。
:引用结束