Linux Pulseaudio深度解析之pa_context_get_sink_info_list调用流程与实战(一百零三)
简介CSDN博客专家、《Android系统多媒体进阶实战》作者博主新书推荐《Android系统多媒体进阶实战》Android Audio工程师专栏地址Audio工程师进阶系列【原创干货持续更新中……】Android多媒体专栏地址多媒体系统工程师系列【原创干货持续更新中……】专题一 二AAOS车载系统AOSP14系统攻城狮入门视频实战课专题三Android14 Binder之HIDL与AIDL通信实战课专题四Android15快速自定义与集成音效实战课专题五Android15音频策略实战课专题六Android15音频性能实战课(无声/杂音/断音/爆音实战案例)人生格言人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药.更多原创,欢迎关注Android系统攻城狮文章目录1. 前言要点概括2. 应用场景与用法函数原型参数说明返回值应用场景3. 调用流程剖析3.1 核心步骤1. 应用层发起请求2. 创建 pa_operation3. 封装协议数据4. 发送到 PulseAudio Server5. 服务端遍历 Sink 列表6. 提取每个输出设备的属性信息7. 逐条返回查询结果8. 触发回调并发送结束标记3.2 调用流程图3.3 Sink 列表查询生命周期图4. 实战应用案例5. 一句话总结1. 前言本篇目的Linux PulseAudio 深度解析之pa_context_get_sink_info_list调用流程与实战。要点概括核心功能查询当前 PulseAudio Server 中所有输出设备Sink的详细信息。工作机制客户端通过 Native Protocol 向 PulseAudio Daemon 发送 Sink 列表查询请求服务端遍历core-sinks并把每一个pa_sink的信息逐条回调给客户端。典型用途输出设备列表展示、默认输出设备选择、音量面板开发、音频路由调试。2. 应用场景与用法pa_context_get_sink_info_list()是 PulseAudio 输出设备管理体系中的列表查询接口。在 PulseAudio 中Speaker、Headphone、HDMI、Bluetooth Speaker 这类输出端最终都会对应一个pa_sink对象。而该接口用于一次性枚举当前系统中所有 Sink 输出设备。函数原型pa_operation*pa_context_get_sink_info_list(pa_context*c,pa_sink_info_cb_tcb,void*userdata);参数说明c:PulseAudio Context cb:信息返回回调 userdata:用户私有数据返回值返回 pa_operation 对象用于查询操作状态、管理生命周期以及等待服务端返回完整 Sink 列表结果。应用场景pa_context_get_sink_info_list()常见应用场景主要有三类。第一类是输出设备列表展示。系统音量面板、音频设置工具或播放器设置页面需要展示当前系统中可用的输出设备例如内置扬声器、耳机、HDMI、蓝牙音箱等。通过该接口可以一次性获取所有pa_sink的名称、描述、音量、静音状态、采样格式、声道布局和驱动信息。第二类是默认输出设备选择。在实现“选择播放设备”“切换到 HDMI 输出”“切换到蓝牙音箱”这类功能时需要先通过pa_context_get_sink_info_list()获取完整 Sink 列表再根据设备名称、描述、Index、Proplist 等信息匹配目标输出设备。第三类是音频调试与路由分析。在排查播放异常时可以通过该接口查看所有输出设备的状态、音量、静音标记、采样率、声道数、Driver 名称等信息用来判断设备是否被 PulseAudio 正确识别、是否处于可用状态以及播放流是否有可能路由到正确的 Sink。3. 调用流程剖析3.1 核心步骤1. 应用层发起请求pa_context_get_sink_info_list(context,sink_info_cb,userdata);2. 创建 pa_operation内部创建pa_operation表示查询 Sink 列表操作。3. 封装协议数据构造GET_SINK_INFO_LIST请求。与pa_context_get_sink_info_by_index()不同列表查询不需要传入单个 Sink Index。4. 发送到 PulseAudio Server通过Native Protocol发送到 Daemon。5. 服务端遍历 Sink 列表内部遍历core-sinks逐个获取当前系统中的pa_sink对象。6. 提取每个输出设备的属性信息对每个pa_sink读取名称、描述、音量、Mute 状态、Driver、SampleSpec、ChannelMap、Monitor Source 等信息。7. 逐条返回查询结果服务端把每一个 Sink 信息封装成 Reply并逐条发送给客户端。8. 触发回调并发送结束标记客户端会多次进入sink_info_cb(...)每次回调对应一个 Sink当eol 0时表示列表查询结束。3.2 调用流程图3.3 Sink 列表查询生命周期图4. 实战应用案例#includepulse/pulseaudio.h#includestdio.hstaticvoidsink_info_cb(pa_context*c,constpa_sink_info*info,inteol,void*userdata){if(eol0){printf(query sink list failed\n);return;}if(eol0){printf(sink list query finished\n);return;}printf(Sink Index : %u\n,info-index);printf(Name : %s\n,info-name?info-name:unknown);printf(Description : %s\n,info-description?info-description:unknown);printf(Owner Module: %u\n,info-owner_module);printf(Mute : %d\n,info-mute);printf(Monitor Src : %u\n,info-monitor_source);printf(Driver : %s\n\n,info-driver?info-driver:unknown);}voidget_sink_info_list(pa_context*context){pa_operation*op;oppa_context_get_sink_info_list(context,sink_info_cb,NULL);if(!op){printf(query sink list failed\n);return;}pa_operation_unref(op);}intmain(){pa_context*context;/* * 假设 Context 已连接成功 */get_sink_info_list(context);return0;}5. 一句话总结pa_context_get_sink_info_list()本质上是“枚举当前 PulseAudio Server 中所有输出设备的详细信息”。它负责批量获取 Sink 名称、描述、Mute 状态、Sink Volume、Driver 信息、SampleSpec 参数、ChannelMap 信息和 Monitor Source 信息是输出设备列表展示、默认输出设备选择、系统音量面板开发和音频路由调试中非常常用的查询接口之一。

相关新闻

笔记:数据结构与算法(School examination)

笔记:数据结构与算法(School examination)

第一部分 1. 一句话核心总结 针对数据结构考试,以“优先级”为线索梳理了二叉树、图、排序、查找等核心模块的高频考点与解题技巧,强调理解逻辑(如指针操作、遍历过程)而非死记硬背公式。 2. 核心概念定义 数据结构三要素&#xf…

2026/7/10 23:44:07 阅读更多 →
终极RPM依赖查询工具rpmdepsearch:5分钟掌握软件包依赖分析

终极RPM依赖查询工具rpmdepsearch:5分钟掌握软件包依赖分析

终极RPM依赖查询工具rpmdepsearch:5分钟掌握软件包依赖分析 【免费下载链接】rpmdepsearch RPM dependencies analyze. It uses HTTP to download metadata to find packages requiring input packages. 项目地址: https://gitcode.com/openeuler/rpmdepsearch …

2026/7/10 23:44:07 阅读更多 →
3个声音痛点如何解决?eqMac系统级音频均衡器让你的Mac音质脱胎换骨

3个声音痛点如何解决?eqMac系统级音频均衡器让你的Mac音质脱胎换骨

3个声音痛点如何解决?eqMac系统级音频均衡器让你的Mac音质脱胎换骨 【免费下载链接】eqMac macOS System-wide Audio Equalizer & Volume Mixer 🎧 项目地址: https://gitcode.com/gh_mirrors/eq/eqMac 你是否经常在视频会议中听不清对方讲话…

2026/7/10 23:38:04 阅读更多 →

最新新闻

Agent最小闭环:输入锚点、动作原子、输出契约与反馈回路

Agent最小闭环:输入锚点、动作原子、输出契约与反馈回路

1. 项目概述:为什么“最小闭环”是Agent开发的第一道生死线我带过七支不同行业的Agent落地团队,从金融风控到电商客服,从医疗问诊到工业设备预测性维护,踩过的最大坑不是模型不准、不是API调用失败,而是——所有人一上…

2026/7/11 0:34:22 阅读更多 →
RAG 检索增强生成技术全景:从基础原理到企业级实践

RAG 检索增强生成技术全景:从基础原理到企业级实践

RAG 检索增强生成技术全景:从基础原理到企业级实践 一、RAG 为什么成为企业 AI 的核心基础设施 2023年,RAG(Retrieval-Augmented Generation,检索增强生成)还被视为一种"缓解大模型幻觉的临时补丁"。到了2…

2026/7/11 0:30:21 阅读更多 →
如何免费解锁Grammarly Premium高级版:3分钟终极完整指南

如何免费解锁Grammarly Premium高级版:3分钟终极完整指南

如何免费解锁Grammarly Premium高级版:3分钟终极完整指南 【免费下载链接】autosearch-grammarly-premium-cookie 免费白嫖使用Grammarly Premium高级版 项目地址: https://gitcode.com/gh_mirrors/au/autosearch-grammarly-premium-cookie 还在为Grammarly …

2026/7/11 0:30:21 阅读更多 →
【网络专栏】1. 学HTTP别光背概念:这4个实战知识,开发测试每天都用得到

【网络专栏】1. 学HTTP别光背概念:这4个实战知识,开发测试每天都用得到

文章目录一、GET与POST:选型错了,线上必出业务故障核心本质:幂等性与副作用实战踩坑案例(音乐APP场景)实践选型参考二、301/302/304:重定向与缓存,是性能优化的基础301 永久重定向:慎…

2026/7/11 0:28:20 阅读更多 →
软考高项十大领域输出关联图:从WBS到验收的5步交付物演进路径

软考高项十大领域输出关联图:从WBS到验收的5步交付物演进路径

软考高项十大领域输出关联图:从WBS到验收的5步交付物演进路径 项目管理从来不是孤立过程的简单堆砌,而是各知识领域相互咬合的精密齿轮组。当一位建筑项目经理面对客户质疑"为什么图纸上的飘窗没有出现在实体建筑中"时,问题的根源可…

2026/7/11 0:26:19 阅读更多 →
ADP5350与PIC18F46K80构建智能电源管理系统

ADP5350与PIC18F46K80构建智能电源管理系统

1. 为什么需要高级电源管理解决方案在现代电子系统中,电源管理已经成为一个关键的设计挑战。随着设备功能越来越复杂,对电源系统的要求也水涨船高。我最近在一个工业物联网项目中就深刻体会到了这一点——设备需要在-40C到85C的宽温范围内稳定工作&#…

2026/7/11 0:26:19 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻