VLCまたはFFmpegとの主な違いは、環境が元々特定のアプリケーション用ではなく、マルチメディアで動作できるすべてのプログラム用に開発されたことです。 このフレームワークは、C、C ++ / Qt、Python、Ruby、Perlなどの言語に統合されています。
GStreamerでは、次の機能を備えたアプリケーションを作成できます。
- HTTP、RTSP / RTP、MMS、RTMPなど、ほぼすべてのプロトコルを使用してオーディオビデオを送受信します。
- MPEG、AVI、ASF、FLV、MKVなど、さまざまな形式のストリームをアソート/アセンブルします。
- メタデータをファイルにプルアンドペーストします。
- ほとんどすべてのコーデックの組み合わせでストリームをデコード/エンコードします。
この場合、オープンソースのソリューション(libavcodec、libmp3lame、libfaac)だけでなく、購入可能な独自のソリューションも使用できます。 CUDA / VAAPI / CrystalHDテクノロジーを使用して、ハードウェアサポート付きのデコーダーを使用することもできます。 - DirectFBからX-sまでの幅広いソリューションを使用して、画面またはサウンドカードにストリームを表示します。
映画を別の形式にトランスコードするなどの問題を解決するには、mencoderやVLCなどのプログラムが非常に人気があります。 しかし、GStreamerで同じことをすることはそれほど難しくありません。
以下は、フレームワークの機能を示すLinuxの例です。 これらの例では、メインプログラムgst-launchおよびgst-inspectを使用します。これは、GraphEdit Windowsアプリケーションに似ています。 グラフィカルシェルが必要な場合-gst-editorがあります。 ただし、これらのプログラムはデバッグを目的としているため、使いやすいとは思わないでください。
GStreamerを使い始めるには、いくつかの概念を理解する必要があります。
- element-データを送受信できるGStreamerのオブジェクト要素。
- source-ストリーム(ファイル、ストリーム、またはデバイス)を生成します。
- filter-ストリーム(パーサー、マルチプレクサ、コーデック)を変換する要素。
- sink-ストリームを受信し、リダイレクトしません。
- パイプライン -相互接続された要素のコレクション。
古典的な形式では、ソース->パーサー->デコーダー->フィルター->シンクのようなチェーンを取得します。
コーデックとマルチプレクサのチェーン全体を手動で収集するのが面倒な場合、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つのカテゴリに分けられます:
- gst-plugins- base-パッケージに含まれる主なプラグイン:CDDA、RTP、RTSP、ogg、theora、vorbis、Xvideo、V4L。
- gst-plugins-good -FLAC、speex、JPEG、PNGなど、信頼性に疑問を抱かないプラグイン。
- gst-plugins- bad-動作していますが、考えられる問題:VP8、XVID、FAAC、dirac、RTMP、VDPAU、DirectShow。
- gst-plugins-ugly -ASF、real、DVDSub、a52、AMR、x264を使用するときに問題なく実行しないでください。
- gst-ffmpeg-オールインワンコーデックの別個のセット。
ホステス(ソース)への注意:
- Gstreamerの機能
- gst-launchのGStreamerサンプルを使用したライブストリーム
- ハウツー
- GStreamer、RTPおよびライブストリーミング 、Pythonの例
- 有料コーデックのコレクション
- Hello World GStreamer in C