GStreamerとは
Gstreamer
tiscameraの一部のモジュールにはGstreamerが使われています。ここではGStreamerについて説明をします。
GStreamerは、汎用のマルチメディアフレームワークです。クロスプラットフォームとなるよう設計されており、Linux、macOS、Windowsで動作し、Python、C++でプログラムできます。また、多数のプラグインのライブラリ群で構成されており、各種codec、コンテナ形式、v4l2などの出力ドライバをサポートしています。GStreamerフレームワークは、エレメントと呼ばれるプラグインパーツを組み合わせてマルチメディア処理を組み立てるような構造になっています。これらのエレメントを組み合わせて単純なパイプラインを使ることで、簡単にビデオファイルに保存したり、ライブ表示をすることができます。マルチメディア処理の組み立てに必要な動画エンコード用プラグインパーツH.265コーデックは、Jetpackのインストール時に同時にインストールされているので、Jetpackをインストールしている場合は、H.265コーデックはすぐに使う事ができます。
説明tiscameraの画像取得にはGStreamerのパイプラインが一部使われています。GStreamerのパイプラインを通じてカメラから出力される画像の解像度やフレームレートなどが設定でき、画像の表示、保存などもパイプラインを通じて行う事ができます。
パイプラインの基本概念
GStreamerではエレメントと呼ばれるプラグインパーツをパイプのようにつなぎ合わることで処理を実現します。下記では簡単にパイプラインの説明を行います。 エレメント同士をパイプラインとして接続する為にはパッド(データの出入口)を「!」でつなぎ合わせる必要があります。パイプラインとしてつなぎ合わせる事をリンクと呼びます。
エレメントの種類によって以下のような機能があります。
- ファイルから読み込みをします。(filesrc)
- ファイルへの書き込みをします。(filesink)
- v4l2でUVCカメラから撮影したフレームを取り込みをします。(v4l2src)
- フレームを画面に出力します。(autovideosink)
なお、エレメントはパッドの持ち方でsourceエレメント、filterエレメント、sinkエレメントの3つに分類できます。 それぞれのエレメントはパッドの持ち方によっても役割が変わります。出力側のパッドをsrc、入力側のパッドをsinkと言います。
それぞれのエレメントについて以下説明していきます。
sourceエレメント | srcパッドを持ったエレメント(データ出力用エレメント) 例:tcambin(TIS社の独自のエレメント) |
---|---|
filterエレメント | srcパッドとsinkパッドを持ったエレメント(データ入出力用エレメント) 例:videoconvert ※filterエレメントの出力パッドはsrcパッドだけとは限らず、様々な出力パッド(例:demuxerエレメント、下図)があります。 |
sinkエレメント | sinkパッドだけを持ったエレメント(データ入力用エレメント) 例:ximagesink |
"tcambin ! videoconvert ! ximagesink"
一連のつなぎ合わせた処理を完成させるためにはsource→filter(なくてもOK)→sinkの順にエレメントをリンクさせパイプラインを完成させます。(全てのエレメントがリンクできるとは限らないので、GStreamerの公式サイトにある各エレメントの”Pad Templates”を確認しながらパイプラインを作成してください。)