QT Phononの詳細


前言
Phononは厳密にはQtのlibraryではなく、PhononはもともとKDE 4のオープンソースマルチメディアAPIであり、その後Qtと合併して開発されたので、簡単に言えばQtはPhononというマルチメディアフレームワークを使用して一般的なAVマルチメディアファイルの再生を提供し、これらのAVマルチメディアソースはファイル、ネットワークストリーム、または1つのファイルへのQUrlであることができる.
Phononはプラットフォーム間マルチメディアフレームワークであり、Qtアプリケーションで映像マルチメディアコンテンツを使用して再生することができる.
 
[編集]Phononのアーキテクチャ
全体的に、Phononのアーキテクチャは以下の3つのことを覚えておく必要があります.
  • 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):
    そのため、映像を再生する流れは、まずメディアobjectから再生され、次にメディア列をpathからsinkに流すことで、sinkはサウンドカードなどの装置を介して映像を再生します.
     
    [編集]インストール
    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は、その名前のようにビデオを再生するために使用され、非常に簡単に使用され、再生、一時停止、停止などの機能も欠けません.
    最初に言及したMediaObjectなどのカテゴリとVideoPlayerの使用にはどのような違いがありますか?より複雑な機能が必要でなければ、例えばmedia graphを構築し、映像ファイルを再生するだけで、実際にはVideoPlayerカテゴリを使用してあなたの要求に達することができます.
    また、VideoPlayerのほとんどのレターは非同期であるため、メディアソースにロードしてもすぐにマルチメディアファイルが再生されるわけではなく、コールレタープレイ()の後にのみ再生される.
    このカテゴリはどのように使いますか?実はかなり簡単です.次はプログラムコードのクリップです.
    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には2つの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を確立し、2つの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()またはsetScale Mode()を使用して制御できます.受信したパラメータは、次のようにWebサイトで確認できます(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に埋め込まれているので、ウィンドウの大きさを調整すると、ムービー再生のウィンドウも調整されます.
    また、本編の技術記事は墨Signal&Slotの使用が少ないので、次の記事で紹介したり、読者が自分で公式サイトで見ることができるかもしれません.