Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Gstreamer Basics

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 28 Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Similaire à Gstreamer Basics (20)

Publicité

Plus récents (20)

Gstreamer Basics

  1. 1. Gstreamer 1.0 入門 開発のための基礎知識 Seiji Hiraki / 平城 聖士 Embedded Software Engeener Dec, 2018 1
  2. 2. Gstreamer Overview • マルチメディアアプリケーション用のAPI • クロスプラットフォーム対応 • プラグインアーキテクチャ • 小さなコアに必要なプラグインを追加する • パイプラインアーキテクチャ • 1000以上の要素を提供するプラグイン • 再生、変換、録画など基本的なことに加え、RTPなどのネットワーク 通信なども出来ます • コマンドラインツール • LGPLライセンス 2
  3. 3. About this document • 説明しない • APIの使い方 • アプリケーションの構築 • →アプリケーション開発するために基礎知識が必要 • 説明する • 基礎知識 • パイプライン入門 3
  4. 4. 1.Foundations 4
  5. 5. Elements (Gstreamer plug-ins) • Sources • データ生成元 (ファイル、UDP 等) • Formats • parsers, muxers, demuxer… • Codecs • coders, decoders • Filter • converters, mixers, effects, … • Sink • データ受信 (FrameBuffer、ファイル、Xwindow 等) プラグインは以下のように分類されます SourceとSinkは必ず必要になるでしょう 5
  6. 6. Gstreamer Packages • gstreamer: コアパッケージ • gst-plugins-base: 典型的な不可欠のエレメント群 • gst-plugins-good: LGPL に基づく各種の高品質プラグイン • gst-plugins-ugly: 配布面で問題が生じる可能性のある各種の 高品質プラグイン • gst-plugins-bad: さらに高いクオリティを必要とするプラグイ ン 6
  7. 7. Pads • エレメントのデータ入出力をパッドと言います • 出力をソースパッド、入力をシンクパッドと言います • パッド同士は接続(リンク)、問い合わせ(クエリの発行)、 バッファの受け渡しなどを行います filesrc decodebin glimagesink src sink src sink 7
  8. 8. Link Capabilities • Capabilities(Caps)はpadが持つメタデータです • 入出力のフォーマットは様々なため、どのpad同士でもリンク できるわけではありません • 上記のような互換性を保つためのデータを持ちます • 前述したdecodebinのような自動検索エレメントでも利用され ます • gst-inspect [element名] で pad, sinkのcapsが確認できます 8
  9. 9. Bin and Pipeline • BinはElementのコンテナ • Elementのように操作可能 • Bin内のすべてのElementの状態を変更するにはBinの状態を変 更するだけでよい • アプリケーションの複雑さを軽減できる • パイプラインは最上位のBinで、アプリケーションへのバスを 提供する • PAUSEDまたはPLAYING状態に設定すると、データフローが開 始され、メディア処理がお紺われる。 • いったん開始されると、パイプラインは停止するかデータスト リームの終わりに達するまで別スレッドで実行される 9
  10. 10. Communication • バッファ • エレメント間でストリーミングデータを渡すためのオブジェクト • 常にソースからシンクへ移動する(ダウンストリーム) • イベント • エレメント間へ送信されるオブジェクト。 • アップストリーム/ダウンストリーム可能 • メッセージ • エラー、状態変化、バッファリング状態などの情報をエレメントからアプリ にスレッドセーフな方法で転送する • アプリによって非同期的に処理する • クエリ • アプリケーションは継続時間や現在の再生位置などの情報をパイプラインか ら要求できます • クエリは常に同期的に回答されます 10
  11. 11. 11 2.Getting Started
  12. 12. Build • gstreamerとplugin-baseは必須です • 追加するpluginはより上位か同じバージョンにする必要があります 12 mkdir gstreamer & cd gstreamer git clone git://anongit.freedesktop.org/gstreamer/gstreamer cd gstreamer/ git checkout -b work <version> ./autogen.sh make -j sudo make install & sudo ldconfig git clone git://anongit.freedesktop.org/gstreamer/gst-plugins-base cd gst-plugins-base/ git checkout -b work <version> ./autogen.sh make -j sudo make install & sudo ldconfig
  13. 13. Command line tools • Gstreamerにはコマンドツールが付属しています • gst-launch-1.0は基本的なGStreamerパイプラインを構築し実 行するツールです。 • Install後にコマンドを確認してgst-launchがあることを確認し ましょう ubuntu@ubuntu-VirtualBox:~$ compgen -ac | grep gst gst-device-monitor-1.0 gstreamer-codec-install gst-play-1.0 gst-discoverer-1.0 gst-typefind-1.0 gst-launch-1.0 gst-inspect-1.0 gst-install 13
  14. 14. gst-launch • シェルのパイプのようにElement同士を接続します • gst-launchでは区切りになる文字は感嘆符( ! )となります • まずは1番シンプルなパターンを試してみましょう videotestsrc glimagesink 14 gst-launch-1.0 videotestsrc ! glimagesink 実行コマンド パイプラインのイメージ 実行結果
  15. 15. Video Playing • 下記のパイプを使ってmp4を再生します gst-launch-1.0 filesrc location="D0002031238_00000_V_000.mp4" ! decodebin ! glimagesink decodebinは利用可能なデコーダを使用して、デコードパ イプラインを自動的に構築するFilterエレメントです デコーダが無い場合はあらかじめインストールする必要が あります filesrc decodebin glimagesink Video copyright: NHK Creative Library 15
  16. 16. gst-inspect • もしプラグインが見つからなかった場合、 • gst-inspectはエレメントの情報を表示するコマンドです • オプション無しで実行するとエレメント一覧が表示されます ubuntu@ubuntu-VirtualBox:~$ gst-inspect-1.0 | grep h264 libav: avdec_h264: libav H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 decoder rtp: rtph264pay: RTP H264 payloader rtp: rtph264depay: RTP H264 depayloader uvch264: uvch264mjpgdemux: UVC H264 MJPG Demuxer uvch264: uvch264src: UVC H264 Source videoparsersbad: h264parse: H.264 parser typefindfunctions: video/x-h264: h264, x264, 264 16
  17. 17. debug option • 環境変数 GST_DEBUG • 例えば, GST_DEBUG=2,audiotestsrc:6とすると audiotestsrc エレ メントはDebug Level 6、それ以外は 2となる. • コマンドライン引数 • gst-launch-1.0 --gst-debug-help 17
  18. 18. dot • パイプラインのイメージを絵で確認したい場合 • 環境変数 GST_DEBUG_DUMP_DOT_DIR • dot ファイルの出力先を指定可能 18
  19. 19. 19 3.Details
  20. 20. Stream • パイプラインを流れるデータを構成するのは、バッファとイベ ントの組み合わせです • バッファ→実際のメディアデータ • イベント→シーク情報やストリームの最後の通知といったコン トロール情報が含まれています 20
  21. 21. Buffer • エレメントが作業する領域 • 基本はプログラマがバッファについて操作する必要はない • メイン構成 • メモリ領域へのポインタ • メモリのサイズ • タイムスタンプ • バッファを使っているエレメントがいくつあるかを示す参照カウント。 バッファを破棄するために使う • 各種フラグ 21
  22. 22. Event • 下流方向のイベント • 関係するエレメントにストリームの状態を通知 • シークやフラッシュ、ストリームの最後の通知など • 上流方向のイベント • アプリケーションとエレメント、エレメント同士のやり取りの両方に おいて、シークなどストリームの状態の変更を要求するのに使う • アプリケーションにとっては上流方向のみが重要 22
  23. 23. Thread • 説明した通りGstreamerはマルチスレッド • パイプラインはスレッドで動作する • スレッドの操作はアプリケーションに対して隠蔽されているが • アプリケーションがマルチスレッドの使用を強制することがで きるようになっている • スレッド化は以下のような場合に有益 • ネットワークストリームを処理するような場面でのデータバッファリ ング • データが失われることがない • 動画と音声の両方をストリーム再生する場合 • それぞれを独立のスレッドとして実行し適切に同期する 23
  24. 24. Queue element • いわゆるバッファリングのキューです • スレッドの使用を強制することができる • バッファとしても機能する • Gobjectプロパティ • 例えば・・・上限、下限のしきい値 • パイプラインの一部として組み込む 24
  25. 25. Scheduling • 基本は上流から下流へデータpushする • Queueエレメントによって分割されたエレメントの集合をグ ループとする 25
  26. 26. Next step • アプリケーションの構築 • 最初に説明したとおり、Gstreamerはマルチメディアアプリケーショ ン開発用のAPIです • Reference • https://gstreamer.freedesktop.org/ 26
  27. 27. 27 Questions ?
  28. 28. Thanks • Next Step • アプリケーションの構築 • Reference • https://gstreamer.freedesktop.org/ 28

×