アプリケーションの上位層は、gstreamer の API に基づいてビデオ再生アプリケーションを構築する方法を理解します。
2.1 gstreamer API に基づく MP3 再生
基本的なプロセス
1. gst を初期化し、メインループを開始します。
2. パイプラインと、ソース デコーダ シンクなどのパイプライン内の必要な要素を定義します。
3. 必要なコンポーネントに関する情報を設定します。
4. バスを取得し、バス メッセージを監視します。
5. gst_bin_add_many を呼び出して各要素からパイプラインを形成し、次に gst_element_link_many を呼び出してこれらのコンポーネントをリンクします。
6. パイプラインのステータスを再生に設定します。
7. このメインループの実行を開始します
8. バスリスニングコールバック関数において、ファイル末尾のイベントを監視している場合は、メインループを終了します。
9. コード例:
GMainLoop *loop;
GstElement *pipeline,*source,*decoder,*sink;//定义组件
GstBus *bus;
gst_init(&argc,&argv);
loop = g_main_loop_new(NULL,FALSE);//创建主循环,在执行 g_main_loop_run后正式开始循环
if(argc != 2)
{
g_printerr("Usage:%s <mp3 filename>\n",argv[0]);
return -1;
}
//创建管道和组件
pipeline = gst_pipeline_new("audio-player");
source = gst_element_factory_make("filesrc","file-source");
decoder = gst_element_factory_make("mad","mad-decoder");
sink = gst_element_factory_make("autoaudiosink","audio-output");
if(!pipeline||!source||!decoder||!sink){
g_printerr("One element could not be created.Exiting.\n");
return -1;
}
//设置 source的location 参数。即 文件地址.
g_object_set(G_OBJECT(source),"location",argv[1],NULL);
//得到 管道的消息总线
bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
//添加消息监视器
gst_bus_add_watch(bus,bus_call,loop);
gst_object_unref(bus);
//把组件添加到管道中.管道是一个特殊的组件,可以更好的让数据流动
gst_bin_add_many(GST_BIN(pipeline),source,decoder,sink,NULL);
//依次连接组件
gst_element_link_many(source,decoder,sink,NULL);
//开始播放
gst_element_set_state(pipeline,GST_STATE_PLAYING);
g_print("Running\n");
//开始循环
g_main_loop_run(loop);
g_print("Returned,stopping playback\n");
gst_element_set_state(pipeline,GST_STATE_NULL);
gst_object_unref(GST_OBJECT(pipeline));
return 0;
2.2クォートのマルチメディア
qt は QMediaPlayer を通じて動作します。QMediaPlayer は、音声出力や音声ファイルの読み込みなどの操作を下部に統合しており、高レベルでカプセル化されたプレーヤーコアであり、これを呼び出すことで、任意の形式でビデオとオーディオの再生を入力して再生することができます。
QMediaPlayer を使用して音楽を再生するコード
player = new QMediaPlayer;
player->setMedia(QMediaContent(QUrl::fromLocalFile("coolsong.mp3")));
player->play();
最初のステップ: QMediaplayer オブジェクトの作成、第 2 ステップ: 現在再生されているメディア ファイルの設定、第 3 ステップ: 再生。
QMediaPlayer の最下層は、一連のカプセル化を通じて gstreamer によって実装されます。
具体的なプロセス
一連の呼び出しの後、QMediaPlayer のすべての操作が QGstreamerPlayerSession に呼び出されます。QGstreamerPlayerSession のコンストラクターで、 gst_element_factory_make("playbin3", NULL); を呼び出します。
gstreamer の playbin パイプラインの作成、playbin の videoSink と AudioSink の設定、バスの監視を行い、最後に一部のメッセージに対してコールバック関数を設定しました。以下の図に示すように、すべての QMediaPlayer の一時停止、再生、停止およびその他の再生制御操作は、最終的にこのプレイビンに異なる状態を設定します。再生操作など: gst_element_set_state(m_playbin, GST_STATE_PLAYING)
gstreamer の基本概念とプロセスを理解した後、gstreamer のソース コードを詳しく調べて、gstreamer の動作メカニズムを理解する必要があります。