GStreamerの使い方 - 入門編
はじめに
GStreamer
とは、マルチメディア系の処理をとっても簡単に実現するためのフレームワークです。コマンドラインでも簡単に実行出来ますし、その他のアプリケーション(C++等)からH.264エンコード等の処理だけGStreamerを使うことも可能です。
公式: http://gstreamer.freedesktop.org/
なお、本記事ではOSはLinux (Ubuntu) を前提とした内容になっています。
パイプラインアーキテクチャ
特徴的なのが、sinkとsourceという入出力を持つエレメントをつなぎ合わせることで目的の機能を実現するパイプラインアーキテクチャを採用している点です。コマンドラインで実行する場合、
source ! sink
のように必要なエレメントをパイプでつなげていきます。GStreamerには1000を超える豊富なエレメントがプラグインという形で提供されており、マルチメディア系の処理には大変便利です。
インストール手順
GStreamerはほぼ必須となるパッケージと、必要に応じてインストールするプラグインという形で提供されています。
基本パッケージ
libgstreamer1.0-0がGStreamer本体の基本ライブラリで、gstreamer1.0-toolsがコマンドラインで実行するためのgst-launch-1.0等を含んだ実行バイナリのパッケージです。
$ sudo apt install libgstreamer1.0-0 gstreamer1.0-tools
最低限利用するプラグイン
Audio/Video処理系を使いたいなら、まずはこれらがあれば最初は足りると思います。中でも、gstreamer1.0-libavがソフトウェアでのAudio/VideoのEncode/Decode処理で多用する中核のライブラリです。
$ sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav \
gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa \
gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudios
なお、エレメント一覧や、用したいエレメント名からパッケージ名を探す場合は本家公式GStreamerプラグイン一覧から探すことが出来ます。
コマンドラインで使ってみる
gst-inspect-1.0コマンド
現在インストール済みで利用可能なエレメント一覧を表示するときなどに利用するコマンドです。
エレメント一覧表示
gst-inspect-1.0
エレメントの詳細スペック確認
確認したいエレメント名を第1引数に指定します。
gst-inspect-1.0 rtph264pay
ブラックリスト表示
必要なライブラリや設定ファイルが足りないなどで正常にロードされないエレメント一覧がブラックリストとして登録されます。そのブラックリストを確認するには以下を実行します。なお、GStreamer関連のキャッシュは~/.cache/gstreamer-1.0
に記録されるため、上手く動かないなどのトラブルシュート時にはこのキャッシュを削除してみるのもありです。
gst-inspect-1.0 -b
テストビデオ信号の表示
videotestsrcを利用するとテスト用のビデオ信号を生成できます。autovideosinkは出力表示可能なsinkを自動で選択してくれますので、手軽に再生したい場合によく利用します。autovideosink以外にも、glimagesinkやgtksinkなどもあり、用途に合わせて使い分けすると良いでしょう。
gst-launch-1.0 videotestsrc ! autovideosink
H.264Encode&ファイル保存
gst-launch-1.0 videotestsrc ! x264enc ! filesink location=./out.h264
H.264デコード&再生
gst-launch-1.0 filesrc location=./out.h264 ! avdev_h264 ! autovideosink
Discussion