Qt
使用
Phonon
这个多媒体框架来提供播放常见多媒体格式文件的功能,其中媒体文件可以是本地文件或者通过
QURL
指向的网络流文件。
在下面的概览中,会涉及到
Phonon
的主要概念、内部机制、核心
API
类以及如何使用这些
API
类。
【内部机制】
Phonon
有三个基本概念:媒体对象、接收端和路径。一个媒体对象管理一个媒体源,比如一个音乐文件;它提供了简单的播放控制,比如开始、停止和暂停播放。一个接收端输出来自
Phonon
的媒体,比如,通过提供录像到一个窗口,或者通过提供声音到一个声卡上。路径是用来连接
Phonon
对象的,比如,一个媒体对象和一个接收端,从而构成了
Phonon
中的
media graph
,如下:
上图中,音乐的播放是由
media object
启动和管理的,并且
media object
把媒体流发送给通过路径(
path
)连接到它的接收端(
sink
),继而接收端(
sink
)通过声卡播放媒体流。
【
Media Objects
媒体对象】
媒体对象,作为
MediaObject
类的实例,让使用者可以开始、暂停和停止一个媒体流文件的播放,也就是说它提供了对于媒体播放的基本控制,可以假想其为一个简单的媒体播放器。
媒体数据是由一个媒体源提供的,而媒体源是由媒体对象来保持的。媒体源是
MediaSource
的一个实例,在
Phonon
中是一个单独的对象。它为媒体对象提供原始数据,这些数据可以来自本地文件或者网络流。源的内容将会被媒体对象所解释。
一个媒体对象通常是使用默认构造函数进行实例化并为其提供一个媒体源。具体的代码将会在后面给出。
作为对媒体对象的补充,
Phonon
还提供了
MediaController
,它管理一个媒体文件可选的特征,比如
DVD
中的章节、菜单和标题等信息。
【
Sink
接收端】
Sink
就是一个虚拟的音像设备,将视频或者声音发送到物理视频设备或物理音频设备。它对媒体处理方面有着基本控制,比如,控制音量或者静音,又比如,改变亮度、色调或者缩放比例。
一个示例可见下图:
上图是一个有声视频
avi
文件的播放机制图。媒体源
DieHard.avi
由
MediaObject
进行管理,而
MediaObject
与两个
Sink
通过
Path
连接,一个是
Audio Sink
,管理着声音播放,另一个是
Video Sink
,管理着视频播放。最终都是由
Sink
将媒体数据传送给物理设备。
【
Processors
处理机】
Phonon
不允许对媒体流的直接操作,但是可以使用
processors
来做这项工作。它位于某条路径上,作用是转换该路径上的音频流。