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 来做这项工作。它位于某条路径上,作用是转换该路径上的音频流。

 

目录
相关文章
|
存储 Kubernetes 安全
当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
8 月 26 日,我们发起了第 6 期 SIG Cloud-Provider-Alibaba 网研会直播。本次直播主要介绍了机密计算的概况, InclavareContainers 开源项目架构、已支持的功能和迭代计划,以及阿里云 ACK-TEE 的发展现状和规划。本文汇集了此次直播完整视频回顾及资料下载,并整理了直播过程中收集的问题和解答,希望能够对大家有所帮助~
当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
|
11月前
|
关系型数据库 MySQL 网络安全
渗透测试——DVWA环境部署
渗透测试——DVWA环境部署
148 0
|
Dart JavaScript
Flutter | 事件处理(下)
Flutter | 事件处理(下)
Flutter | 事件处理(下)
|
10月前
|
PHP
php公用函数:生成随机数字大小写字母的N位随机字符串
php公用函数:生成随机数字大小写字母的N位随机字符串
54 0
|
JavaScript 前端开发 中间件
前端网红框架的插件机制全梳理(axios、koa、redux、vuex)
前端中的库很多,开发这些库的作者会尽可能的覆盖到大家在业务中千奇百怪的需求,但是总有无法预料到的,所以优秀的库就需要提供一种机制,让开发者可以干预插件中间的一些环节,从而完成自己的一些需求。
|
缓存 JavaScript API
【Vue 开发实战】实战篇 # 35:如何高效地使用Mock数据进行开发
【Vue 开发实战】实战篇 # 35:如何高效地使用Mock数据进行开发
110 0
【Vue 开发实战】实战篇 # 35:如何高效地使用Mock数据进行开发
|
分布式数据库
二叉树的详细实现(含递归展开图)
二叉树的详细实现(含递归展开图)
89 0
二叉树的详细实现(含递归展开图)
|
数据采集 JavaScript 前端开发
Python爬虫:PyExecJS在python中运行javascript代码
Python爬虫:PyExecJS在python中运行javascript代码
147 0
|
SQL 分布式计算 关系型数据库
六十三、Spark-读取数据并写入数据库
需求说明:使用Spark流式计算 将数据写入MySQL,并读取数据库信息进行打印
六十三、Spark-读取数据并写入数据库