Phonon浅谈

简介:

Qt 使用 Phonon 这个多媒体框架来提供播放常见多媒体格式文件的功能,其中媒体文件可以是本地文件或者通过 QURL 指向的网络流文件。

在下面的概览中,会涉及到 Phonon 的主要概念、内部机制、核心 API 类以及如何使用这些 API 类。

 

【内部机制】

Phonon 有三个基本概念:媒体对象、接收端和路径。一个媒体对象管理一个媒体源,比如一个音乐文件;它提供了简单的播放控制,比如开始、停止和暂停播放。一个接收端输出来自 Phonon 的媒体,比如,通过提供录像到一个窗口,或者通过提供声音到一个声卡上。路径是用来连接 Phonon 对象的,比如,一个媒体对象和一个接收端,从而构成了 Phonon 中的 media graph ,如下:

 


phonon1

上图中,音乐的播放是由 media object 启动和管理的,并且 media object 把媒体流发送给通过路径( path )连接到它的接收端( sink ),继而接收端( sink )通过声卡播放媒体流。

 

Media Objects 媒体对象】

媒体对象,作为 MediaObject 类的实例,让使用者可以开始、暂停和停止一个媒体流文件的播放,也就是说它提供了对于媒体播放的基本控制,可以假想其为一个简单的媒体播放器。

媒体数据是由一个媒体源提供的,而媒体源是由媒体对象来保持的。媒体源是 MediaSource 的一个实例,在 Phonon 中是一个单独的对象。它为媒体对象提供原始数据,这些数据可以来自本地文件或者网络流。源的内容将会被媒体对象所解释。

一个媒体对象通常是使用默认构造函数进行实例化并为其提供一个媒体源。具体的代码将会在后面给出。

作为对媒体对象的补充, Phonon 还提供了 MediaController ,它管理一个媒体文件可选的特征,比如 DVD 中的章节、菜单和标题等信息。

 

Sink 接收端】

Sink 就是一个虚拟的音像设备,将视频或者声音发送到物理视频设备或物理音频设备。它对媒体处理方面有着基本控制,比如,控制音量或者静音,又比如,改变亮度、色调或者缩放比例。

一个示例可见下图:


phonon2

上图是一个有声视频 avi 文件的播放机制图。媒体源 DieHard.avi MediaObject 进行管理,而 MediaObject 与两个 Sink 通过 Path 连接,一个是 Audio Sink ,管理着声音播放,另一个是 Video Sink ,管理着视频播放。最终都是由 Sink 将媒体数据传送给物理设备。

 

Processors 处理机】

Phonon 不允许对媒体流的直接操作,但是可以使用 processors 来做这项工作。它位于某条路径上,作用是转换该路径上的音频流。

 

目录
相关文章
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
1979 0
|
5月前
|
传感器 人工智能 JavaScript
Playwright实战:写UI自动化脚本,速度直接起飞
简介: 测试工程师老王因UI自动化问题深夜奋战,反映出传统测试工具的局限性。微软开源的Playwright凭借智能等待、跨域操作、移动端模拟与网络拦截等强大功能,正迅速取代Selenium,成为新一代自动化测试标准。其稳定高效的设计显著降低维护成本,助力企业构建高质量测试流程。
|
8月前
|
前端开发 Android开发 UED
讲讲Android为自定义view提供的SurfaceView
本文详细介绍了Android中自定义View时使用SurfaceView的必要性和实现方式。首先分析了在复杂绘制逻辑和高频界面更新场景下,传统View可能引发卡顿的问题,进而引出SurfaceView作为解决方案。文章通过Android官方Demo展示了SurfaceView的基本用法,包括实现`SurfaceHolder.Callback2`接口、与Activity生命周期绑定、子线程中使用`lockCanvas()`和`unlockCanvasAndPost()`方法完成绘图操作。
252 3
|
9月前
|
存储 人工智能 自然语言处理
LangChain RAG入门教程:构建基于私有文档的智能问答助手
本文介绍如何利用检索增强生成(RAG)技术与LangChain框架构建基于特定文档集合的AI问答系统。通过结合检索系统和生成机制,RAG能有效降低传统语言模型的知识局限与幻觉问题,提升回答准确性。文章详细展示了从环境配置、知识库构建到系统集成的全流程,并提供优化策略以改进检索与响应质量。此技术适用于专业领域信息检索与生成,为定制化AI应用奠定了基础。
3151 5
LangChain RAG入门教程:构建基于私有文档的智能问答助手
|
10月前
|
Java
线程池的核心参数有哪些 ?
corePoolSize 核心线程数量 maximumPoolSize 最大线程数量 keepAliveTime 线程保持时间,N个时间单位 unit 时间单位(比如秒,分) workQueue 阻塞队列 threadFactory 线程工厂 handler 线程池拒绝策略
|
监控 Ubuntu 数据可视化
如何使用各种工具和命令来检查 Ubuntu 中的 CPU 使用情况?
如何使用各种工具和命令来检查 Ubuntu 中的 CPU 使用情况?
4419 0
如何使用各种工具和命令来检查 Ubuntu 中的 CPU 使用情况?
|
敏捷开发 数据可视化 项目管理
2024年最强的5大需求管理工具有哪些?如何选择最适合的需求管理软件?
随着项目管理和产品开发复杂性的增加,需求管理成为团队成功的关键。本文推荐5款需求管理工具:板栗看板、ProdPad、Craft.io、Airfocus和Targetprocess,分别适用于任务分配、产品规划、需求捕捉、优先级管理和敏捷开发等场景,帮助团队提高协作效率和交付质量。
 2024年最强的5大需求管理工具有哪些?如何选择最适合的需求管理软件?
|
机器学习/深度学习 数据采集 传感器
基于深度学习的图像识别技术在自动驾驶中的应用研究####
本文旨在探讨深度学习技术,特别是卷积神经网络(CNN)在自动驾驶车辆图像识别领域的应用与进展。通过分析当前自动驾驶技术面临的挑战,详细介绍了深度学习模型如何提升环境感知能力,重点阐述了数据预处理、网络架构设计、训练策略及优化方法,并展望了未来发展趋势。 ####
488 6
|
传感器 自动驾驶 物联网
探秘 5G 核心网络之 5G RAN:开启高速通信新时代
探秘 5G 核心网络之 5G RAN:开启高速通信新时代
540 4
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园失物招领系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园失物招领系统附带文章源码部署视频讲解等
205 13