Contents

1
GMainLoop *g_main_loop_new(GMainContext *context, gboolean is_running);

参数说明

  • context: 主上下文,用于管理事件源。如果为 NULL,则使用默认的主上下文
  • is_running: 是否立即启动循环。通常设置为 FALSE,稍后手动启动

功能说明

g_main_loop_new 创建一个新的 GMainLoop 对象,它是 GLib 事件循环系统的核心组件:

  1. 事件驱动: 提供一个事件循环,可以处理各种事件源(定时器、IO、空闲处理等)
  2. 阻塞运行: 调用 g_main_loop_run() 后会阻塞当前线程,直到调用 g_main_loop_quit()
  3. 线程关联: 每个线程可以有自己的主循环,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_);