OBS PipeWire Video ソース(obs-pwvideo)

Library

概要

OBS PipeWire Video(obs-pwvideo)は、OBS Studio向けのPipeWireベースのビデオソースプラグインです。元のOBSのPipeWireビデオ実装をフォークして、汎用的な映像ソースとして動作するように改修されています。Wayland環境での画面やウィンドウのキャプチャ、またPipeWire経由で配信されるウェブカメラやアプリケーションの映像をOBSに取り込み、他のプラットフォームで使われるSpout2やSyphonに相当する映像共有機能を提供します。libfunnelなどPipeWireに対応した送信側アプリと組み合わせることで、プロダクションや配信ワークフローに柔軟に組み込めます。

GitHub

リポジトリの統計情報

  • スター数: 7
  • フォーク数: 0
  • ウォッチャー数: 7
  • コミット数: 30
  • ファイル数: 13
  • メインの言語: CMake

主な特徴

  • PipeWireを使った汎用的なビデオソースとしてOBSに映像を取り込む
  • Waylandの画面/ウィンドウキャプチャおよびPipeWire送信アプリの映像受信に対応
  • libfunnel等の送信ライブラリと相互運用可能で、アプリ間映像共有を実現
  • CMakeベースのビルドでOBSプラグインとして組み込みやすい設計

技術的なポイント

obs-pwvideoは、OBSの既存PipeWireビデオ実装を出発点にしつつ、より汎用的な受信側ソースとして振る舞うよう改変されています。主な技術要素はPipeWireセッション管理、映像フォーマットのネゴシエーション、そしてOBSのソースライフサイクルへの統合です。PipeWire側ではストリームの発見(registry)とポートネゴシエーションを行い、フォーマット(ピクセルフォーマット、解像度、フレームレート)を動的に調整します。OBS側には受信したフレームを遅延や同期を考慮して適切にバッファリングし、OBSレンダーパイプラインに渡すための変換(色空間や行レイアウトの調整)を実装します。

Wayland環境特有の課題として、グラフィックスバッファの共有やDMA-BUFの取り扱い、プロセス間のバッファライフタイム管理が挙げられます。本プロジェクトはこれらの問題に対処するために、PipeWireのネイティブバッファ(DMA-BUF等)を活用しつつ、OBSのレンダリングが期待する形式へ効率的に変換する手法を取っています。また、libfunnelのような送信ライブラリとの互換性を保つことで、送信側が提供するメタデータやタイムスタンプに基づく同期を可能にし、音声ソース(例えばJACKソース)との連携も想定した統合が行えます。

ビルドはCMakeを用い、OBSのプラグイン体系に合わせたCMakeListsで構築されています。clang-formatやCI設定(.github)が含まれており、コード品質と自動テスト/ビルドの導入がしやすい構成です。全体として、Wayland+PipeWireのエコシステムに沿ったモダンな映像入力プラグインとして、OBSでの取り回しを容易にする設計になっています。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .clang-format: file
  • .gersemirc: file
  • .github: dir
  • .gitignore: file
  • CMakeLists.txt: file

…他 8 ファイル

まとめ

Wayland/PipeWire環境でOBSに映像を柔軟に取り込むための実用的なプラグインで、送受信連携に強みがあります。

リポジトリ情報:

READMEの抜粋:

OBS PipeWire Video Source

This source is a fork of the OBS PipeWire video code (used for screen/window capture on Wayland and PipeWire webcam capture), modified to work as a generic video source. It is the video counterpart to the JACK audio source, and serves a similar purpose as the Spout2 and Syphon sources on Windows and macOS, respectively.

It is designed to work with apps that can send video using PipeWire, such as those using libfunnel.

Th…