現在位置 : ホーム > PIXELA Technical Expertise > GStreamer > GStreamer の紹介

GStreamer の紹介

公開日:2023年1月5日

GStreamerはマルチメディアを扱うアプリケーションのためのライブラリです。

GStreamer を利用すると、オーディオやビデオの単純な再生だけではなく、オーディオとビデオと字幕を同期して再生する、カメラの映像を取り込む、映像をエンコードする、マルチメディアのフォーマットを変換する (トランスコード) といった、マルチメディアを扱う様々な処理を行うことができます。

GStreamer は、標準で様々なマルチメディアのフォーマットに対応しており、標準では対応していないフォーマットであっても、第三者がプラグインを作成して組み込んで利用することができます。

マルチメディアのフォーマット

GStreamer はマルチメディアを扱うために設計されているため、マルチメディアのフォーマットを理解していると GStreamer をよりよく理解できるでしょう。ストリーミングビデオや、テレビ放送や、光ディスク、などに含まれる映像コンテンツは、ビデオやオーディオや字幕などの複数種類の情報が、単一のストリームに含まれて (多重化されて) います。

一般に、ビデオやオーディオは、規格化された方式で圧縮されており、コーデック (CODEC) と呼ばれます。圧縮することを符号化 (encode) と言い、解凍することを復号 (decode) と言います。

多重化することをマルチプレクス (multiplex/mux) とも言い、多重化を解除することをデマルチプレクス (demultiplex/demux) とも言います。多重化については、コンテナという用語を使うこともあります。

それらを扱うソフトウェアのことを、エンコーダ、デコーダ、マルチプレクサ、デマルチプレクサ、などと呼びます。

MPEG-2 Transport Stream

MPEG-2 Transport Stream(クリックで拡大)

上図は MPEG-2 Transport Stream (ISO/IEC 13818-1 または ITU-T Rec. H.222.0) の構造を簡易化して表示したものです。下の部分の video や audio の header + Elementary Stream (= Packetized Elemetary Stream) を分割して、上の部分の、固定長の packet (= header + payload) に格納しています。このようにすると

  1. パケットのヘッダ部分に、ビデオやオーディオそのものが持たない付加情報を加えられる
    ・A/V 同期のためのタイムスタンプなど
  2. 同じシーンのビデオとオーディオが、ストリーム中で近い位置にある
    ・シーク位置からの再生再開が容易になる
  3. (伝送経路の障害などによる) 破損の影響範囲が小さくなる
  4. ビデオやオーディオには様々な符号化方式を選択できる

などの特徴があります。

三番目の特徴はストリーミングメディアで有利に働きます。破損の恐れの低い光ディスクなどの蓄積メディアに対しては、より適した MPEG-2 Program Stream (ISO/IEC 13818-1) などの別の多重化方式が利用されることがあります。

四番目の特徴より、多重化方式と、その中に格納されるコーデックは、制約があるものの、自由に組み合わせることができます。

GStreamer の概要

マルチメディアの多重化方式とコーデックは、自由に組み合わせることができるため、マルチメディアを扱うソフトウェアも、対応する処理をモジュール化して組み合わせ可能にすると、設計の複雑さを低減できると考えられます。実際に GStreamer もそのような設計を選択しており、下図のように異なる機能を持ったモジュールを組み合わせて、パイプラインと呼ばれるグラフを構築し、達成したい処理を実現します。

GStreamer pipeline

GStreamer pipeline(クリックで拡大)

上図は、ディスク上にあるマルチメディアファイルを読みだして再生する場合の典型例で、各モジュールの役割は

モジュール名 役割
file src ファイル読み出し
demux デマルチプレクス
audio dec オーディオの復号
video dec ビデオの復号
audio sink オーディオの再生
video sink ビデオの表示

となります。

入力には、ファイルだけではなくストリーミング (http, mms, rtsp) を利用することもできます。多重化方式も、すでに紹介した MPEG-2 TS/PS 以外にも asf, avi, 3gp/mp4/mov, flv, mkv/webm, mxf, ogg といった形式を扱えます。また GStreamer は FFmpeg を利用できるため、各種オーディオとビデオのコーデックに対応しています。

GStreamer は多くのプラットフォームに移植されており、例えば Android, iOS, Linux, macOS, Windows で利用できます。

実際に使ってみる

GStreamer にはコマンドラインで実行するユーティリティが付属しています。ここでは実際に ogg/vorbis のオーディオファイルの再生を試してみます。環境は Ubuntu 22.04 を想定しています。

$ sudo apt install libgstreamer1.0-0 gstreamer1.0-tools
$ sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good

上記のコマンドで、必要なアプリケーションやライブラリをインストールします。他の環境で試す場合は、ご利用の環境で対応するパッケージをインストールしてください。

$ gst-launch-1.0 filesrc location=song.ogg ! decodebin ! audioconvert ! audioresample ! autoaudiosink

song.ogg を再生するには、上記のようにコマンドラインアプリケーション gst-launch-1.0 に、利用するプラグインとパラメータの情報を与えます。実行すると song.ogg の再生が始まり、ファイル終端まで再生されてからコマンドラインアプリケーションが終了します。

まとめ

この記事では

  • マルチメディアのフォーマット
    • MPEG-2 TS を例にとった、複数のメディアが一つのストリームに格納される仕組み
  • GStreamer-の概要
    • GStreamer がモジュールで機能分担して、マルチメディア処理を実現していること
  • 実際に使ってみる
    • gst-launch というコマンドラインアプリケーションを利用して ogg/vorgis の音楽ファイルを再生する方法

について紹介しました。

文中に記載されている各種名称、会社名、商品名などは各社の商標もしくは登録商標です。

PIXELA Technical Expertise

当社が技術学習するための情報を体系的に整理したものです。多くのエンジニアの一助になればと考え公開しています。

GStreamer 記事一覧