Qtのクイックマルチメディア - 音楽とビデオ

MediaPlayerのはQMLコアマルチメディア・クラスを提供している、あなたは、オーディオとビデオを再生することができます。文書の冒頭に「輸入QtMultimedia 5.0」QML文を追加して、QtMultimediaモジュールを導入するのMediaPlayer、必要性を使用します。MediaPlayerのは、テンプレートとしてのQt QuickAppでプロジェクトを作成した場合、あなたはまた、プロファイルでのステートメントを追加する必要があり、QMLのQt C ++のマルチメディアフレームワークQML環境のためのスポークスマンであります:QT += multimedia


まず、音楽再生

コードのダースライン上で、音楽、simple_music.qmlを再生する最も簡単な例を見て:

import QtQuick 2.2
import QtMultimedia 5.0
Rectangle {
    width: 200;
    height: 100;

    MediaPlayer {
        autoPlay: true;
        source: "wangjie_game_and_dream.mp3";
    }
}

MediaPlayerの、コードのわずか4行について。QML文書は「qmlscenesimple_music.qml」コマンドを実行し、MP3ファイルを対応する同じディレクトリに置かれ、音楽が発音します。

この単純な例では、ソース属性は、それが絶対パス、相対パス、有効なHTTPリンクを受け入れ、それはタイプのURLで、再生するファイルを指定します。autoPlayプロパティがtrueに設定されている、MediaPlayerのオブジェクトはすぐに再生を開始するために作成されていることを示します。あなたはすぐにはない非常に良いプレーを開始感じた場合、あなたはまた、あなたがプレイ()メソッドに適切なタイミングを考えるのMediaPlayerを呼び出すことができます。

あなたはonDurationChanged信号プロセッサを達成するために、ミリ秒単位で、整数値である、音楽、訪問durationプロパティの長さを知りたい場合は、それをするのに長い時間がかかることがあります。

あなたがプレイの進行状況を知りたい場合は、それがリアルタイムで進行状況を表示することができ、onPositionChanged信号プロセッサを実現するために、ミリ秒単位の整数値であり、positionプロパティにアクセスすることができます。

ストップ演奏にstop()メソッドを呼び出して、再生を一時停止する一時停止()メソッドを呼び出します。再生状態が変化しながら、playbackStateはMediaPlayer.PlayingState、MediaPlayer.PausedState、メディア・プレイヤー。StoppedStateを3つの値をとるtype属性を、列挙読み取ることができるonPlaybackStateChanged信号プロセッサ内playbackStateChanged()信号を発行します。

シーク属性は、メディアサポートは、それが真であるとき、あなたが放送を検索する(オフセット)メソッドを求めて呼び出すことができ、求めるかどうかを示します。パラメータは、ミリ秒単位で、現在位置からの相対オフセットオフセット。方法は、位置プロパティは、必ずしも直ちに新しいならない返す場合の動作は、非同期であってもよいことに留意されたいです。

ミュート、ボリュームのプロパティセットでボリュームを読んで、imited属性セットで読み取ることができます。

まあ、非常に多くの一般的な操作は、今のビルドより機能豊富なシンプルな音楽プレーヤーをしましょう。(また、あなたは、スペースの不足が掲載されていないFlatButton、そのQMLファイルの内容を使用する必要があります。)Simple_music_player.qmlの内容は次の通りです:

import QtQuick 2.2
import QtMultimedia 5.0
Rectangle {
    width: 320;
    height: 240;
    color: "black";

    property var utilDate: new Date();

    function msecs2String(msecs){
        utilDate.setTime(msecs);
        return Qt.formatTime(utilDate, "mm:ss");
    }

    MediaPlayer {
        id: player;
        source: "wangjie_game_and_dream.mp3";
        onPositionChanged: {
            progress.text = msecs2String(position) + progress.sDuration;
        }
        onDurationChanged: {
            progress.sDuration = " / " + msecs2String(duration);
        }
        onPlaybackStateChanged: {
            switch(playbackState){
            case MediaPlayer.PlayingState:
                state.text = "播放中";
                break;
            case MediaPlayer.PausedState:
                state.text = "已暂停";
                break;
            case MediaPlayer.StoppedState:
                state.text = "停止";
                break;
            }
        }
        onStatusChanged: {
            switch(status){
            case MediaPlayer.Loaded:
                console.log(metaData.albumArtist, metaData.albumTitle, metaData.author, metaData.channelCount);
                break;
            }
        }
    }

    Row {
        id: controller;
        anchors.top: parent.verticalCenter;
        anchors.horizontalCenter: parent.horizontalCenter;
        anchors.topMargin: 4;
        spacing: 4;
        FlatButton {
            width: 50;
            height: 50;
            iconSource: "ic_rew.png";
            onClicked: if(player.seekable)player.seek(player.position - 5000);
        }
        FlatButton {
            width: 50;
            height: 50;
            iconSource: "ic_pause.png";
            onClicked: player.pause();
        }
        FlatButton {
            width: 50;
            height: 50;
            iconSource: "ic_play.png";
            onClicked: player.play();
        }
        FlatButton {
            width: 50;
            height: 50;
            iconSource: "ic_stop.png";
            onClicked: player.stop();
        }
        FlatButton {
            width: 50;
            height: 50;
            iconSource: "ic_ff.png";
            onClicked: if(player.seekable)player.seek(player.position + 5000);
        }
    }
    Text {
        id: progress;
        anchors.left: controller.left;
        anchors.bottom: controller.top;
        anchors.bottomMargin: 4;
        color: "white";
        font.pointSize: 12;
        property string sDuration;
    }
    Text {
        id: state;
        anchors.left: progress.left;
        anchors.bottom: progress.top;
        anchors.bottomMargin: 4;
        color: "white";
        font.pointSize: 12;
    }
    Text {
        id: metaInfo;
        anchors.left: state.left;
        anchors.bottom: state.top;
        anchors.bottomMargin: 4;
        color: "blue";
        font.pointSize: 14;
    }
}

図に示すようにqmlsceneローディングsimple_music_player.qml、結果を使用します。


プレイヤーのこのバージョンでは、ファイルのみを内蔵し、また、プログレスバーをドラッグすることができますが、MediaPlayerの共通インターフェースの使用法を再生することができ、まだ非常に簡単です。画面上にそれらのもの、プレイリストの事、あなたには、いくつかの美しい写真を見つけるために、これに基づいてミックスに追加することができ、あなたはクールな音楽プレーヤーを作成することができます。


第二に、プレイ動画

音楽のいくつかよりも少し複雑なビデオを再生するには、MediaPlayerのでVideoOutput要素を必要としています。VideoOutputがビデオをレンダリングするために使用され、カメラのファインダー(プレビューウィンドウ)として使用することができ、最も簡単な使い方はあなたが唯一のMediaPlayerのオブジェクトにそのソースプロパティにポイントする必要があることです。simple_video.qmlは、ローカルビデオを再生する方法を示しています。

import QtQuick 2.2
import QtMultimedia 5.0
Rectangle {
    width: 720;
    height: 480;

    MediaPlayer {
        id: player;
        source: "D:/game/helloMv/3D1.mp4";

        onError: {
            console.log(errorString);
        }
    }

    VideoOutput {
        anchors.fill: parent;
        source: player;
    }

    MouseArea {
        anchors.fill: parent;
        onClicked: {
            console.log("call play");
            player.play();
        }
    }
}

あなたは、オーディオ、ビデオ、そのソースプロパティのプレーヤーのためのちょうど1つのよりVideoOutputオブジェクトの例に比べて、見ることができるように。ときにビデオを再生するための再生()を呼び出して、マウスで左クリックします。

あなたは、Windowsプラットフォーム上でqmlscene負荷simple_video.qmlを使用する場合は、再生できない場合があり、必ずお使いのシステムは、ジョブに必要なのDirectShowフィルターがインストールされていることを確認。あなたがプレイすることができない場合は、LAVフィルタをインストールしようとすることができます(ダウンロードしたいあなたのお母さんの度合いを見つけてください、あなたはプロのテストをインストールすることができ、ランダムに配置されました)。LAVフィルタは、DirectShowのスプリッタと、オーディオおよびビデオデコーダをもとにffmpegのグループ、サポート最も一般的なオーディオおよびビデオフォーマットです。

以下は、レンダリングを果たしています。


言っても過言ではないように、一時停止、停止、ポジショニング、そして音楽などのコントロールビデオ再生、、。次に、我々は、メタ情報のマルチメディアを取得する方法を見て。


第三に、マルチメディアメタ情報

どのようなマルチメディアメタ情報?こうした曲、アルバムのリリース日、アーティストとしてのメディア、それらのためのメディア記述情報、外で、サンプリングレートは、メタ情報であり、ビデオの解像度ならば、などのフォーマット、フレームレートをコードする、メタ情報であり、 。

MediaPlayerのオブジェクトはそれにアクセスすることで、元のあらゆる側面についての情報を含むグループ属性のメタデータを、持っている、あなたはメディア記述を発見することができます。しかし、その後、これらのルックス美しいメタ情報はああ、それはこれらのサービスを提供できる基盤となるMediaPlayerのプレーヤーを使用するかどうかに依存して利用できない場合があります。あなたが得ることができるので、あなたは、この情報が必要な場合:onStatusChanged信号プロセッサで、リードステータスプロパティの値は、必要な情報へのアクセスをMediaPlayer.Loadedとき。このように:

MediaPlayer {
        id: player;
        source: "wangjie_game_and_dream.mp3";
    
        onStatusChanged: {
           switch(status){
               case MediaPlayer.Loaded:
                 console.log(metaData.albumArtist,
                             metaData.albumTitle,
                             metaData.author, metaData.channelCount);
                 break;
           }
    }        
}

私はchannelCountにこの情報を取ることができ、MP3ファイルを使用し、出力は、2つのチャンネルを示し、2です。あなたはメタ情報詳細マルチメディアを知りたい場合は、QtのMediaPlayerのヘルプのマニュアルを参照してください。


コードのこのセクションでは、をご覧くださいgithubの-マルチメディアをダウンロードします。


参考:

「Qtのクイックコアプログラミング」第14章


おすすめ

転載: www.cnblogs.com/linuxAndMcu/p/11986616.html