MediaMTXのHLSをプロキシしつつ視聴者数の予測を立てるものです。 -# READMEはAIに一部書かせてます。
- 複数ドメインの証明書を切り替え
- ドメインごとに別のMediaMTX HLSパスへリバースプロキシ
/metrics/でPrometheus形式のmetricsを公開- MPEG-TS segmentをメモリキャッシュしてMediaMTXへの負荷を削減
- ドメインごとの証明書ファイルパスを設定可能
- DNSで各ドメインが本プロキシが動作しているサーバーを向いていること
- 各ドメインの証明書と秘密鍵をこのサーバー上で参照できること
- MediaMTX側でHLSが有効になっていること
- config.example.json を
config.jsonにコピーして編集します。 - 各
domains[].upstreamに、対象のMediaMTX HLSベースURLを指定します。 例:http://127.0.0.1:8888/camera1/ - 各ドメインに
cert_fileとkey_fileを設定します。 - metricsの公開パスを変えたい場合は
metrics_pathを変更します。 cache_max_bytesはメモリキャッシュ上限です。デフォルトは 512MB です。cache_ttl_secondsはMPEG-TS segmentのキャッシュ保持秒数です。
{
"listen_https": ":443",
"metrics_path": "/metrics/",
"cache_max_bytes": 536870912,
"cache_ttl_seconds": 30,
"domains": [
{
"host": "cam1.example.com",
"upstream": "http://127.0.0.1:8888/camera1/",
"proxy_path": "/",
"cert_file": "C:/certs/cam1.example.com/fullchain.pem",
"key_file": "C:/certs/cam1.example.com/privkey.pem"
}
]
}Linux版:
go build -o ./bin/mediamtx-hls-proxy-linux-amd64 .Windows版:
go build -o ./bin/mediamtx-hls-proxy.exe ../bin/mediamtx-hls-proxy-linux-amd64-config を省略した場合は、バイナリと同じディレクトリにある config.json を読み込みます。
./mediamtx-hls-proxy-linux-amd64 -config config.json相対パスで -config を指定した場合も、カレントディレクトリではなくバイナリ配置ディレクトリ基準で解決します。
サンプルは deploy/systemd/mediamtx-hls-proxy.service に置いてあります。
- バイナリと
config.jsonを/opt/mediamtx-hls-proxy/に配置 - service ファイルを
/etc/systemd/system/mediamtx-hls-proxy.serviceにコピー - 必要に応じて
User、Group、ExecStart、証明書パスを環境に合わせて変更 - 以下を実行
sudo systemctl daemon-reload
sudo systemctl enable --now mediamtx-hls-proxy
sudo systemctl status mediamtx-hls-proxyログ確認:
journalctl -u mediamtx-hls-proxy -fhttps://cam1.example.com/index.m3u8のように/配下でplaylistを直接確認できます。- segmentやpartial segmentも
/配下で同じようにプロキシされます。 https://cam1.example.com/metrics/でPrometheus形式のmetricsを取得できます。hls_viewers{stream="camera1"}で、直近30秒以内にHLSを取りに来たユニークIP数を確認できます。.tsと.mpegtsのGETリクエストだけがメモリキャッシュ対象です。
- MediaMTXが認証付きなら、このプロキシ側に認証ヘッダー付与などの追加実装が必要です。
/metrics/は各ドメインで共通に公開され、このパスだけは上流へ流さずローカルのmetricsを返します。外部公開したくない場合はFWやリバースプロキシで制限してください。- 取得できる主な指標はリクエスト総数、レスポンスステータス総数、処理時間、同時処理数、ストリームごとの推定視聴者数、キャッシュヒット数、キャッシュミス数、キャッシュ使用量です。
- playlist はキャッシュしません。ライブ性を落とさず、MPEG-TS segment だけを軽くする構成です。