1
|
GMainLoop *g_main_loop_new(GMainContext *context, gboolean is_running);
|
参数说明
context: 主上下文,用于管理事件源。如果为 NULL,则使用默认的主上下文
is_running: 是否立即启动循环。通常设置为 FALSE,稍后手动启动
功能说明
g_main_loop_new 创建一个新的 GMainLoop 对象,它是 GLib 事件循环系统的核心组件:
- 事件驱动: 提供一个事件循环,可以处理各种事件源(定时器、IO、空闲处理等)
- 阻塞运行: 调用
g_main_loop_run() 后会阻塞当前线程,直到调用 g_main_loop_quit()
- 线程关联: 每个线程可以有自己的主循环,GStreamer 元素通常在创建它们的线程上下文中运行
GStreamer 生命周期管理
1. 初始化阶段
1
|
gst_init(nullptr, nullptr); // 初始化 GStreamer 库
|
2. 管道创建阶段
1
2
3
4
5
6
7
8
9
10
11
12
|
// 创建主循环
loop_ = g_main_loop_new(nullptr, FALSE);
// 创建管道和元素
pipeline_ = gst_pipeline_new("name");
// ... 创建其他元素并添加到管道
// 链接元素
gst_element_link_many(...);
// 设置状态
gst_element_set_state(pipeline_, GST_STATE_PLAYING);
|
3. 运行阶段
1
2
|
// 启动事件循环,阻塞当前线程
g_main_loop_run(loop_);
|
4. 清理阶段
1
2
3
4
5
6
7
8
9
|
// 退出主循环
g_main_loop_quit(loop_);
// 设置管道状态为 NULL
gst_element_set_state(pipeline_, GST_STATE_NULL);
// 释放资源
gst_object_unref(pipeline_);
g_main_loop_unref(loop_);
|