メインコンテンツへスキップ
dweOS は GStreamer によるストリーミングを公式にはサポートしていません。以下の手順は Linux と Windows のみが対象です。注: ストリーム品質が低下する可能性があります。
GStreamer は、1 本の動画ストリームを設定するだけでも非常に複雑/手間がかかる場合があります。複数ストリームやライブ録画などの便利機能は、ユーザーインターフェイス付きで Discovery を使うとずっと簡単です。
1

dweOS を確認する

dweOS のセットアップが完了したら、次のステップに進みます。
ストリーミング先のポートを控えておいてください。
2

GStreamer をインストールする

ターミナル内で次を実行します:
sudo apt update
次のコマンドを実行して GStreamer をインストールします:
sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools                
GStreamer のセットアップを確認するには、CMD を開いて次を実行します:
gst-launch-1.0 --version
次のような出力が得られるはずです:
gst-launch-1.0 version 1.16.2
GStreamer 1.16.2
https://launchpad.net/distros/ubuntu/+source/gstreamer1.0
3

GStreamer コマンドラインの変数を特定する

接続されているデバイスの動画ストリームを連携させるため、まず dweOS を構成します。
1
まず、ノートパソコン/デスクトップの IP アドレスを特定します。これを dweOS ソフトウェアに入力します。次のコマンドを実行することで確認できます:
ip addr
多数のアドレスが表示されますが、特に inet というテキストの後に続くアドレスを確認します。
多くの場合 192.168.x.xx の形式になります。
2
取得した IP を dweOS の IP アドレス欄に入力し、ストリーミング先のポートを控えておきます(デフォルト 5600)。
フィールドを入力したら、(+) ボタンでストリーミングエンドポイントを作成することを忘れないでください!
この例では、取得した IP は 192.168.5.55、ポートは 5600 です。dweOS エンドポイント
ポートフィールドの 5601 はプログラムによる自動表示で、実際にストリーミングされているエンドポイントには、カメラアイコンと削除用のごみ箱ボタンが付いています。
3
GStreamer の形式は次のとおりです:
gst-launch-1.0 [FLAGS] [SOURCE] ! [FILTER] ! [SINK]
ポートを念頭に置いた上で、GStreamer コマンドにはいくつかの注意すべきパラメータがあります。重要なフラグ:
  • -v(Verbose): ストリーム情報を出力し、エレメント間でネゴシエートされている解像度・フォーマットを確認できます。
  • -e(EOS - End of Stream): 録画にとって非常に重要です。このフラグなしで Ctrl+C を押すと、ファイルが破損(ヘッダ欠落)する可能性があります。このフラグはクリーンなシャットダウンを強制します。
  • --help-all: システムで利用可能なすべてのエレメントを一覧表示します。
ソース(入力):
  • videotestsrc: テストパターン(カラーバー、ノイズなど)を生成します。
  • パラメータ: pattern=smpte(または snowball など)
  • autovideosrc / v4l2src: Webcam(Linux)。
  • パラメータ: device=/dev/video0
  • filesrc: ローカルファイルを読み取ります。
  • パラメータ: location=./video.mp4
  • udpsrc: ネットワーク経由で UDP データを受信します。
    • パラメータ: port=5600(受信ポート)。
    • パラメータ: caps="..."(必須! 生のバイト列が実際に何であるかを GStreamer に伝えます)。
    • パラメータ: buffer-size=524288(高解像度ストリームでのパケットロスを防ぐためにバッファを増やします)。
      • 標準のバッファサイズは、H264 は 96、MJPEG は 26 です。
シンク(出力)
  • autovideosink: ウィンドウを開いて動画を再生します。
  • fakesink: データを破棄します(パイプラインがエラーなく動くかテストするのに有用)。
  • filesink: ファイルに書き出します。
  • パラメータ: location=output.mp4
  • udpsink: ネットワーク経由でストリーミングします。
必須(フィルタ/コンバータ)
  • videoconvert: 色空間(例: YUV から RGB)を変換します。「could not link」エラーが出たら、これを途中に挟みます。
  • videoscale: 動画をリサイズします。
  • capsfilter: 特定のフォーマットを強制します。構文: video/x-raw,width=1920,height=1080
  • rtp[format]depay: デペイローダ。RTP ネットワークパケットを解いて、中のストリームを取り出します。
    • : rtpjpegdepay(MJPEG 用)、rtph264depay(H.264 用)。
  • [format]dec: デコーダ。圧縮された動画を表示用の生ピクセルに展開します。
    • : jpegdecavdec_h264
4
GStreamer を試すためのコマンド例をいくつか紹介します:テストパターン
gst-launch-1.0 -v videotestsrc ! videoconvert ! autovideosink
Webcam の表示(利用可能な場合)
gst-launch-1.0 -v v4l2src ! videoconvert ! autovideosink
Webcam を 720p 30fps で強制する
gst-launch-1.0 -v v4l2src ! image/jpeg,width=1280,height=720,framerate=30/1 ! jpegdec ! videoconvert ! autovideosink
高解像度では、動画出力は通常 MJPEG で圧縮されています。image/jpeg はカメラからの圧縮フォーマットを受け入れます。jpegdec はデコーダを追加して、JPEG ストリームを生の動画に戻し、ウィンドウで表示できるようにします。
Webcam を録画する
gst-launch-1.0 -e v4l2src ! videoconvert ! x264enc ! mp4mux ! filesink location=test.mp4
これはバックグラウンドで録画します。クリップを終了するには Ctrl + C を押すと、現在のディレクトリにファイルが保存されます。この場合、ファイル名は test.mp4 で、ls -lh test.mp4 で存在を確認できます。
4

dweOS からのストリーミングをセットアップする

GStreamer コマンドを理解した上で、dweOS 専用の動画ストリームをセットアップしていきます。
ストリーミングエンドポイントの IP には、必ず自身の IP を設定することを忘れないでください!
dweOS で指定したビデオコーデック(MJPEG / H264)に応じて、以下のいずれかを実行します:MJPEG
gst-launch-1.0 udpsrc port=5600 caps="application/x-rtp, encoding-name=JPEG, payload=26" ! rtpjpegdepay ! jpegdec ! autovideosink
H264
gst-launch-1.0 udpsrc port=5600 caps="application/x-rtp, encoding-name=H264, payload=96" ! rtph264depay ! avdec_h264 ! autovideosink
コマンドラインのポート番号は、必ずストリーミング先のポートに置き換えてください!
これでカメラからのライブストリームがウィンドウに表示されているはずです!
5

録画をセットアップする

ストリームを録画するには、改めてビデオコーデックが重要になります!ターミナルに次のようなテキストが表示されていれば、ストリームが録画されていることがわかります:GStreamer 録画MJPEGMKV の場合
gst-launch-1.0 -e udpsrc port=5600 caps="application/x-rtp, encoding-name=JPEG, payload=26" ! rtpjpegdepay ! jpegparse ! matroskamux ! filesink location=output_mjpeg.mkv
上の行は MKV 形式用です。AVI は GStreamer では非常に扱いにくく、出力データを非常に厳密に整形する必要があるためです。可能ではありますが、MJPEG から AVI への変換はデフォルト出力である Discovery を使うほうがずっと簡単です。
H264MKV の場合
gst-launch-1.0 -e udpsrc port=5600 caps="application/x-rtp, encoding-name=H264, payload=96" ! rtph264depay ! h264parse ! matroskamux ! filesink location=output_h264.mkv
MP4 の場合
gst-launch-1.0 -e udpsrc port=5600 caps="application/x-rtp, encoding-name=H264, payload=96" ! rtph264depay ! h264parse ! video/x-h264,stream-format=avc ! mp4mux ! filesink location=video.mp4
6

完了!

おめでとうございます! これで GStreamer によるストリームと録画を構築するためのビルディングブロックがそろいました!
警告:GStreamer では、1 台のカメラ構成でもかなりの作業量が必要で、複数のストリームを同時に録画するのもかなりの作業と開発を要します。カメラ構成が複雑になる場合は Discovery の利用をお勧めします。

Discovery をダウンロード

サブシーネットワーク動画ストリーム向けのオールインワンマルチメディアソリューション。