はじめに
- この記事ではMoQのRust実装であるmoq-rsを試しで動かしてみます。
- MoQの詳しい説明はしていません。
- MoQでBig Back Bunny(ウサギの動画)をライブ配信して視聴を試みます。
前提(環境構築)
Publisher、Relay、Subscriberの用意
- Publisher、Relay、Subscriber の3つのノードを建てます。
- すべてUbuntu24で建てました。
- 映像視聴のためにSubscriberだけUbuntuDesktopです。
- デフォルトゲートウェイはいい感じに設定してください。
筆者はProxmox上で構築しました。それぞれのネットワークはSDNでSimpleZone作りました。(正しい使い方なのか?)
スペック低いと結構辛いので(特にPublisherとSubscriber)、最低でもメモリ4GB以上CPU4コア以上あってもいいかもしれない。(もっとあってもいい)
パッケージのインストールとかクローンとか
以下のコマンドで環境構築します。Publisher、Relay、Subscriberそれぞれでやります。
# 必要パッケージのインストール
sudo apt update
sudo apt install -y build-essential pkg-config libssl-dev ffmpeg clang curl cmake git unar -y
# Rustのインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# リポジトリのクローンとビルド
git clone https://github.com/cloudflare/moq-rs.git
cd moq-rs
cargo build --release
2025年12月11日現在のmainブランチでやってますが、更新されたりしたらやり方変わるかもしれません。
Relayに自己署名と秘密鍵を作る
OpenSSLで作ります。(なかったら動かなかった)
openssl req -new -newkey rsa:2048 -x509 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=localhost"
Relay起動
--dev をつけるとフィンガープリント提供用のWebサーバーなどを有効にしてくれるらしいです。
./target/release/moq-relay-ietf --tls-cert cert.pem --tls-key key.pem --bind [::]:4443 --dev
コンソール特に出ないけどいいのか?
Publisher起動して配信
ウサギの動画をダウンロード
wget https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_60fps_normal.mp4.zip
unar bbb_sunflower_1080p_60fps_normal.mp4.zip
ウサギの動画をffmpegでmp4を断片化させてループでライブ配信をパイプでmoq-rsに流す。試すだけなのでRelayを静的に設定しています。
ffmpeg -hide_banner \
-v quiet \
-stream_loop -1 \
-re \
-i bbb_sunflower_1080p_60fps_normal.mp4 \
-an -f mp4 \
-movflags empty_moov+frag_every_frame+separate_moof+omit_tfhd_offset \
- \
| ./target/release/moq-pub \
--name bbb \
--tls-disable-verify \
https://10.0.1.11:4443/moq
これでウサギの動画を永遠にライブ放送します。
timestamp: 64000 segment: 1:0 priority: 127 ←こんな感じのが永遠に出てきます。1:0の1はGOP番号らしい?60fpsだから1秒に付き1増えるはず(たぶん)。ループ再生なので永遠に増えます。
Subscriberで映像視聴
IPはリレーを指定して映像を取得します。パイプでffplayに取得した映像を流せば視聴できます。SubscriberはUbuntuDesktopなので、コマンドを時刻するとGUIが開いてウサギの動画が見れます。
./target/release/moq-sub --name bbb --tls-disable-verify https://10.0.2.11:4443/moq | ffplay -i -
こんな感じで見れるハズ
おわりに
ノードが3つしかない簡単な構成ですが、moq-rsを試してみました。Subscriberが2個あってもいいかも。そうすればRelayがいい感じに働いてPublisher↔Relayの冗長性が解消されるのがわかるかも
疑問
IPが動的ならどうなるのか?URLがドメインだったら?とかが疑問です。CDNを応用すればリレーの発見とかできそうな気がするんですがそんな感じなんですかね?
copyright 2008, Blender Foundation / www.bigbuckbunny.org


