GStreamer:Linux風のコーデック

Totem、Rhythmbox、BansheeなどのGnomeプレーヤーの仕組みについて考えたことはありますか? おそらく、新しくインストールしたUbuntuの各自、AVI-shkuを再生しようとすると、追加パッケージgst-ffmpegまたはgst-plugins-uglyをインストールする必要があるというメッセージが表示されました。 カットの下で-このマルチメディアフレームワークがどのように機能し、何ができるかについての光を明確にする私の試み。

VLCまたはFFmpegとの主な違いは、環境が元々特定のアプリケーション用ではなく、マルチメディアで動作できるすべてのプログラム用に開発されたことです。 このフレームワークは、C、C ++ / Qt、Python、Ruby、Perlなどの言語に統合されています。

GStreamerでは、次の機能を備えたアプリケーションを作成できます。


映画を別の形式にトランスコードするなどの問題を解決するには、mencoderやVLCなどのプログラムが非常に人気があります。 しかし、GStreamerで同じことをすることはそれほど難しくありません。

以下は、フレームワークの機能を示すLinuxの例です。 これらの例では、メインプログラムgst-launchおよびgst-inspectを使用します。これは、GraphEdit Windowsアプリケーションに似ています。 グラフィカルシェルが必要な場合-gst-editorがあります。 ただし、これらのプログラムはデバッグを目的としているため、使いやすいとは思わないでください。

GStreamerを使い始めるには、いくつかの概念を理解する必要があります。

古典的な形式では、ソース->パーサー->デコーダー->フィルター->シンクのようなチェーンを取得します。

コーデックとマルチプレクサのチェーン全体を手動で収集するのが面倒な場合、GStreamerはそれを行うことができます。

$ gst-launch playbin uri=file:///home/me/audo.mp3


playbin要素自体がファイルを解析し、目的のコーデックと出力要素を見つけます。 必要なのは、再生するファイルへのパスを指定することだけです。 どの要素が何に責任があるのか​​疑問に思っている場合は、gst-inspectを実行して利用可能なすべての要素を確認すると、「gst-inspect lame」にmp3エンコーダーのパラメーターが表示されます。 また、要素「decodebin2」の有用性に注目する価値があります。この要素自体が目的のデコーダを見つけます。

最も単純なオーディオプレーヤー:

$ gst-launch filesrc location=audio.mp3 ! decodebin2 ! alsasink


最も単純なオーディオプレーヤー(コーデックを手動で選択し、形式に同意します):

$ gst-launch filesrc location=audio.mp3 ! mad ! audioconvert ! audioresample ! alsasink


プレーヤーはより複雑です(サウンドとビデオを使用):

$ gst-launch filesrc location=audovideofile.mpeg ! decodebin2 name=decoder \
decoder. ! ffmpegcolorspace ! xvimagesink \
decoder. ! audioconvert ! audioresample ! alsasink


AVIファイルをMOVにトランスコードする必要がある場合は、次のコマンドを使用できます。

$ gst-launch-0.10 filesrc location=film.avi ! \
decodebin2 name=decoder { qtmux name=muxer ! filesink location=film.mov } \
{ decoder. ! ffmpegcolorspace ! jpegenc ! queue ! muxer. } \
{ decoder. ! queue ! audioconvert ! queue ! muxer. }


ファイルへの録画と、画面へのブロードキャストビデオの表示と同時にブロードキャストを行いますか? 問題ありません:

$ gst-launch v4l2src ! queue ! \
ffmpegcolorspace ! tee name=t1 ! \
queue ! xvimagesink sync=false t1. ! \
queue ! theoraenc quality=1 ! \
queue ! oggmux name=mux \
alsasrc ! audio/x-raw-int,rate=8000,channels=1,depth=8 ! \
queue ! audioconvert ! vorbisenc ! \
queue ! mux. mux. ! \
queue ! tee name= t ! \
queue ! filesink location=test.ogg t. ! \
queue ! shout2send ip=<-icecast-> port=8000 password=hackme


librtmpのおかげで、フラッシュでハングアップしたい人たちもそばに立っていません(gst-plugins-badパッケージを再構築する必要があります)。

$ gst-launch v4l2src ! \
queue ! ffmpegcolorspace ! ffenc_flv ! \
queue ! flvmux name=muux is-live=true ! \
rtmpsink location='rtmp://localhost/path/to/stream live=1' \
alsasrc ! audio/x-raw-int,rate=22050,channels=1,depth=16 ! \
queue ! audioconvert ! lame bitrate=48 ! \
queue ! muux.


そのため、開発者は、「ブリッジ」のおかげでMacOSまたはWindowsを使用している場合、「ネイティブ」マルチメディアフレームワーク(QuickTime / DirectShow)の使用に注意しました。

結論として、開発者がまだ解決しなければならない多くの問題(非同期、メモリリークとパフォーマンスの問題)があります。 それらのほとんどは、サードパーティのライブラリの使用に関連しています。サードパーティのライブラリは、常に適切に記述されているわけではありません。 開発者が興味深いトリックを思いついたのはそのためです-プラグインは5つのカテゴリに分けられます:


ホステス(ソース)への注意:

  1. Gstreamerの機能
  2. gst-launchのGStreamerサンプルを使用したライブストリーム
  3. ハウツー
  4. GStreamer、RTPおよびライブストリーミング 、Pythonの例
  5. 有料コーデックのコレクション
  6. Hello World GStreamer in C

Source: https://habr.com/ru/post/J127023/


All Articles