2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GStreamer勉強会 第2回 カメラ映像をRTSPサーバーでストリーミング配信してみよう!

Last updated at Posted at 2025-07-03

GStreamer勉強会 第2回 カメラ映像をRTSPサーバーでストリーミング配信してみよう!

こんにちは!本記事は「GStreamer勉強会」シリーズの第2回です。
今回は、 PCに接続されたカメラ映像をRTSPサーバーでリアルタイム配信 してみます。

まだ第1回を読んでいない方は、先にインストール編からご覧いただくのがおすすめです!

RTSPとは

RTSPは、動画などのストリーミングを制御するために使用される通信プロトコルです。
HTTP は HTML や動画ファイルのダウンロードには適していますが、リアルタイムでの映像配信にはあまり向いていません。
RTSP(Real Time Streaming Protocol)は、そうしたリアルタイム配信に適したプロトコルです。

インストール手順

RTSP 配信には gst-rtsp-server という追加パッケージが必要です。

WindowsとmacOSでインストール手順が異なります。

Windowsの場合

残念ながら、コマンドプロンプトやPowershellで動作する gst-rtsp-server のビルドは存在しないようなので、MSYS2が必要になります。

MSYS2 を未インストールの場合は、以下の手順を参考にインストールしてください。

インストールが完了したら、 MSYS2 UCRT64 を起動して、以下のコマンドを入力してください。

pacman -Syu

[Y/n] と表示されて止まっていたら、すべて y を入力してください。

pacman -Syu を初回に実行すると、MSYS2 のウィンドウを再起動するように指示されることがあります。
その場合は一度 MSYS2 UCRT64 を閉じて再度開き、もう一度 pacman -Syu を実行してください。

pacman -S mingw-w64-ucrt-x86_64-gst-rtsp-server mingw-w64-ucrt-x86_64-python-gobject

こちらも [Y/n] が表示されていたら、 y を入力してください。

これで、 gst-rtsp-server のインストールは完了です!
次は、実際にRTSPサーバーを立ち上げてみましょう。

macOSの場合

ターミナルで以下のコマンドを実行してください。

brew install gst-rtsp-server

加えて、Python のバインディングが必要です。

brew install pygobject3 gst-python

これで、 gst-rtsp-server のインストールは完了です!
次は、実際にRTSPサーバーを立ち上げてみましょう。

RTSP サーバーを立ち上げる

構成図

[カメラ] → GStreamer → RTSPサーバー(ポート: 8554)→ クライアントが視聴

rtsp_server.py の設置

以下のファイルをお好きなフォルダに設置してください。

rtsp_server.py
import platform
from gi import require_version
require_version('Gst', '1.0')
require_version('GstRtspServer', '1.0')

from gi.repository import Gst, GstRtspServer, GLib

Gst.init(None)

class MJPEGFactory(GstRtspServer.RTSPMediaFactory):
    def __init__(self):
        super().__init__()

        system = platform.system()
        if system == "Darwin":  # macOS
            video_src = "avfvideosrc"
        elif system == "Windows":
            video_src = "ksvideosrc device-index=0"
        else:  # Linux など
            video_src = "v4l2src device=/dev/video0"

        pipeline = (
            f"{video_src} ! videoconvert ! videoscale "
            "! video/x-raw,width=640,height=480,framerate=15/1 "
            "! jpegenc ! rtpjpegpay name=pay0 pt=96"
        )

        self.set_launch(pipeline)
        self.set_shared(True)

server = GstRtspServer.RTSPServer()
factory = MJPEGFactory()
server.get_mount_points().add_factory("/stream", factory)
server.attach(None)

print("RTSPサーバー起動: rtsp://localhost:8554/stream")
GLib.MainLoop().run()

RTSPサーバー起動

Windowsの場合は、 MSYS2 UCRT64 を起動してください。
macOSの場合は、 ターミナル を起動してください。

rtsp_server.py を保存したフォルダに移動し、以下のコマンドを実行してください。

python rtsp_server.py

※Python 3.x の使用を推奨します。Python 2.x では動作しません。

macOSで複数のPython環境を使っている場合、python コマンドが正しくリンクされていない可能性があります。その場合は以下のように、Homebrew でインストールされた Python のパスを明示して実行してください。

/opt/homebrew/bin/python3 rtsp_server.py

スクリプトが成功すれば、以下の URL で配信されます!

rtsp://localhost:8554/stream

RTSPクライアントで視聴する

本当に配信されているか確認してみましょう!

別のターミナルで以下のコマンドを実行してください。
こちらは MSYS2 UCRT64 でなくても大丈夫です。

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/stream latency=100 ! decodebin ! videoconvert ! queue ! autovideosink

latency=100 は状況に応じて 0〜300 程度で調整可能です。

カメラ映像が画面に表示されれば成功です!

gst-launch-1.0 がインストールされていない場合は、第1回の手順をご参照ください!

映像が表示されないときの対処法

  • Zoom, OBS, Teams等の他のアプリがカメラを使用中でしたら、止めてください。
  • gst-launch-1.0 の後に -v オプションをつけて実行すると、詳細なログが表示されます
  • rtsp_server.pyvideo_src の設定が合っていない場合もあります。例えば Windows でカメラが複数あるときは device-index=1 のように番号を変更してみてください。

使用エレメントの解説

GStreamer では、エレメントと呼ばれる小さな処理単位をパイプラインでつなぎます。

エレメント Windows macOS 役割
ksvideosrc カメラ入力(ソース)。Windows の DirectShow を使用して内蔵カメラから映像を取得します。
avfvideosrc カメラ入力(ソース)。macOS の AVFoundation を使用して内蔵カメラから映像を取得します。
videoconvert 映像フォーマット変換。後続エレメントが扱える形式に整えます(ピクセルフォーマットなど)。
videoscale 映像の解像度を変更できるようにします。
jpegenc 映像をJPEGに変換します。
rtpjpegpay JPEG 映像を RTP パケットに分割・ペイロードします。RTSP配信用。

Windowsでは mfvideosrcksvideosrc より新しいGStreamerのビデオ入力プラグインですが、 mfvideosrc は MJPEG 圧縮やRTSP 配信との相性問題が報告されているようなので、ここでは採用しませんでした。

さいごに

次回は、GStreamer を使ってカメラ映像を Unity 上でリアルタイムに表示する方法を紹介する予定です。お楽しみに!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?