Phonon浅谈

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

 

时间: 2024-10-26 07:25:54

Phonon浅谈的相关文章

使用Qt做一个简易音乐播放器[Phonon浅谈--续]

2010-2-13 使用Qt做一个简易音乐播放器[Phonon浅谈--续]   在第一篇Phonon浅谈中提及到了Phonon这个多媒体框架的一些基本知识,于是想着结合这些基本知识来实践一番,做一个简单的音乐播放器.   [步骤一] 新建一个Qt Gui工程,在建立过程中需要包含Phonon模块,之后生成文件如下图: Qt Gui工程会生成一个ui文件,在这里是mainwindow.ui.双击mainwindow.ui进行一番简单的布局,如下图: 关于这个ui界面,中央位置是一个QListWid

浅谈Python中copy()方法的使用

  这篇文章主要介绍了浅谈Python中copy()方法的使用,Python中的拷贝分为潜拷贝和深拷贝,本文只是简单介绍用法,需要的朋友可以参考下 copy()方法返回字典的浅拷贝. 语法 以下是copy()方法的语法: ? 1 dict.copy() 参数 NA 返回值 此方法返回字典的浅拷贝. 例子 下面的例子显示了copy()方法的使用. ? 1 2 3 4 5 6 #!/usr/bin/python   dict1 = {'Name': 'Zara', 'Age': 7};   dict

浅谈document.write()输出样式

  这篇文章主要介绍了浅谈document.write()输出样式,十分的简单实用,有需要的小伙伴可以参考下. js中的最基本的命令之一:document.write(),用于简单的打印内容到页面上,可以逐字打印你需要的内容--document.write("content"),这里content就是需要输出的内容;当然还有一种情况,需要输出JS之中比如变量等等变化的东西,那么就需要用document.write(+variable);当然variable就是你想要输出的变量. 既然可

图标字体化浅谈[转]

在做手机端Web App项目中,经常会遇到小图标在手机上显示比较模糊的问题,经过实践发现了一种比较好的解决方案,图标字体化.在微社区项目中,有很多小的Icon(图 标),如分享.回复.赞.返回.话题.访问.箭头等,这些Icon(图标)一般都是纯色的.开始制作时考虑用双倍大小的Sprite图,通过CSS样式设 置只显示二分之一尺寸,这样在Retina屏上显示的大小是正常的,一旦放大屏幕后图标又变得模糊不清,测试的效果不是很理想,后来又考虑多套图标适配方 案.SVG矢量图等,都因为种种原因放弃掉了(

浅谈PHP5中垃圾回收算法(Garbage Collection)的演化

前言:PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源的分配与释放(使用C编写PHP或Zend扩展除外),这就意味着PHP本身实现了垃圾回收机制(Garbage Collection).现在如果去PHP官方网站(php.net)可以看到,目前PHP5的两个分支版本PHP5.2和PHP5.3是分别更新的,这是因为许多项目仍然使用5.2版本的PHP,而5.3版本对5.2并不是完全兼容.PHP5.3在PHP5.2的基础上做了诸多改进,其中垃圾回收算法就属于一个比较大的改变.本文将分别

浅谈算法和数据结构 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度. 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 哈希的思路很简单

浅谈关于JavaScript API设计的一些建议和准则

  这篇文章主要介绍了浅谈关于JavaScript API设计的一些建议和准则,文中列举了许多知名的JS API进行辅助说明,极力推荐!需要的朋友可以参考下 设计是一个很普遍的概念,一般是可以理解为为即将做的某件事先形成一个计划或框架. (牛津英语词典)中,设计是一种将艺术,体系,硬件或者更多的东西编织到一块的主线.软件设计,特别是作为软件设计的次类的API设计,也是一样的.但是API设计常常很少关注软件发展,因为为其他程序员写代码的重要性要次于应用UI设计和最终用户体验. 但是API设计,作为

浅谈在openSUSE下ASP.NET 4开发环境配置(1)

浅谈在openSUSE下ASP.NET 4开发环境配置(1)

浅谈ASP.NET MVC 3中如何使用Model

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^ 原文地址:http://www.youguanbumen.net/Article.aspx?id=79 原文: 前两天写了个文章ASP.NET MVC 3 -- Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见