精华内容
下载资源
问答
  • phonon

    2012-08-07 12:42:38
    Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放原始码多媒体API,後来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个多媒体框架来提供一般影音多媒体档案的播放,而这些影音多 媒体来源可以是...

    前言

    Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放原始码多媒体API,後来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个多媒体框架来提供一般影音多媒体档案的播放,而这些影音多 媒体来源可以是档案、网路串流或是指到一个档案的QUrl。

    Phonon是一个跨平台多媒体框架,能够在Qt应用程式中使用与播放影音多媒体内容。

    [编辑] Phonon的架构

    整体来说,Phonon的架构只需要记住以下的三东西:

    • media object
      Phonon的基础,用於管理多媒体来源。来源可能是影音档等,而能够提供基本的播放控制,例如开始、暂停或结束。而提供多媒体资料给media object的则为media source,在给media object之前通常是raw data,再由media object进行转换。
    • sinks
      输出多媒体,例如在widget上播放影片或是输出至音效卡(播放音乐)。通常sink是一个播放的装置(例如音效卡等)。而sink只接受media object来的资料,由media object控制播放;而由sink来处理这些多媒体
    • paths
      用来连接Phonon的物件,意即media object与sink之间的连接。


    可从下图看出彼此的关系(资料来源:Phonon Overview):


    所以整个播放影音的流程就是首先由media object开始播放,接著把媒体串流经由path送至sink,sink会经由音效卡等装置重新播放(play back)影音。

    [编辑] 安装

    QtSoftware官方网站是说Phonon预设会跟在安装Qt时一并安装,不过我不论是从Qt SDK或从source code重新build,都没有包含Phonon模组,目前我是用另外一种方式来安装Phonon,就是使用套件管理工具来从套件包来安装,只需要安装下 列的套件:

    sudo apt-get install libphonon-dev libphonon4 phononbackend-gstreamer

    安装完毕之後,就可以使用Phono模组罗。


    而与其他Qt应用程式一样,若有使用到Phonon函式库的应用程式在build的时候都需要额外设定使用Phonon模组,必须要在qmaek project file中加入:

    QT += phonon

    [编辑] 使用

    在此部分将会开始介绍如何使用Phonon这套函式库,并且会列出一些小范例来demo,首先就先来介绍几个简单好用的类别。

    [编辑] VideoPlayer Class

    Phonon有提供很多类别可供使用,其中最简单的,莫过於VideoPlayer这个类别了。

    VideoPlayer widget如它的名字一样,就是用来播放video,而且使用起来相当简易,而且功能也不会缺少,包括播放、暂停与停止。

    而一开始早先提到的MediaObject等类别与VideoPlayer在使用上有什么差异呢?如果不需要更复杂的功能,例如建立一个media graph,你只需要能够播放影音档案的话,其实使用VideoPlayer类别即可达到你的要求。

    而另外值得一提的就是,VideoPlayer大部分函式都是非同步,所以载入media source并不会马上播放多媒体档案,只有在呼叫函式play( )之後才会播放。

    要怎么使用这个类别呢? 其实相当简单,下面就是程式码片段:

    VideoPlayer *player = new VideoPlayer(Phonon::VideoCategory, parentWidget);
    player->play(url);

    在实体化VideoPlayer类别物件时,可以在constructor就载入多媒体种类与要放在哪个widget中(即为 parentWidget),而media source可以利用函式load()来载入或是在play()时载入,而载入方式可直接从档案或是从网路位址。


    以下就是一个简单的影音播放功能小程式:

    #include <QApplication>
    #include <QWidget>
    #include <phonon>
    #include <QUrl>
     
    int main(int argc, char *argv[]) {
        QApplication app(argc, argv);
     
        QWidget *widget = new QWidget;
        widget->setWindowTitle("Video Player");
        widget->resize(400,400);
     
        Phonon::VideoPlayer *player = new Phonon::VideoPlayer(Phonon::VideoCategory, widget); 
        player->load(Phonon::MediaSource("../Puppet.mpg"));
     
        player->play();
     
        widget->show();
     
        return app.exec();
    }

    [编辑] MediaObject Class

    MediaObject类别主要提供一个能够处理媒体播放的介面。

    MediaObject可说是处理多媒体档案最基本的一部份,它接受并管理来自於MediaSource的媒体档案。而媒体播放、暂停与停止都是由它来控制;而在此之前,media物件必须要与output node连接,如早先所讲的,这个nodes主要将媒体输出至底层的硬体,例如音效卡或显示卡等,而所需要的output node则是根据多媒体的内容而所不同,目前Phonon有两种output node;

    • AudioOutput-声音播放
    • VideoWidget-影像播放

    如果MediaSource包含声音与影像的话,这两种node都必须要连接至media物件。

    就这个类别来说,有几个函式是你必须要知道的,分别是

    • setCurrentSource():设定MediaObject的多媒体来源,而来源可以是网路上的影音档(利用QUrl来存取)或是本机档案(利用QString),使用上相当简单:
    QUrl url("http://www.example.com/music.ogg");
     media->setCurrentSource(url);
    • play():开始播放多媒体资料
    • pause():暂停播放
    • stop():停止播放


    以下为一个简单的程式片段,说明如何使用:

    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
     
    Phonon::VideoWidget *videoWidget = new Phonon::VideoWidget(this);
    Phonon::createPath(mediaObject, videoWidget);
     
    Phonon::AudioOutput *audioOutput =
             new Phonon::AudioOutput(Phonon::VideoCategory, this);
    Phonon::createPath(mediaObject, audioOutput);
     
    mediaObject->play();

    [编辑] Phonon::createPath()

    这是相当重要的一个函式,主要用於建立一个Path,连接两个MediaNodes,就是source与sink。

    其实它的主要用途是在更进阶的部分,就是在使用到media graph,不过如果只是利用Phonon来播放多媒体影音档,其实只要记得它是用来连接source与输出装置即可。

    [编辑] AudioOutput Class

    AudioOutput类别主要是用来把多媒体的声音送到声音输出装置。所以它能够经由类似喇叭等输出装置来播放声音,稍早有提过,多媒体资料的来源必须要经过Phonon::createPath()由MediaObject连接。

    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
    mediaObject->setCurrentSource(Phonon::MediaSource("/mymusic/barbiegirl.wav"));
    Phonon::AudioOutput *audioOutput =
             new Phonon::AudioOutput(Phonon::MusicCategory, this);
    Phonon::Path path = Phonon::createPath(mediaObject, audioOutput);

    [编辑] VideoWidget Class

    VideoWidget类别提供能够显示出影片的widget。

    VideoWidget类别会在QWidget上播放多媒体串流的影像,跟AudioOutput一样,必须使用 Phonon::createPath()来与MediaObject连接。你可以利用一些函式来控制在QWidget中的VideoWidget显示的 大小,你可以利用setAspectRatio()或setScaleMode()来控制,而它们接收的参数可以到网站上察看,使用方式如下(预设是使用 aspect ratio):

    videowidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
    videowidget->setScaleMode(Phonon::VideoWidget::ScaleAndCrop);


    当然也有提供函式让影片进入或退出全萤幕模式。以下为一个简短的程式码范例:

    MediaObject *media = new MediaObject(parent);
    VideoWidget *vwidget = new VideoWidget(parent);
    Phonon::createPath(media, vwidget);

    [编辑] SeekSlider Class

    SeekSlider类别提供一个可滑动的slider来设定多媒体串流播放的位置。所以它会连接到MediaObject,并控制串流目前的位置。

    以下是一个使用的范例:

    Phonon::MediaObject *moo = new Phonon::MediaObject;;
    Phonon::AudioOutput *device = new Phonon::AudioOutput;
    Phonon::createPath(moo, device);
     
    moo->setCurrentSource(
    QString("/home/gvatteka/Music/Lumme-Badloop.ogg"));
     
    Phonon::SeekSlider *slider = new Phonon::SeekSlider;
    slider->setMediaObject(moo);
     
    slider->show();
    moo->play();

    [编辑] VolumeSlider Class

    VolumeSlider widget提供可以控制声音装置音量的widget。

    用法其实与上面的SeekSlider类似,使用范例如下:

    honon::AudioOutput *audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory);
    Phonon::createPath(mediaObject, audioOutput);
     
    Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
    volumeSlider->setAudioOutput(audioOutput);

    [编辑] 范例

    再看过上面的一些类别介绍之後,其实就可以显一个简单的媒体播放器了,请看范例程式码:

    #include <QApplication>
    #include <QWidget>
    #include <phonon>
    #include <QUrl>
    #include <QObject>
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include <QLabel>
     
    int main(int argc, char *argv[]) {
        QApplication app(argc, argv);
     
        QWidget *widget = new QWidget;
        widget->setWindowTitle("Media Player");
        widget->resize(400,400);
     
        Phonon::MediaObject *media = new Phonon::MediaObject;
        media->setCurrentSource(Phonon::MediaSource("../Puppet.mpg"));
     
        Phonon::VideoWidget *vwidget = new Phonon::VideoWidget(widget);
        Phonon::createPath(media, vwidget);
        vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
        Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
        Phonon::createPath(media, aOutput);
     
        QLabel *label = new QLabel("Volume: ");
        Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
        volumeSlider->setAudioOutput(aOutput);
        volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
     
        Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider;
        seekSlider->setMediaObject(media);
     
        QHBoxLayout *hLayout = new QHBoxLayout;
        hLayout->addWidget(label);
        hLayout->addWidget(volumeSlider);
        hLayout->addStretch();
     
        QVBoxLayout *vLayout = new QVBoxLayout;
        vLayout->addWidget(vwidget);
        vLayout->addWidget(seekSlider);
        vLayout->addLayout(hLayout);
     
        widget->setLayout(vLayout);
     
        widget->show();
        media->play();
        return app.exec();
    }

    上面的程式码就完成了一个简易的多媒体播放器,当然还有很多部分还需要改进,不过在此仅就Phonon的使用上做介绍。执行之後的画面如下所示:

    由於VideoWidget已经嵌入到QWidget了,所以你调整视窗大小的话,影片播放的视窗也会跟著调整。

    展开全文
  • Phonon

    2012-04-01 13:18:14
    Qt 提供了播放音视频的接口,这就是Phonon库。下面一段是从网上摘抄的。 Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放原始码多媒体API,後来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个...
    Qt 提供了播放音视频的接口,这就是Phonon库。下面一段是从网上摘抄的。 
    

    Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放原始码多媒体API,後来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个多媒体框架来提供一般影音多媒体档案的播放,而这些影音多 媒体来源可以是档案、网路串流或是指到一个档案的QUrl。

    Phonon是一个跨平台多媒体框架,能够在Qt应用程式中使用与播放影音多媒体内容。

    [编辑] Phonon的架构

    整体来说,Phonon的架构只需要记住以下的三东西:

    • media object
      Phonon的基础,用於管理多媒体来源。来源可能是影音档等,而能够提供基本的播放控制,例如开始、暂停或结束。而提供多媒体资料给media object的则为media source,在给media object之前通常是raw data,再由media object进行转换。
    • sinks
      输出多媒体,例如在widget上播放影片或是输出至音效卡(播放音乐)。通常sink是一个播放的装置(例如音效卡等)。而sink只接受media object来的资料,由media object控制播放;而由sink来处理这些多媒体
    • paths
      用来连接Phonon的物件,意即media object与sink之间的连接。


    可从下图看出彼此的关系(资料来源:Phonon Overview):


    所以整个播放影音的流程就是首先由media object开始播放,接著把媒体串流经由path送至sink,sink会经由音效卡等装置重新播放(play back)影音。

    [编辑] 安装

    QtSoftware官方网站是说Phonon预设会跟在安装Qt时一并安装,不过我不论是从Qt SDK或从source code重新build,都没有包含Phonon模组,目前我是用另外一种方式来安装Phonon,就是使用套件管理工具来从套件包来安装,只需要安装下 列的套件:

    sudo apt-get install libphonon-dev libphonon4 phononbackend-gstreamer

    安装完毕之後,就可以使用Phono模组罗。


    而与其他Qt应用程式一样,若有使用到Phonon函式库的应用程式在build的时候都需要额外设定使用Phonon模组,必须要在qmaek project file中加入:

    QT += phonon

    [编辑] 使用

    在此部分将会开始介绍如何使用Phonon这套函式库,并且会列出一些小范例来demo,首先就先来介绍几个简单好用的类别。

    [编辑] VideoPlayer Class

    Phonon有提供很多类别可供使用,其中最简单的,莫过於VideoPlayer这个类别了。

    VideoPlayer widget如它的名字一样,就是用来播放video,而且使用起来相当简易,而且功能也不会缺少,包括播放、暂停与停止。

    而一开始早先提到的MediaObject等类别与VideoPlayer在使用上有什么差异呢?如果不需要更复杂的功能,例如建立一个media graph,你只需要能够播放影音档案的话,其实使用VideoPlayer类别即可达到你的要求。

    而另外值得一提的就是,VideoPlayer大部分函式都是非同步,所以载入media source并不会马上播放多媒体档案,只有在呼叫函式play( )之後才会播放。

    要怎么使用这个类别呢? 其实相当简单,下面就是程式码片段:

    VideoPlayer *player = new VideoPlayer(Phonon::VideoCategory, parentWidget);
    player->play(url);

    在实体化VideoPlayer类别物件时,可以在constructor就载入多媒体种类与要放在哪个widget中(即为 parentWidget),而media source可以利用函式load()来载入或是在play()时载入,而载入方式可直接从档案或是从网路位址。


    以下就是一个简单的影音播放功能小程式:

    #include <QApplication>
    #include <QWidget>
    #include <phonon>
    #include <QUrl>
     
    int main(int argc, char *argv[]) {
        QApplication app(argc, argv);
     
        QWidget *widget = new QWidget;
        widget->setWindowTitle("Video Player");
        widget->resize(400,400);
     
        Phonon::VideoPlayer *player = new Phonon::VideoPlayer(Phonon::VideoCategory, widget); 
        player->load(Phonon::MediaSource("../Puppet.mpg"));
     
        player->play();
     
        widget->show();
     
        return app.exec();
    }

    [编辑] MediaObject Class

    MediaObject类别主要提供一个能够处理媒体播放的介面。

    MediaObject可说是处理多媒体档案最基本的一部份,它接受并管理来自於MediaSource的媒体档案。而媒体播放、暂停与停止都是由它来控制;而在此之前,media物件必须要与output node连接,如早先所讲的,这个nodes主要将媒体输出至底层的硬体,例如音效卡或显示卡等,而所需要的output node则是根据多媒体的内容而所不同,目前Phonon有两种output node;

    • AudioOutput-声音播放
    • VideoWidget-影像播放

    如果MediaSource包含声音与影像的话,这两种node都必须要连接至media物件。

    就这个类别来说,有几个函式是你必须要知道的,分别是

    • setCurrentSource():设定MediaObject的多媒体来源,而来源可以是网路上的影音档(利用QUrl来存取)或是本机档案(利用QString),使用上相当简单:
    QUrl url("http://www.example.com/music.ogg");
     media->setCurrentSource(url);
    • play():开始播放多媒体资料
    • pause():暂停播放
    • stop():停止播放


    以下为一个简单的程式片段,说明如何使用:

    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
     
    Phonon::VideoWidget *videoWidget = new Phonon::VideoWidget(this);
    Phonon::createPath(mediaObject, videoWidget);
     
    Phonon::AudioOutput *audioOutput =
             new Phonon::AudioOutput(Phonon::VideoCategory, this);
    Phonon::createPath(mediaObject, audioOutput);
     
    mediaObject->play();

    [编辑] Phonon::createPath()

    这是相当重要的一个函式,主要用於建立一个Path,连接两个MediaNodes,就是source与sink。

    其实它的主要用途是在更进阶的部分,就是在使用到media graph,不过如果只是利用Phonon来播放多媒体影音档,其实只要记得它是用来连接source与输出装置即可。

    [编辑] AudioOutput Class

    AudioOutput类别主要是用来把多媒体的声音送到声音输出装置。所以它能够经由类似喇叭等输出装置来播放声音,稍早有提过,多媒体资料的来源必须要经过Phonon::createPath()由MediaObject连接。

    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
    mediaObject->setCurrentSource(Phonon::MediaSource("/mymusic/barbiegirl.wav"));
    Phonon::AudioOutput *audioOutput =
             new Phonon::AudioOutput(Phonon::MusicCategory, this);
    Phonon::Path path = Phonon::createPath(mediaObject, audioOutput);

    [编辑] VideoWidget Class

    VideoWidget类别提供能够显示出影片的widget。

    VideoWidget类别会在QWidget上播放多媒体串流的影像,跟AudioOutput一样,必须使用 Phonon::createPath()来与MediaObject连接。你可以利用一些函式来控制在QWidget中的VideoWidget显示的 大小,你可以利用setAspectRatio()或setScaleMode()来控制,而它们接收的参数可以到网站上察看,使用方式如下(预设是使用 aspect ratio):

    videowidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
    videowidget->setScaleMode(Phonon::VideoWidget::ScaleAndCrop);


    当然也有提供函式让影片进入或退出全萤幕模式。以下为一个简短的程式码范例:

    MediaObject *media = new MediaObject(parent);
    VideoWidget *vwidget = new VideoWidget(parent);
    Phonon::createPath(media, vwidget);

    [编辑] SeekSlider Class

    SeekSlider类别提供一个可滑动的slider来设定多媒体串流播放的位置。所以它会连接到MediaObject,并控制串流目前的位置。

    以下是一个使用的范例:

    Phonon::MediaObject *moo = new Phonon::MediaObject;;
    Phonon::AudioOutput *device = new Phonon::AudioOutput;
    Phonon::createPath(moo, device);
     
    moo->setCurrentSource(
    QString("/home/gvatteka/Music/Lumme-Badloop.ogg"));
     
    Phonon::SeekSlider *slider = new Phonon::SeekSlider;
    slider->setMediaObject(moo);
     
    slider->show();
    moo->play();

    [编辑] VolumeSlider Class

    VolumeSlider widget提供可以控制声音装置音量的widget。

    用法其实与上面的SeekSlider类似,使用范例如下:

    honon::AudioOutput *audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory);
    Phonon::createPath(mediaObject, audioOutput);
     
    Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
    volumeSlider->setAudioOutput(audioOutput);

    [编辑] 范例

    再看过上面的一些类别介绍之後,其实就可以显一个简单的媒体播放器了,请看范例程式码:

    #include <QApplication>
    #include <QWidget>
    #include <phonon>
    #include <QUrl>
    #include <QObject>
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include <QLabel>
     
    int main(int argc, char *argv[]) {
        QApplication app(argc, argv);
     
        QWidget *widget = new QWidget;
        widget->setWindowTitle("Media Player");
        widget->resize(400,400);
     
        Phonon::MediaObject *media = new Phonon::MediaObject;
        media->setCurrentSource(Phonon::MediaSource("../Puppet.mpg"));
     
        Phonon::VideoWidget *vwidget = new Phonon::VideoWidget(widget);
        Phonon::createPath(media, vwidget);
        vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
        Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
        Phonon::createPath(media, aOutput);
     
        QLabel *label = new QLabel("Volume: ");
        Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
        volumeSlider->setAudioOutput(aOutput);
        volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
     
        Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider;
        seekSlider->setMediaObject(media);
     
        QHBoxLayout *hLayout = new QHBoxLayout;
        hLayout->addWidget(label);
        hLayout->addWidget(volumeSlider);
        hLayout->addStretch();
     
        QVBoxLayout *vLayout = new QVBoxLayout;
        vLayout->addWidget(vwidget);
        vLayout->addWidget(seekSlider);
        vLayout->addLayout(hLayout);
     
        widget->setLayout(vLayout);
     
        widget->show();
        media->play();
        return app.exec();
    }

    上面的程式码就完成了一个简易的多媒体播放器,当然还有很多部分还需要改进,不过在此仅就Phonon的使用上做介绍。执行之後的画面如下所示:

    由於VideoWidget已经嵌入到QWidget了,所以你调整视窗大小的话,影片播放的视窗也会跟著调整。

    下面是具体在做项目的时候碰到的问题。

    (1)改变VideoWidget的背景色

        VideoWidget默认的颜色是黑色。 可以通过stylesheet或是palette改变它的颜色,但是如果大家去试就会发现这个问题。VideoWidget只能填充纯色, 而不能是渐变色或是图片。这就带来一个问题,如果在没有影片播放的时候,希望他的颜色是渐变色或是图片怎么办。 我尝试了用很多方法都没能解决这个问题。后来就采用了一个比较笨的方法。 就是用QLabel来代替VideoWidget。 在没有视频的时候,就将QLabel显示出来,VideoWidget隐藏。有视频的时候,就将QLabel隐藏,VideoWidget显示。 采用这种方法,对于在没有视频的时候,提示
    “No Video”也是很有效的

    (2)VideoWidget上浮着透明的控件

         有时候在放视频的时候,如果要进行什么设置。弹出的新窗口希望是透明的,这样不影响看视频。

        控件透明有几种方法:

        a. 采用Alpa通道,设置透明色,可以用stylesheet或是palette

        b. 用attribute属性,里面有一个Transparent的属性,不过那个是全透

        c. 设置setOpacity值

        d. 用painter,填充透明色。 用这种一般的思路是, 用一个QPixmap或是QImage,大小为要填充的区域的大小。 然后fill(QColor(0,0,0,0)),或是fill(Qt::transparent),即填充透明。然后用painter(image),设置画刷,fillRect,如果是要填充图片的话,用drawPixmap.

        但是像上面的方法,对于一个在VideoWidget上的窗口是无效的,因为透明透的是背景色。 VideoWidget的背景色是黑色。所以看到的浮在上面的一块是黑色的。为了解决这个问题。 后来在网上看到了一个解决方法,就是将VideoWidget放在GraphicsView中。再将上面的控件采用上面的方法进行透明。

        思路如下:新建View,Scene, 新建QProxyWidet。这是一个item,他提供的是一个将普通的控件放在view中。然后,QProxyWidet用setWidget方法将VideoWidget放上去。就完成了将VideoWidget放在View中, 放在上面的控件设置透明色就可以了。

        在这里有个地方需要是注意的,就是View里控件的大小,scene里面的item的大小放上去了并不一定就是view的大小。如果不设置setSceneRect,那么item会自动居中,如果item没有设置大小的话(item的boundRect, setGemotry一般都要重写,如果不重写,并且painter函数也没有),那么你有可能是在view里看不见任何东西的。如果要使item的大小刚好合适,并且居中。就将setSceneRect设置为scene的bound大小。 这是一般的方法。

        如果在view里放布局,如QGraphicsGridLayout。view不像其他的控件一样, layout会自动的调整位置的。所以你看到的效果也许不是layout布满了真个view,而只是view的一部分。 要使layout布满整个view,需要重写view的resize函数。在里面设置layout的最适合perfer大小为view的大小,并且设置设置view的fitInView

     

    原文链接:http://www.cnblogs.com/chenxuelian/archive/2010/08/08/1794951.html

    展开全文
  • phonon 详解 PDF

    2012-08-05 17:32:23
    phonon简单介绍 Phonon是KDE 4的多媒体API 。Phonon提供一个稳定的API允许KDE 4独立于任何一个声音系统服务器如xine。
  • QT_Phonon详解.pdf

    2019-12-19 19:14:10
    Phonon是什么?Qt从4.4版本开始提供的一套多媒体框架,提供多媒体回放的功能。目前在Qt 4.6中实现多媒体播放图形界面主要依赖于phonon框架,其实qt中还有一个Multimedia模块,帮助文档中对它的描述是:实现底层的...
  • phonon4.dll

    2015-12-29 17:02:45
    Phonon是KDE 4的多媒体API 。Phonon提供一个稳定的API允许KDE 4独立于任何一个声音系统服务器如xine。
  • Qt Phonon代码

    2012-03-23 11:41:42
    Qt播放器必备工程 缺少编译Qt出错……还要别忘了播放器Pro里添加QT += phonon
  • phonon-mplayer.tar.gz

    2019-05-12 12:52:48
    phonon-mplayer的源码,编译后可以使用,问题不大,亲测有效
  • Rationalizing phonon dispersion for lattice thermal
  • 闲的蛋疼,最近要用到Phonon,了解不多,就翻译一下官方文档吧,Mark一下。顺便练下表达能力,要考六级了,就当复习吧。 文档的地址在:Phonon multimedia framework 简介 Phonon多媒体框架是QT库的主要...

    闲的蛋疼,最近要用到Phonon,了解不多,就翻译一下官方文档吧,Mark一下。顺便练下表达能力,要考六级了,就当复习吧。

    文档的地址在:Phonon multimedia framework


    简介

    Phonon多媒体框架是QT库的主要多媒体播放框架(据说还有一个叫MultiMedia模块)。可以通过文件或者通过QURL来读取一个网络媒体流。
    这份简介中,我们涉及Phonon的一些主要概念,也会介绍到phonon的架构,一些主要的API,还有一些使用API的例子。

    架构

    Phonon的三个基本概念是:mediaObject,sinks,paths。
    故名思议,media object是用来控制多媒体源的,比如,一个音乐文件;它可以提供像开始,暂停,停止之类的播放控制。而sink是用来输出Phonon的多媒体源的,比如输出视频到widget或者将音频输出到声卡。Paths则是连接media object和sink的桥梁,形成一个media graph(媒体流图??不知道怎么翻译,好像有向图之类的东西)。
    下面是一个音频流的media graph



    MediaObject向那些通过path与其建立联系的sink发送媒体流,从而控制媒体的播放。然后sink通常通过声卡将媒体流播放出来。

    Media Objects

    media object 是MediaObject类的实体,可以通过它来实现对媒体流播放的控制,比如开始,暂停,停止等。它提供对播放过程的最基本的控制,可以将其想象为一个简易的媒体播放器。

    media source(媒体源)提供的数据由media object保存。而media source(媒体源)是一个MediaSource的实例,但它本身并不是Phonon框架中流的一部分。它给media object提供来自文件或者网络流的原始数据,而具体的数据内容解释就由media object来完成。

    media object总是通过默认构造器实例化,提供media source。具体实现代码样例稍后会给出。

    作为media object的一个实现,Phonon也提供了一个MediaController类,用来对媒体一些特征的选项控制。例如,一些VOB(DVD)文件播放时的章节,菜单,标题等,都可以通过MediaController来控制。

    Sinks

    sink是Phonon媒体流的接收点,也就是说它不会再将数据输出到别的地方而是自己处理。sink通常就是一个数据实现设备。

    输出到sink的数据来源都是media object,但是途中可能经过许多其他的一些节点。

    Mediaobject控制着播放过程,而sink则是可以对媒体数据进行最低层的操作,比如一个audio sink(音频接收点)可以控制声音的大小和是否静音,你可以想象它是一个虚拟的音频设备。另一个例子是VideoWidget类,可以在QWidget中实现,并且可以自动调节光强度,灰度,和视频的大小。
    下面是一个音视频文件的播放流图:



    Processors

    Phonon不允许直接对媒体流的直接操作,也就是说媒体流 给一个media object后不能通过通过程序来调整媒体流的字节数据。而我们有其他的方法去完成这个事情,利用processor。processor在媒体播放流中的位置是media object到其相应的sink也就是接收点之间的path上。在Phonon中,processor表现为Effect类。

    当processor被插入到媒体流中进行渲染过程时,它会一直在对媒体流有效果直到我们移除它。

    Effect类控制了媒体流的控制过程,processor可以提供一个深度的叠加效果到音频上,例如,它可以量化施加的叠加效果。Effect可以配置到任何时候进行。

    Playback

    有时候,我们并不需要自己去构建这些框架。Phonon有建立普通适用框架的函数。例如播放音频文件,可以使用 createPlayer() ,它会自动完成需要的流程,并且返回到media object中,然后就可以直接使用media对象的 play() 函数。

    Phonon::MediaObject *music = 
    	Phonon::createPlayer(Phonon::MusicCatagory,							Phonon::MediaSource("/path/mysong.wav"));
    music->play();
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    同样,对于视频文件也有类似的解决方法,VideoPlayer类:
    Phonon::VideoPlayer *player = 
    	new Phonon::VideoPlayer(Phonon::VideoCategory,
    	parentWidget);
    player->play(url);

    VideoPlayer是一个视频播放的widget类。

    使用Phonon需要在Qt工程配置文件.pro中加上下列语句:
    QT += phonon

    Phonon中有几个用来控制多媒体播放的工具:SeekSlider用来控制媒体流的播放位置,VolumeSlider用来控制声音大小,EffectWidget则是用来控制媒体播放效果。具体使用可以在API文档中了解到。

    Building Graphs手动建立播放流

    如果想对播放过程进行更多的定制,而不是直接使用上述的各种简易播放模块的话,就要自己建立Phonon的播放流了。下面来看下一些通用的播放流是怎样建立的。一个播放流的开始是从media object的play()函数开始的。

    如果这个media object包含几种不同的媒体类型,例如,一个音视频流,那这个播放流就要有两个输出,一个音频输出,一个视频输出。

    接下来看下代码如何实现

    Audio(音频)

    播放音频的时候,需要创建一个media object并且把它连接到一个继承自AbstractAudioOutput类的音频输出接收点。目前提供的是AudioOutput类,可以将音频流输出到声卡。下面是实现代码:
    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
    
    mediaObject->setCurrentSource(Phonon::MediaObject("/mymusic/bariegirl.wav"));
    
    Phonon::AudioOutput *audioOutput =
    	new Phonon::AudioOutput(Phonon::MusicCategory,this);
    
    Phonon::Path path = Phonon::createPath(mediaObject,audioOutput);

    注意到播放的媒体资源的类型是由Phonon来解析的,我们不需要担心这个问题。如果一个媒体资源包含有多种媒体类型,它也是由Phonon自动处理的(实际上决定于后端插件,后面会讲到)。
    media object总是通过默认构造器来构造的,它处理所有的多媒体格式。
    AudioOutput中的范围(Category)设置,像Phonon::MusicCategory并不影响实际的播放过程,这个范围设置是被KDE用来控制播放的,例如控制板块。
    AudioOutput类用来输出声音数据到系统音频设备,例如声卡。系统音频设备可以包括声卡或者一个中介设备,比如windows系统中的DirectShow。可以通过setOutputDevice()来改变系统默认的音频输出设备。
    AudioOutput会自动处理后端插件支持的所有音频格式,所以我们无需知道媒体文件具体是什么格式的格式。
    具体的音频播放例子看这里:Phonon Music Player

    Audio Effects(音频效果)

    假如一个媒体不能被直接处理,后端插件会对其进行相应的处理。这些处理过程分布在媒体流从mediaObject到输出节点(例如,AudioOutput)之间。这些处理过程是继承自Effect 类,而实际的效果处理是否可行依赖于低层操作系统。后面Querying Backends for Support部分会提到如何在特定的系统解析这些可行的效果处理。
    接下来,我们继续看下如何通过Path变量来增加效果处理:
    Phonon::Effect *effect =
    	new Phonon::Effect(
    		Phonon::BackendCapabilities::availableAudioEffects()[0],this);
    	
    path.insertEffect(effect);
    这里我们简单得使用了系统上第一个可用的效果处理。

    如果媒体流在播放,一旦效果被插入到媒体播放流中,它会马上开始作用。要停止使用这个效果,就必须再次对之前的Path使用removeEffect()

    Video

    VideoWidget是用来播放视频的。这个类不仅作为视频播放流中的一部分,同时也是视频输出流的载体。这个类会自动选择一个可用的设备来播放视频,通常是一个QT程序和图形卡的一个中间设备,比如windows系统的DirectShow,linux的GStreamer。
    videowidget本身并不播放音频流,如果想要播放音频流,就需要一个AudioOutput,就像之前一样创建并建立连接。
    下面是一个实现代码:
    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
    
    Phonon::VideoWidget *videoWidget = new Phonon::VideoWidget(this);
    
    Phonon::createPath(mediaObject,videoWidget);
    
    Phonon::AudioOutput *audioOutput = 
    	new Phonon::AudioOutput(Phonon::VideoCategory,this);
    	
    Phonon::createPath(mediaObject,audioOutput);

    VideoWidget不需要设置到一个范畴,它会自动被归类到VideoCategory,我们只需要将音频输出(AudioOutput)指定到同一个范畴即VideoCategory
    media object会在将媒体流发送到别的节点前,将媒体文件分成不同的媒体部分并分别发送 到不同的流中。由media object来决定分发到不同节点的媒体类型。

    Backends(后端插件)

    多媒体功能的实现并不是Phonon来实现的,而是后端插件,或者称之为引擎。这些功能包括连接,控制和驱动底层硬件或者一个中间设备比如win下的DirectShow。对于编程来说,这意味着播放流中的这些节点,比如media object,processors和sinks这些,是后端插件支持的。而且通过建立一个流图来工作,也就是把这些节点连接起来。

    Qt在windows平台的后端插件是使用DirectShow(需要DirectX支持),Mac平台是QuickTime,linux平台则是GStreamer。Qt功能在不同平台的提供是取决于底层操作系统和一些其它因素,比如支持的媒体格式。

    后端插件可以提供底层系统的一些信息,比如支持哪些媒体格式,比如,AVI,MP3,或者是OGG。

    用户可以为底层系统增加新的格式支持或者滤波器,例如安装DivX解码器。因此我们准确无法给出QT后端插件究竟支持多少种格式。

    Querying Backends for Support

    上面说到Phonon的实现是基于后端插件的,而对于不同的后端插件,API的支持也许并不完整。所以应用程序需要检查后端插件是否有其需要的函数实现。下面我们来看看这个检查过程是怎么实现的。
     
    后端插件通过availableMimeType()isMimeTypeAvailable()函数来确认哪一种MIME类型可以提供给播放流中的节点使用。这些类型通过字符串的形式给出,在不同后端和平台中类型名字都一样。

    如果后端插件的发生变化,后端会发出一个信号 Notifer::capabilitiesChanged(),如果可用的音频设备发生变化,后端则会发出一个信号Notifer::availableAudioOutputDevicesChanged()

    如果要确定实际的音频设备,我们可以使用上面Sinks部分中介绍的availableAudioOutputDevice(),还可以通过name()检测设备的一些信息,返回的字符串确定于操作系统,qt的后端插件不会继续深入分析这些设备。

    视频播放的底层节点并没有选择播放设备,为了方便起见,VideoWidget即是流的一个节点也是视频播出的一个载体。为了确定不同的视频格式是否被支持,可以是用isMimeTypeAvailable()。并通过Phonon::createPath()来绑定path,也就是流通的路径。建立media object后,还可以调用它的hasVideo()函数。

    更多可以看这里:Capabilities Example


    Installing Phonon

    下面的安装过程就不翻译了,大概总结一下就可以了:

    windows 平台

    windows下需要安装DirectX和DirectShow的9.0或者更新版本,需要从微软下载相关的SDK。

    xp及xp以后的系统版本

    在构建QT库之前,先下载SDK到下面地址并执行脚本:
    C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\setenv.cmd

    注意:安装过Visual C++ 2008就不需要上述步骤了

    xp的版本

    环境设置

    就是把安装的windows SDK的地址添加到系统环境变量

    Linux平台

    不同linux发行版本的GStreamer库名字不一样,一般来说使用包管理找到libgstreamer的相关库安装即可。比如fedora用yum grep|list 找一下。

    Mac OS X 平台


    安装QuickTime,最低支持版本为7.0。


    (后记:这次是第一次翻译文档,感觉挺费事的,这一次的内容比较简单,以后要常常翻译一些干货,锻炼一下阅读与表达能力,还有以后绝对绝对不在csdn博客的编辑框或者在其他任何博客的编辑框里面直接写,都用markdown写吧,后期再添加图片。)

    Edit by mooncake
    2013/04/21







    展开全文
  • QT Phonon 音乐播放器

    热门讨论 2011-07-01 20:27:05
    QT Phonon 音乐播放器可执行文件及其源码 完整版,绝对货真价实
  • QT phonon 开发的播放器

    2015-04-29 14:54:15
    qt 的phonon 开发的播放器。 有pro 文件,点击批处理,生成vcproj文件即可使用。有注释。
  • 由于 Phonon 库,QuarkPlayer 可以使用不同的后端(DirectShow、MPlayer、Xine、GStreamer、VLC...)。 它还依赖于高级插件系统,可在 Windows、Linux 和 Mac OS X 下使用。 地位 2011 年 3 月:项目搁置,从事其他...
  • Qt phonon测试程序

    2012-11-08 09:36:47
    Qt phonon应用测试项目 文章地址 http://blog.csdn.net/silencesu/article/details/8005348#reply
  • Qt Phonon详解

    2013-12-17 15:28:05
    Qt Phonon详解(转帖) 前言 Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放原始码多媒体API,後来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个多媒体框架来提供一般影音多媒体档案的播放...

    Qt Phonon详解(转帖)

    前言

    Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放原始码多媒体API,後来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个多媒体框架来提供一般影音多媒体档案的播放,而这些影音多 媒体来源可以是档案、网路串流或是指到一个档案的QUrl。

    Phonon是一个跨平台多媒体框架,能够在Qt应用程式中使用与播放影音多媒体内容。

    [ 编辑] Phonon的架构

    整体来说,Phonon的架构只需要记住以下的三东西:

    • media object
      Phonon的基础,用於管理多媒体来源。来源可能是影音档等,而能够提供基本的播放控制,例如开始、暂停或结束。而提供多媒体资料给media object的则为media source,在给media object之前通常是raw data,再由media object进行转换。
    • sinks
      输出多媒体,例如在widget上播放影片或是输出至音效卡(播放音乐)。通常sink是一个播放的装置(例如音效卡等)。而sink只接受media object来的资料,由media object控制播放;而由sink来处理这些多媒体
    • paths
      用来连接Phonon的物件,意即media object与sink之间的连接。


    可从下图看出彼此的关系(资料来源:Phonon Overview):



    所以整个播放影音的流程就是首先由media object开始播放,接著把媒体串流经由path送至sink,sink会经由音效卡等装置重新播放(play back)影音。

    [ 编辑] 安装

    QtSoftware官方网站是说Phonon预设会跟在安装Qt时一并安装,不过我不论是从Qt SDK或从source code重新build,都没有包含Phonon模组,目前我是用另外一种方式来安装Phonon,就是使用套件管理工具来从套件包来安装,只需要安装下 列的套件:

    sudo apt-get install libphonon-dev libphonon4 phononbackend-gstreamer

    安装完毕之後,就可以使用Phono模组罗。


    而与其他Qt应用程式一样,若有使用到Phonon函式库的应用程式在build的时候都需要额外设定使用Phonon模组,必须要在qmaek project file中加入:

    QT += phonon[ 编辑] 使用

    在此部分将会开始介绍如何使用Phonon这套函式库,并且会列出一些小范例来demo,首先就先来介绍几个简单好用的类别。

    [ 编辑] VideoPlayer Class

    Phonon有提供很多类别可供使用,其中最简单的,莫过於VideoPlayer这个类别了。

    VideoPlayer widget如它的名字一样,就是用来播放video,而且使用起来相当简易,而且功能也不会缺少,包括播放、暂停与停止。

    而一开始早先提到的MediaObject等类别与VideoPlayer在使用上有什么差异呢?如果不需要更复杂的功能,例如建立一个media graph,你只需要能够播放影音档案的话,其实使用VideoPlayer类别即可达到你的要求。

    而另外值得一提的就是,VideoPlayer大部分函式都是非同步,所以载入media source并不会马上播放多媒体档案,只有在呼叫函式play( )之後才会播放。

    要怎么使用这个类别呢? 其实相当简单,下面就是程式码片段:

    VideoPlayer *player = new VideoPlayer(Phonon::VideoCategory, parentWidget);
    player->play(url);

    在实体化VideoPlayer类别物件时,可以在constructor就载入多媒体种类与要放在哪个widget中(即为 parentWidget),而media source可以利用函式load()来载入或是在play()时载入,而载入方式可直接从档案或是从网路位址。


    以下就是一个简单的影音播放功能小程式:

    #include <QApplication>
    #include <QWidget>
    #include <phonon>
    #include <QUrl>

    int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget *widget = new QWidget;
    widget->setWindowTitle("Video Player");
    widget->resize(400,400);

    Phonon::VideoPlayer *player = new Phonon::VideoPlayer(Phonon::VideoCategory, widget); 
    player->load(Phonon::MediaSource("../Puppet.mpg"));

    player->play();

    widget->show();

    return app.exec();
    }[ 编辑] MediaObject Class

    MediaObject类别主要提供一个能够处理媒体播放的介面。

    MediaObject可说是处理多媒体档案最基本的一部份,它接受并管理来自於MediaSource的媒体档案。而媒体播放、暂停与停止都是由它来控制;而在此之前,media物件必须要与output node连接,如早先所讲的,这个nodes主要将媒体输出至底层的硬体,例如音效卡或显示卡等,而所需要的output node则是根据多媒体的内容而所不同,目前Phonon有两种output node;

    • AudioOutput-声音播放
    • VideoWidget-影像播放

    如果MediaSource包含声音与影像的话,这两种node都必须要连接至media物件。

    就这个类别来说,有几个函式是你必须要知道的,分别是

    • setCurrentSource():设定MediaObject的多媒体来源,而来源可以是网路上的影音档(利用QUrl来存取)或是本机档案(利用QString),使用上相当简单:
    QUrl url("http://www.example.com/music.ogg");
    media->setCurrentSource(url);
    • play():开始播放多媒体资料
    • pause():暂停播放
    • stop():停止播放


    以下为一个简单的程式片段,说明如何使用:

    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);

    Phonon::VideoWidget *videoWidget = new Phonon::VideoWidget(this);
    Phonon::createPath(mediaObject, videoWidget);

    Phonon::AudioOutput *audioOutput =
    new Phonon::AudioOutput(Phonon::VideoCategory, this);
    Phonon::createPath(mediaObject, audioOutput);

    mediaObject->play();[ 编辑] Phonon::createPath()

    这是相当重要的一个函式,主要用於建立一个Path,连接两个MediaNodes,就是source与sink。

    其实它的主要用途是在更进阶的部分,就是在使用到media graph,不过如果只是利用Phonon来播放多媒体影音档,其实只要记得它是用来连接source与输出装置即可。

    [ 编辑] AudioOutput Class

    AudioOutput类别主要是用来把多媒体的声音送到声音输出装置。所以它能够经由类似喇叭等输出装置来播放声音,稍早有提过,多媒体资料的来源必须要经过Phonon::createPath()由MediaObject连接。

    Phonon::MediaObject *mediaObject = new Phonon::MediaObject(this);
    mediaObject->setCurrentSource(Phonon::MediaSource("/mymusic/barbiegirl.wav"));
    Phonon::AudioOutput *audioOutput =
    new Phonon::AudioOutput(Phonon::MusicCategory, this);
    Phonon::Path path = Phonon::createPath(mediaObject, audioOutput);[ 编辑] VideoWidget Class

    VideoWidget类别提供能够显示出影片的widget。

    VideoWidget类别会在QWidget上播放多媒体串流的影像,跟AudioOutput一样,必须使用 Phonon::createPath()来与MediaObject连接。你可以利用一些函式来控制在QWidget中的VideoWidget显示的 大小,你可以利用setAspectRatio()或setScaleMode()来控制,而它们接收的参数可以到网站上察看,使用方式如下(预设是使用 aspect ratio):

    videowidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
    videowidget->setScaleMode(Phonon::VideoWidget::ScaleAndCrop);


    当然也有提供函式让影片进入或退出全萤幕模式。以下为一个简短的程式码范例:

    MediaObject *media = new MediaObject(parent);
    VideoWidget *vwidget = new VideoWidget(parent);
    Phonon::createPath(media, vwidget);[ 编辑] SeekSlider Class

    SeekSlider类别提供一个可滑动的slider来设定多媒体串流播放的位置。所以它会连接到MediaObject,并控制串流目前的位置。

    以下是一个使用的范例:

    Phonon::MediaObject *moo = new Phonon::MediaObject;;
    Phonon::AudioOutput *device = new Phonon::AudioOutput;
    Phonon::createPath(moo, device);

    moo->setCurrentSource(
    QString("/home/gvatteka/Music/Lumme-Badloop.ogg"));

    Phonon::SeekSlider *slider = new Phonon::SeekSlider;
    slider->setMediaObject(moo);

    slider->show();
    moo->play();[ 编辑] VolumeSlider Class

    VolumeSlider widget提供可以控制声音装置音量的widget。

    用法其实与上面的SeekSlider类似,使用范例如下:

    honon::AudioOutput *audioOutput = new Phonon::AudioOutput(Phonon::MusicCategory);
    Phonon::createPath(mediaObject, audioOutput);

    Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
    volumeSlider->setAudioOutput(audioOutput);[ 编辑] 范例

    再看过上面的一些类别介绍之後,其实就可以显一个简单的媒体播放器了,请看范例程式码:

    #include <QApplication>
    #include <QWidget>
    #include <phonon>
    #include <QUrl>
    #include <QObject>
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include <QLabel>

    int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget *widget = new QWidget;
    widget->setWindowTitle("Media Player");
    widget->resize(400,400);

    Phonon::MediaObject *media = new Phonon::MediaObject;
    media->setCurrentSource(Phonon::MediaSource("../Puppet.mpg"));

    Phonon::VideoWidget *vwidget = new Phonon::VideoWidget(widget);
    Phonon::createPath(media, vwidget);
    vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
    Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
    Phonon::createPath(media, aOutput);

    QLabel *label = new QLabel("Volume: ");
    Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
    volumeSlider->setAudioOutput(aOutput);
    volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);

    Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider;
    seekSlider->setMediaObject(media);

    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout->addWidget(label);
    hLayout->addWidget(volumeSlider);
    hLayout->addStretch();

    QVBoxLayout *vLayout = new QVBoxLayout;
    vLayout->addWidget(vwidget);
    vLayout->addWidget(seekSlider);
    vLayout->addLayout(hLayout);

    widget->setLayout(vLayout);

    widget->show();
    media->play();
    return app.exec();
    }

    上面的程式码就完成了一个简易的多媒体播放器,当然还有很多部分还需要改进,不过在此仅就Phonon的使用上做介绍。执行之後的画面如下所示:

    由於VideoWidget已经嵌入到QWidget了,所以你调整视窗大小的话,影片播放的视窗也会跟著调整。

    展开全文
  • Qt Phonon

    千次阅读 2011-04-07 21:34:00
    Qt Phonon目錄  [隱藏]1 前言2 Phonon的架構3 安裝4 使用4.1 VideoPlayer Class4.2 MediaObject Class4.3 Phonon::createPath()4.4 AudioOutput Class4.5 VideoWidget Class4.6 SeekSlider Class...
  • Structure and phonon behavior of crystalline GeTe ultrathin film
  • qt phonon

    2011-11-13 20:03:41
    在qt这个模块中比其他模块来的...以下是官方的phonon的模块的介绍。    Phonon is a cross-platform multimedia framework that enables the use of audio and video content in Qt applications. The Phonon Ov
  • Qt Phonon多媒体框架

    2011-04-16 12:29:48
    主要介绍Qt Phonon多媒体框架的结构及其编程方法
  • Qt如何构建phonon框架

    2016-05-26 02:36:22
    在VS安装了Qt4.7,为什么使用phonon时提示说无法导出dll文件,是不是使用phonon时需要相关设置。
  • Qt Phonon-player

    2014-02-19 11:06:59
    基于QT phonon开发的一个媒体播放器,大家可以试下,我测试过能用
  • 应用Phonon框架实质上分4个部分,你的程序,Phonon库,Phonon后端插件(phonon_backend),真正的后端。 Phonon其实什么都不干,他只是提供了一套API接口,这套接口可以给你的程序调用,同时也是给编写后端插件提供一...
  • phonon的使用

    2014-11-14 10:33:51
    如何使用 Qt Phonon 前言  Phonon严格来说其实非为Qt的library,Phonon原本就是KDE 4的开放原始码多媒体API,后来与Qt合并与开发,所以简单来说就是Qt使用Phonon这个多媒体框架来提供一般影音多媒体档案的播放,...
  • Qt基于Phonon做的视频播放器
  • PyQt Phonon 模块初探

    千次阅读 2014-12-18 21:29:02
    之前一直在windows上测试Phonon代码,刚刚回来用linux居然提示我没有Phonon模块 我使用的发行版是自带pyqt4的,但是不带Phonon模块,其实也说的通,Phonon本身也不是Qt的项目,详细请百度 sorry 是谷歌 我用的...
  • Pyqt phonon的使用

    2019-10-05 12:08:12
    本文是用Pyqt实现了下网上一个Qt版大牛关于phonon的介绍 Qt phonon地址:...
  • 利用qt,phonon框架制作的音乐播放器,添加歌曲播放音乐,播放显示歌词
  • qt phonon音乐播放器代码,供大家参考

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,348
精华内容 939
关键字:

phonon