GStreamer には、バスを介してやり取りできるメッセージの種類が少数、あらかじめ定義されています。ただし、メッセージは拡張可能です。プラグインでは追加のメッセージを定義でき、アプリケーションでは、これらのメッセージに対応するためのコードを用意するか、メッセージを無視するかを選択することができます。どのようなアプリケーションを作成する場合でも、少なくともエラーメッセージについては、目に見える形でユーザーにフィードバックを提供できるように処理することを強く推奨します。
すべてのメッセージにはメッセージソース、種類、およびタイムスタンプがあります。メッセージソースを使うと、該当するメッセージを送信したのはどのエレメントかを知ることができます。たとえば、一部のメッセージについては、ほとんどのアプリケーションにとって、トップレベルのパイプラインによって送信されたメッセージだけが意味を持ちます (状態変更通知など)。以下に示すのは、すべてのメッセージのリストと、これらのメッセージの意味、およびメッセージ固有の内容を解析する方法についての簡単な説明です。
エラー、警告、情報の通知: これらは、パイプラインの状態についてユーザーにメッセージを表示する必要がある場合に、エレメントによって使われるメッセージです。エラーメッセージは致命的で、データパッシングを終了させます。パイプラインの動作を再開するには、エラーを修復する必要があります。警告は致命的ではありませんが、問題が生じていることを示します。情報メッセージは、問題のない単なる通知です。これらすべてのメッセージは GError を含んでおり、主なエラーの種類とメッセージ、場合によってはデバッグ文字列を利用できます。エラー文字列とデバッグ文字列のいずれも、gst_message_parse_error ()、_parse_warning ()、および _parse_info () で取り出すことができます。エラー文字列もデバッグ文字列も、使用後は解放してやる必要があります。
ストリームの最後の通知: このメッセージはストリームが最後に達したときに送信されます。パイプラインの状態は変化しませんが、メディア処理はそれ以上行われません。アプリケーションでは、このメッセージを使うことで、プレイリストの次の曲に移動できます。ストリームの最後に達した後、ストリームを巻き戻すことも可能です。この場合は、自動的に再生が続けられます。このメッセージに固有の引数はありません。
タグ: ストリーム内にメタデータが見つかったときに送信されます。このメッセージは 1 つのパイプラインで複数回送信されることがあります (アーティスト名または曲のタイトルなどの説明用メタデータで 1 回、サンプルレートやビットレートなどのストリーム情報でさらにもう 1 回など)。アプリケーションではメタデータを内部的にキャッシュする必要があります。タグリストを解析するには、gst_message_parse_tag () を使う必要があります。タグリストが必要なくなったら、gst_tag_list_free () を使って解放する必要があります。
状態変更: 状態変更の成功後に送信されます。gst_message_parse_state_changed () を使うと、移行の前後の状態を解析できます。
バッファリング中: ネットワークストリームのキャッシング中に送信されます。gst_message_get_structure () から返された構造体の "buffer-percent" プロパティの値を取得することで、進行状況 (パーセント単位) をメッセージから手動で取り出すことができます。
エレメントメッセージ: 一部のエレメントに固有の特別なメッセージで、一般に付加機能を表します。エレメントのドキュメントでは、特定のエレメントがどんなエレメントメッセージを送信する可能性があるのかについて詳しく記述する必要があります。たとえば、'qtdemux' という QuickTime デマルチプレクサエレメントは、ストリームにリダイレクトインストラクションが含まれている場合、'redirect' エレメントメッセージを送信することがあります。
アプリケーション固有のメッセージ: これらのメッセージに関する情報は、メッセージ構造体 (上を参照) を取得してそのフィールドを読み取ることで取り出すことができます。通常、これらのメッセージは無視しても問題ありません。
アプリケーションメッセージは、アプリケーションがあるスレッドからの情報をメインスレッドにマーシャル処理する必要がある場合など、主にアプリケーション内部で使うことを目的としたメッセージです。アプリケーションメッセージは、アプリケーションがエレメントシグナルを利用する場合に特に便利です (これらのシグナルはストリーミングスレッドのコンテキストで送信されるからです)。