-
西祠胡同社区
-
城市生活社区门户
如何使用
Qt Phonon
09-11-28 12:55
发表于:
《南京嵌入式开发圈》
分类:未分类
前言
Phonon
严格来说其实非为
Qt
的
li
brary
,
Phonon
原本就是<
/p>
KDE
4
的开放
原始码多媒体
API
,後来与
Qt<
/p>
合并与开发,所以简单来说就是
Qt
使用
Phonon
这个多媒体框架来提供一般影音多媒体档案的播放
,而这些影音
多媒体来源可以是档案、网路串流或是指到一个档案的
QUrl
。
Phonon
是一个跨平台多媒体框架,
能够在
Qt
应用程式中使用与播放影音
多媒体内容。
[
编辑
]
Phonon
的架构
整体来说,<
/p>
Phonon
的架构只需要记住以下的三东西:
< br>
?
media
object
Phonon
的基础,
用於管理多媒体来源。来源可能是影音档等,而能够提供基本的播
放控制,例如开始、暂
停或结束。而提供多媒体资料给
media
object
的则为
media
source
,在给
media
object
之前通常是
raw
data
,再由
media
object
进行转换。
?
sinks
输出多媒体,例如在
p>
widget
上播放影片或是输出至音效卡
(
播放音乐
)
。通常
< br>sink
是
一个播放的装置
(<
/p>
例如音效卡等
)
。而
sink
只接受
media
object
来的资料,由
media
object
控制播放;而由
sink
来处理这些多媒体
?
paths
用来连接
Phonon
的物件,意即
media object
与
sink
之间的连接。
可从下图看出彼此的关系
(
资料来源:
Phonon
Overview
)
:
所以整个播放影音的流程就是首先由
media object
开始播放,接著把媒
体串流经由
pat
h
送至
sink
,
sink
会经由音效卡等装置重新播放
(play
back)
影音。
[
编辑
]
安装
QtSoftware
官方网站是说
Phonon
预设会跟在安装<
/p>
Qt
时一并安装,不过
我不论是从
Qt SDK
或从
source code<
/p>
重新
build
,都没有包含
Phonon
模
组,目前我是用另外一种方式来安
装
Phonon
,就是使用套件管理工具来
从套件包来安装,只需要安装下列的套件:
sudo
apt-get install libphonon-dev libphonon4
phononbackend-gstreamer
安装完毕
之後,就可以使用
Phono
模组罗。
而与其他
Qt
应用程式一样,若有使用到
Phonon
函式库的应用程式在
build
的时候都需要额外设定使用
Phonon
模组,
必须要在
qmae
k
project
file
中加入:
QT += phonon
[
编辑
]
使用
在此部分将会开始介绍如何使
用
Phonon
这套函式库,并且会列出一些小
范例来
demo
,首先就先来介绍几个简单好用的类别
。
[
编辑
]
VideoPlayer Class
Phonon
有提供
很多类别可供使用,其中最简单的,莫过於
VideoPlayer
这个类别了。
VideoPlayer
widget
如它的名字一样,就是用来播放
vide
o
,而且使用起
来相当简易,而且功能也不会缺少,包括播放、
暂停与停止。
而一开始早先提到的
M
ediaObject
等类别与
VideoPlayer
在使用上有什么
差异呢?如果不需要更复杂的功能,例如建立一个
p>
media
graph
,你只需
要能够播放影音档案的话,
其实使用
Video
Player
类别即可达到你的要求。
而另外值得一提的就是,
VideoPlayer
大部分函式
都是非同步,所以载入
media
source
并不会马上播放多媒体档案,只有在呼叫函式
play(
< br>)
之後
才会播放。
要怎么使用这个类别呢?
其实相当简单,下面就是程式码片段:
VideoPlayer *player =
new
VideoPlayer(Phonon::
VideoCategory
,
parentWidget);
player->play(url);
在实体化
VideoPlayer
类别物件时,
可以在
p>
constructor
就载入多媒体种
类
与要放在哪个
widget
中
(
即为
parentWidget)
,而
media source<
/p>
可以
利用函式
load()
来载入或是在
play()
时载入,而载入方式可直
接从档案
或是从网路位址。
以下就是一个简单的影音播放功能小程式:
#include
#include
#include
#include
int
main(
int
argc,
char
*argv[]) {
QApplication app(argc, argv);
QWidget *widget =
new
QWidget;
widget->setWindowTitle(
);
widget->resize(
400
,
400
);
Phonon::
VideoPlayer
*player
=
new
Phonon::
VideoPlayer
(Phonon::
VideoCategory
, widget);
player->load(Phonon::
MediaSource
(
));
player->play();
widget->show();
return
app.
exec
();
}
[
编辑
] MediaObject
Class
MediaObject
类别主要提供一个能够
处理媒体播放的介面。
MediaObject
可说是处理多媒体档案最基本的一部份,
它接受并管理来自
< br>於
MediaSource
的媒体档案。而媒体播放、暂
停与停止都是由它来控制;
而在此之前,
media
物件必须要与
output
node
连接,如早先所讲的,这
个
nodes
主要将媒体输出至底层的硬体,
例如音效卡或显示卡等,
< br>而所需
要的
output node
则是根据多媒体的内容而所不同,目前
Phonon
有两种
output node
;
?
?
AudioOutput
-声音播放
VideoWidget
-影像播放
如果
MediaSource
包含声音
与影像的话,这两种
node
都必须要连接至
< br>media
物件。
就这个类别来说,有几个函式是你必须要知道的,分别是
?
setCurrentSourc
e()
:设定
MediaObject
的多媒体来源,而来源可以是网路上
的影音档
(
利用
QUrl
来存取
)
或是本机档案
(
利用
QString)
,使用上相当简单:
QUrl url(
);
media->setCurrentSource(url);
?
?
?
play()
:开始播放多媒体资料
pause()
:暂停播放
stop()
:停止播放
以下为一个简单的程式片段,说明如何使用:
Phonon::
MediaObject
*mediaObject
=
new
Phonon::
MediaObject
(
this
);
Phonon::
VideoWidget
*videoWidget
=
new
Phonon::
VideoWidget
(
< br>this
);
Phonon::
createPath
(mediaObject, videoWidget);
Phonon::
AudioOut
put
*audioOutput =
-
-
-
-
-
-
-
-
-
上一篇:网易视频云HBase RegionServer宕机案件侦查
下一篇:机务专业英语