Gstreamer で UltraStudio 3G Recorder を使う備忘録

Environment
Photo by hyt.

Gstreamer で UltraStudio 3G Recorder を使う備忘録です.

ここ1月ほどいろいろ忙しくて更新をサボっていましたが,前回記事

Blackmagicdesign UltraStudio Recorder 3G 雑感と備忘録
Blackmagicdesign Recorder UltraStudio 3G 雑感と備忘録です. いつもの通り結論から書くと, 普通の USB 接続の HDMI キャプチャと同じだと思って買ってはダメです.Google Meet とか ...

の続きです.

事前準備

以下 macOS と Ubuntu 22.04 の場合の事前準備について記します.なお,Gstreamer 自体はマルチプラットフォーム対応なので Windows でももちろん使えるのですが,この辺りについては Gstreamer の公式の

Installing GStreamer

をご覧ください.

Gstreamer の導入

もちろんまずは Gstreamer を導入しておかなければなりません.例えば Ubuntu だと,

$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

のような感じになりますし,macOS だと,brew

Homebrew
The Missing Package Manager for macOS (or Linux).

を用いて,

$ brew install gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly gst-plugins-bad

のように導入するのが簡単です.特に GStreamer DeckLink 関係のライブラリを含む gst-plugin-bad を導入し忘れないようにしてください.

なお,DeckLink とは,BlackmagicDesign の PCI-E 接続キャプチャーカードの製品名

DeckLink | Blackmagic Design
DeckLinkは、12G-SDIおよび8Kに対応した高性能キャプチャーカード。Mac、Windows、Linuxで使用できます。

のようで,つまり,UltraStudio Recorder 3G は DeckLink の Thunderbolt3 対応版ということなんでしょうね.Thunderbolt ってもともとは確か PCIe を外付けにする規格だったはずで,接続後は PC からは PCIe 接続と同じように見えるので,DeckLink のライブラリから使えるってことなんだと思います.

VA-API 関係ソフトウェアの導入

必須ではありませんが,Linux 環境で取り込んだ映像を全画面表示させるのに VA-API 関係のソフトウェアをあらかじめ導入しておくと良いと思います.Ubuntu 22.04 の場合は以下の通りです.

$ sudo apt install libva-dev libmfx-dev intel-media-va-driver-non-free vainfo
$ vainfo --display drm

なお,上記は Intel グラフィックスチップに対応したドライバーを導入していますが,nvidia の場合は,nvidia-va-driver を,AMD の場合は mesa-va-drivers を導入する必要があるのではないかと思いますが,これについては機材を持っていないので試していません.また,Windows も VA-API に対応しているようです.

GPUでビデオをエンコード・デコード ~Linuxで普及の「VA-API」がWindowsで利用可能に/Windows 10 November 2019 Update/Windows 11以降で
米Microsoftは2月15日(現地時間)、ビデオ関連の演算をGPUでハードウェア処理するためのAPI「Video Acceleration API」(VA-API)がWindowsで利用できるようになったと発表した。

使い方

以下,「音声なし」「音声あり」「Window 表示」「全画面表示」のパターンで Ubuntu と macOS での使い方を示します.違いは videosink plugin の部分だけです(恐らく Windows の場合もほぼ同様に使えるのではないかと思います).

Ubuntu 音声なし Windows 表示

$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 ! videoconvert ! autovideosink

Ubuntu 音声あり Window 表示

$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 buffer-size=10 ! videoconvert ! autovideosink decklinkaudiosrc connection=embedded ! audioconvert ! pulsesink

Ubuntu 音声なし全画面表示

$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 ! videoconvert ! vaapisink fullscreen=yes

macOS 音声なし全画面・Window 表示

macOS の場合は osxvideosink plugin を使えば Window 表示と全画面を普通のやり方で自由に行き来できます(表示されない場合は videoconvert plugin を使わないで直接 osxvideosink に pipe してください).

$ gst-launch-1.0 -tv decklinkvideosrc connection=hdmi mode=1080p60 ! videoconvert ! osxvideosink

うまくいかない場合

うまくいかない場合はそもそも UltraStudio Recorder がきちんと OS から認識されているかどうかを Blackmagic Media Express で確認してみてください.

また,接続ケーブルに問題があることもあります.当たり前ですが Thunderbolt3 に対応したケーブルでないときちんと認識されません(実際私の場合も Thunderbolt3 対応ではないケーブルでつないでいることに気が付かず小一時間アレコレ試しました.ケーブルがよく似ているので意外と間違いやすいと思います).

OS に UltraStudio Recorder 3G がきちんと認識されていることが確認できたら,次は Gstreamer から認識されているかどうかを gst-device-monitor-1.0 コマンドで確認してください.また,もし認識されていない場合は,gst-plugin が全て導入されているかどうかを確認してください.

$ gst-device-monitor-1.0
...
Device found:

  name  : UltraStudio Recorder 3G (Video Capture)
  class : Video/Source/Hardware
  caps  : video/x-raw, width=720, height=486, pixel-aspect-ratio=10/11, interlace-mode=interleaved, framerate=30000/1001
          video/x-raw, width=720, height=576, pixel-aspect-ratio=12/11, interlace-mode=interleaved, framerate=25/1
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24000/1001
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24/1
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=25/1
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30000/1001
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30/1
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=50/1
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60000/1001
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60/1
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=interleaved, framerate=25/1
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=interleaved, framerate=30000/1001
          video/x-raw, width=1920, height=1080, pixel-aspect-ratio=1/1, interlace-mode=interleaved, framerate=30/1
          video/x-raw, width=1280, height=720, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=50/1
          video/x-raw, width=1280, height=720, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60000/1001
          video/x-raw, width=1280, height=720, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60/1
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24000/1001
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=24/1
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=25/1
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30000/1001
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=30/1
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=50/1
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60000/1001
          video/x-raw, width=2048, height=1080, pixel-aspect-ratio=1/1, interlace-mode=progressive, framerate=60/1
  properties:
    device-number = 0 (0x00000000)
    model-name = "UltraStudio\ Recorder\ 3G"
    display-name = "UltraStudio\ Recorder\ 3G"
    max-channels = 16 (0x00000010)
    supports-format-detection = true
    serial-number = ""
  gst-launch-1.0 decklinkvideosrc ! ...
...
Device found:

  name  : UltraStudio Recorder 3G (Audio Capture)
  class : Audio/Source/Hardware
  caps  : audio/x-raw, format={ (string)S16LE, (string)S32LE }, channels={ (int)2, (int)8, (int)16 }, rate=48000, layout=interleaved
  properties:
    device-number = 0 (0x00000000)
    model-name = "UltraStudio\ Recorder\ 3G"
    display-name = "UltraStudio\ Recorder\ 3G"
    max-channels = 16 (0x00000010)
    supports-format-detection = true
    serial-number = ""
  gst-launch-1.0 decklinkaudiosrc ! ...

以上!

EnvironmentGadget
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました