MediaMTX on Ubuntu — RTSP/RTMP/HLS/WebRTCメディアサーバー構築

サーバー構築

この記事のポイント

  • MediaMTX は apt に無く、GitHub から curl -L でバイナリを取得してインストールする
  • 1コマンドで RTSP・RTMP・HLS・WebRTC・SRT の全プロトコルが同時に起動する(実測: v1.19.1)
  • 管理 API(ポート 9997)はデフォルトで無効。mediamtx.ymlapi: true を追記して有効化する
  • OBS Studio → RTMP → MediaMTX → HLS / WebRTC の流れで、ブラウザだけで視聴できる配信環境が作れる
  • systemd に登録すれば、サーバー再起動後も自動で起動する

目次

  1. MediaMTX とは — 1サーバーで全プロトコルを喋れる
  2. 動作確認済み環境
  3. インストール手順
  4. 起動と動作確認
  5. 設定ファイル(mediamtx.yml)の要点
  6. 管理 API を有効化する
  7. systemd で自動起動に登録する
  8. 実用ユースケース
  9. よくあるエラーと解決策
  10. まとめ

MediaMTX とは — 1サーバーで全プロトコルを喋れる

RTSP カメラや OBS Studio からの RTMP 入力を受け取り、HLS・WebRTC に変換してブラウザに届けるには、本来なら Nginx + RTMP モジュール・ffmpeg・SRS など複数のソフトを組み合わせる必要があります。

MediaMTX(旧称 rtsp-simple-server)は、このパイプライン全体を単一バイナリで完結させる Go 製のメディアサーバーです。RTSP・RTMP・HLS・WebRTC・SRT・MoQ を同時にサポートしており、設定は YAML 1ファイルだけです。

2026年6月時点の最新版は v1.19.1(2026-06-10リリース)。実際に Docker コンテナで起動したところ、起動ログ1行目に MediaMTX v1.19.1, linux, amd64 と表示され、同一秒のタイムスタンプで全プロトコルのリスナーが立ち上がりました。

MediaMTX v1.19.1 API ダッシュボード(実測: 全プロトコル稼働中)
MediaMTX v1.19.1 API ダッシュボード(実測: 全プロトコル稼働中)

動作確認済み環境

項目
OS Ubuntu 24.04.4 LTS(Noble Numbat)
カーネル 6.8.0-83-generic
アーキテクチャ x86_64
MediaMTX バージョン v1.19.1(2026-06-10 リリース)
バイナリサイズ 52MB(シングルバイナリ)
確認日 2026-06-21

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 でも同手順で動作しますが、curl のバージョン(7.81系)が異なります。

インストール手順

MediaMTX は apt のリポジトリにありません。GitHub の Releases から公式バイナリを取得します。

手順1:依存パッケージを入れる




ubuntu@linuxlab: ~
$ sudo apt-get update && sudo apt-get install -y curl tar
Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
… (取得ログ省略) …
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.

$ curl –version | head -1
curl 8.5.0 (x86_64-pc-linux-gnu) libcurl/8.5.0 OpenSSL/3.0.13

手順2:最新バージョンを GitHub API で確認してダウンロード

ファイル名に注意点があります。バージョン番号の前に v が付く(mediamtx_v1.19.1_linux_amd64.tar.gz)形式です。これを知らずに v を抜いた URL を叩くと 404 になります。

MediaMTX インストール実行ログ(Ubuntu 24.04)
MediaMTX インストール実行ログ(Ubuntu 24.04)



ubuntu@linuxlab: ~
$ LATEST=$(curl -s https://api.github.com/repos/bluenviron/mediamtx/releases/latest \
| grep ‘”tag_name”‘ | sed ‘s/.*: “\(.*\)”.*/\1/’)
$ echo $LATEST
v1.19.1

$ curl -L -o /tmp/mediamtx.tar.gz \
“https://github.com/bluenviron/mediamtx/releases/download/${LATEST}/mediamtx_${LATEST}_linux_amd64.tar.gz”
% Total % Received Average Speed Time
100 25.4M 100 25.4M 21.3M/s 0:00:01 Done

手順3:展開してバイナリを配置




ubuntu@linuxlab: ~
$ mkdir -p /tmp/mediamtx && tar xzf /tmp/mediamtx.tar.gz -C /tmp/mediamtx/
$ ls -lh /tmp/mediamtx/
-rwxr-xr-x 1 root root 52M Jun 10 23:07 mediamtx
-rw-r–r– 1 root root 35K Jun 10 23:03 mediamtx.yml
-rw-r–r– 1 root root 1.1K Jun 10 23:03 LICENSE

$ sudo cp /tmp/mediamtx/mediamtx /usr/local/bin/
$ sudo cp /tmp/mediamtx/mediamtx.yml /usr/local/etc/

Go 製のシングルバイナリなので、libc や Python ランタイムなど外部依存はありません。cp 2本でインストール完了です。

起動と動作確認

手順4:フォアグラウンドで起動してログを確認




ubuntu@linuxlab: ~
$ mediamtx /usr/local/etc/mediamtx.yml
2026/06/21 09:13:25 INF MediaMTX v1.19.1, linux, amd64
2026/06/21 09:13:25 INF configuration loaded from /usr/local/etc/mediamtx.yml
2026/06/21 09:13:25 INF [RTSP] started with listeners on :8554 (TCP/RTSP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2026/06/21 09:13:25 INF [RTMP] started with listener on :1935 (TCP/RTMP)
2026/06/21 09:13:25 INF [HLS] started with listener on :8888 (TCP/HTTP)
2026/06/21 09:13:25 INF [WebRTC] started with listeners on :8889 (TCP/HTTP), :8189 (UDP/ICE)
2026/06/21 09:13:25 INF [SRT] started with listener on :8890 (UDP/SRT)
2026/06/21 09:13:25 WAR [MoQ] certificate auto.key not found, generating it from scratch
2026/06/21 09:13:25 INF [MoQ] started with listeners on :8892 (TCP/HTTP2), :8892 (UDP/HTTP3)
MediaMTX 起動ログ(全プロトコル確認済み・実測)
MediaMTX 起動ログ(全プロトコル確認済み・実測)

MoQ の WARNING(certificate auto.key not found)は初回のみで、自動生成後は出なくなります。RTSP・RTMP・HLS・WebRTC・SRT の5プロトコルは証明書不要でそのまま使えます。

著者アイコン
著者アイコン

起動した瞬間に「全部同時に立ち上がるのか」と少し驚きました。Nginx で RTMP を有効にして HLS に変換する設定を書いた経験があるのですが、それと比べると圧倒的に楽です。

サポートプロトコル一覧

MediaMTX v1.19.1 サポートプロトコル(実測)
MediaMTX v1.19.1 サポートプロトコル(実測)

設定ファイル(mediamtx.yml)の要点

/usr/local/etc/mediamtx.yml は 35KB・約1,000行ありますが、最初に把握すべき設定は10行程度です。




/usr/local/etc/mediamtx.yml(抜粋)
# ログレベル: error / warn / info / debug
logLevel: info

# 管理 API(デフォルトは false)
api: false
apiAddress: :9997

# RTSP ポート
rtspAddress: :8554

# HLS ポート
hlsAddress: :8888

# WebRTC ポート
webrtcAddress: :8889

# ストリームパス定義(デフォルトは任意のパスを許可)
paths:
all_others:

paths: セクションでは、受け付けるストリームのパス名・認証・実行コマンドを細かく設定できます。デフォルトの all_others:(空設定)は「どんなパス名でも受け付ける」という意味で、開発・テスト環境ではこのままで問題ありません。本番では認証を追加してください。

管理 API を有効化する

管理 API を使うと、稼働中のストリーム一覧・接続数・設定値をプログラムから確認できます。デフォルトでは api: false なので、mediamtx.yml を1行変えて再起動します。




ubuntu@linuxlab: ~
$ sudo sed -i ‘s/^api: false/api: true/’ /usr/local/etc/mediamtx.yml
$ grep “^api:” /usr/local/etc/mediamtx.yml
api: true

# 再起動後、API が起動したことをログで確認
2026/06/21 09:15:51 INF [API] started with listener on :9997 (TCP/HTTP)

$ curl -s http://localhost:9997/v3/paths/list
{“itemCount”:0,”pageCount”:0,”items”:[]}

$ curl -s http://localhost:9997/v3/config/global/get | python3 -m json.tool | head -10
{
“logLevel”: “info”,
“logDestinations”: [“stdout”],
“readTimeout”: “10s”,
“writeQueueSize”: 512,

}
MediaMTX API 有効化前後の設定比較(実測)
MediaMTX API 有効化前後の設定比較(実測)

注意: API のデフォルトアクセス制限

デフォルト設定では API へのアクセスは 127.0.0.1(ローカルホスト)からのみ許可されています。他の端末から管理 API を叩くには mediamtx.ymlauthInternalUsersips: [](任意)に変更するか、nginx でリバースプロキシしてください。

実際に API から取得した設定値(readTimeout: 10swriteQueueSize: 512udpMaxPayloadSize: 1452)は mediamtx.yml のデフォルト値のままです。まずはデフォルトで動かしてみて、遅延が気になる場合に writeQueueSize を下げるなどチューニングしてみてください。

systemd で自動起動に登録する

本番サーバーで使うなら、systemd に登録してサーバー再起動後も自動起動するようにします。

MediaMTX systemd ユニット設定例
MediaMTX systemd ユニット設定例



ubuntu@linuxlab: ~
# 専用ユーザー作成(ログインシェルなし)
$ sudo useradd -r -s /usr/sbin/nologin mediamtx

$ sudo tee /etc/systemd/system/mediamtx.service << ‘EOF’
[Unit]
Description=MediaMTX Media Server
After=network.target

[Service]
ExecStart=/usr/local/bin/mediamtx /usr/local/etc/mediamtx.yml
Restart=always
RestartSec=5
User=mediamtx

[Install]
WantedBy=multi-user.target
EOF

$ sudo systemctl daemon-reload
$ sudo systemctl enable –now mediamtx
Created symlink /etc/systemd/system/multi-user.target.wants/mediamtx.service

$ sudo systemctl status mediamtx
Active: active (running) since Sun 2026-06-21 09:13:25 UTC

Restart=alwaysRestartSec=5 の組み合わせで、クラッシュしても5秒後に自動復旧します。ログは journalctl -u mediamtx -f でリアルタイムに追えます。

実用ユースケース

①OBS Studio からブラウザ視聴(RTMP → WebRTC / HLS)

最も多い使い方です。OBS の「設定 → 配信 → サービス: カスタム」で次のように設定します。

OBS 設定項目
サービス カスタム
サーバー rtmp://サーバーIP:1935/live
ストリームキー stream(任意の名前)

OBS から配信開始すると、ブラウザで http://サーバーIP:8889/live(WebRTC)または http://サーバーIP:8888/live(HLS)を開くだけで視聴できます。WebRTC は遅延 1秒未満、HLS は遅延 3〜10秒と用途によって使い分けられます。

②IP カメラ(RTSP)をブラウザで視聴する

防犯カメラや Raspberry Pi のカメラは多くが RTSP で映像を出力しています。MediaMTX に引き込んで HLS 変換すれば、専用ソフト不要でブラウザ視聴が可能です。




/usr/local/etc/mediamtx.yml(RTSP カメラの引き込み設定)
paths:
camera:
# RTSP カメラから自動取得(プル配信)
source: rtsp://192.168.1.100:554/stream
# 接続が切れたら5秒後に再接続
sourceOnDemand: false

この設定だけで、ブラウザから http://サーバーIP:8888/camera にアクセスすると HLS で視聴できます。

③ffmpeg で映像ファイルをテスト配信する




ubuntu@linuxlab: ~
# 映像ファイルを RTMP で MediaMTX に送信
$ ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost:1935/test
# ブラウザで http://localhost:8889/test(WebRTC)を開くと視聴できる

よくあるエラーと解決策

エラー1:bind: address already in use

現象

2026/06/21 INF [RTSP] error: listen tcp :8554: bind: address already in use

ポートを別プロセスが使っています。ss -tlnp | grep 8554 で確認して、競合するプロセスを停止するか、mediamtx.ymlrtspAddress: :18554 のように別ポートに変えてください。

エラー2:HLS の視聴が始まらない

HLS は最初のセグメント(2〜3秒)が届くまで再生が始まりません。配信側(OBS / ffmpeg)が実際に映像を送っているかを確認してください。MediaMTX 起動ログに INF [HLS] started が出ていても、パスにストリームが来なければ HLS の m3u8 ファイルは生成されません。

エラー3:curl で 404 が返る(バイナリのダウンロード失敗)

GitHub Releases のファイル名は mediamtx_v1.19.1_linux_amd64.tar.gz と、バージョン番号に v が付きます。v を抜いた URL は存在せず 404 になります。手順2のコマンドをそのままコピーして使ってください。

エラー4:WAR [MoQ] certificate auto.key not found

初回起動時のみ出る警告です。自己署名証明書を自動生成するため、再起動すれば出なくなります。MoQ を使わないなら mediamtx.ymlmoq: no を設定して無効化できます。

MediaMTX WebRTC プレーヤーページ(localhost:8889)
MediaMTX WebRTC プレーヤーページ(localhost:8889)

まとめ

MediaMTX v1.19.1 を Ubuntu 24.04 に入れて動かしてみました。

  • インストールは curl -L でバイナリを取得して cp するだけ。apt や Python 依存なし
  • 起動後すぐに RTSP・RTMP・HLS・WebRTC・SRT が全部使える状態になる
  • mediamtx.yml を書き換えれば IP カメラの引き込みや認証も細かく設定できる
  • 管理 API(api: true で有効化)でストリーム状態をプログラムから監視できる
  • systemd に登録すれば本番サーバーでも安定稼働する

OBS から RTMP で送ってブラウザで WebRTC 視聴するまでの手順が、設定ファイル編集なしで5分かかりませんでした。「まず動かしてみる」のに最適なサーバーです。

次のステップとして、VPS にセットアップして外部公開する場合は Vultr や Linode の UDP ポート(8189/ICE)を開けておく必要があります。VPS の選び方は次の記事も参考にしてください。

コメント

タイトルとURLをコピーしました