English | Español | Français | Italiano | 日本語 | Português | 中文
moqxr は、Linux、macOS、Windows 向けの C++20 OpenMOQ publisher です。
ファイルおよびライブメディアを Media over QUIC Transport(MOQT)用にパッケージ化し、MSF/CMSF catalog と publish plan を構築して、picoquic ベースの Raw QUIC または WebTransport 接続で公開します。
- fragmented MP4(
ftyp+moov+moof/mdat)を解析し、progressive MP4 を fragmented media object に remux します。 - HEVC signaling と
hev1からhvc1への正規化を含む、track metadata と RFC 6381 codec identifier を抽出します。 - MSF/CMSF version 1 catalog、初期化データ、任意の media timeline、SAP event timeline を構築します。
- batch input、stdin からの live fragmented MP4、CTE LL-DASH ingest に既存の CMAF CENC content protection がある場合、それを検出して通知します。暗号化や復号は行いません。
- catalog、初期化、media、probe、publish plan の各ファイルをローカル検査用に出力します。
- メイン CLI が対応する MOQT draft profile(draft 16、デフォルト、および draft 18)で公開します。
- picoquic と picotls が利用可能な場合、Raw QUIC または WebTransport で公開します。
- stdin からの live fragmented MP4、libsrt が利用可能な場合の SRT 経由 MPEG-TS、HTTP/1.1 chunked CTE LL-DASH ingest 経由の CMAF を受け付けます。
--urlで MSF URL を解析し、--print-msf-urlsで catalog discovery URL を表示します。- FFmpeg 生成ライブメディア、CAT4MOQ 認可、MPEG-2 TS/M2TS パッケージング用の C++ Publisher API example を提供します。
- draft 16 と 18 では、C11 Media-over-QUIC library moq5 経由の公開を選択できます。
ビルドとテスト:
cmake -S . -B build -DOPENMOQ_RUN_PICOQUIC_SMOKE_TESTS=OFF
cmake --build build
ctest --test-dir build --output-on-failureデフォルトの build では、openmoq-publisher executable と Publisher static library が生成されます。Linux/macOS では build/libopenmoq_publisher.a、Windows の Visual Studio generator では build\<config>\openmoq_publisher.lib です。
publish plan を検査:
./build/openmoq-publisher --input sample.mp4 --dump-plancatalog とパッケージ化された media object を出力:
./build/openmoq-publisher --input sample.mp4 --emit-dir out/デフォルトの draft-16 profile で relay へ公開:
OPENMOQ_PICOQUIC_TRACE=1 ./build/openmoq-publisher \
--input sample.mp4 \
--endpoint moqt://relay.example.com:443/moq \
--namespace media \
--draft 16 \
--forward 0 \
--timeout 10 \
--paced--forward 1 は object を直ちに送信します。--forward 0 は relay が subscriber interest を転送するまで待機します。表示される connection_id= は transport と MOQT の setup のみを確認するもので、namespace の受理や downstream subscription は確認しません。
Windows では、./build/openmoq-publisher を build\Release\openmoq-publisher.exe または選択した build configuration のパスに置き換えてください。
CLI では一度に 1 つの live source を使用します。
| Source | CLI 選択 | Input | 備考 |
|---|---|---|---|
| Fragmented MP4 | --live-source stdin --input - |
標準入力の CMAF/fMP4 | 対応するすべての platform で利用可能 |
| SRT | --live-source srt --srt-config FILE |
SRT 経由 MPEG-TS | libsrt が必要。この経路では CENC metadata を利用不可 |
| CTE LL-DASH | --live-source dash --dash-listen HOST:PORT |
chunked CMAF POST または PUT request |
listener は現在 Unix 系 platform が必要 |
publisher は SRT caller として動作します。SRT listener のアドレスと MPEG-TS/CMAF 設定を含む /tmp/srt_callers.json を作成します。
{
"srt_callers": [
{
"id": "cam1",
"srt": {
"mode": "caller",
"host": "127.0.0.1",
"port": 9000,
"latency_ms": 120
},
"mpegts": {
"auto_detect_program": true,
"program_number": null,
"video_pid": null,
"audio_pid": null
},
"cmaf": {
"fragment_on_keyframe": true,
"empty_moov": true,
"default_base_moof": true,
"separate_moof_per_track": true,
"target_fragment_duration_ms": 1000
}
}
]
}最初の terminal で、publisher の接続後に MPEG-TS を送信する FFmpeg SRT listener を起動します。
ffmpeg -hide_banner -stream_loop -1 -re \
-i input.mp4 \
-map 0:v:0 -map 0:a:0 \
-c:v libx264 -preset veryfast -r 30 -g 60 -keyint_min 60 -sc_threshold 0 -bf 0 \
-c:a aac -b:a 160k -ar 48000 -ac 2 \
-f mpegts "srt://0.0.0.0:9000?mode=listener&pkt_size=1316"2 番目の terminal で SRT caller と MoQ publisher を起動します。
./build/openmoq-publisher \
--live-source srt \
--srt-config /tmp/srt_callers.json \
--endpoint 127.0.0.1:4443 \
--transport raw \
--namespace live \
--draft 16 \
--timeout 120 \
--forward 0対応する SRT mode は caller のみです。設定した host と port は既存の SRT listener を指す必要があります。relay への即時 smoke test には --forward 1、subscriber interest を待つ場合は --forward 0 を使用します。
HTTP/1.1 chunked CMAF listener と MoQ relay target を指定して publisher を起動します。
./build/openmoq-publisher \
--live-source dash \
--dash-listen 0.0.0.0:8080 \
--dash-path /ingest \
--endpoint https://127.0.0.1:4433/moq \
--transport webtransport \
--namespace live \
--draft 18 \
--publish-catalog \
--forward 1 \
--insecure既存の CMAF/fMP4 stream を HTTP/1.1 chunked transfer encoding で送信します。
curl -X PUT \
-H 'Transfer-Encoding: chunked' \
-H 'Content-Type: video/iso.segment' \
--data-binary @live-video.cmaf \
http://127.0.0.1:8080/ingest/video代わりに FFmpeg で 2 つの video representation と audio を作成し、ingest prefix へ直接送信できます。
ffmpeg -re \
-f lavfi -i "testsrc2=size=1280x720:rate=25" \
-f lavfi -i "anullsrc=r=48000:cl=stereo" \
-filter_complex "[0:v]split=2[v1][v2];[v1]scale=1280:720[v720];[v2]scale=640:360[v360]" \
-map "[v720]" -c:v:0 libx264 -b:v:0 1500k -g 50 -keyint_min 50 -sc_threshold 0 \
-map "[v360]" -c:v:1 libx264 -b:v:1 500k -g 50 -keyint_min 50 -sc_threshold 0 \
-map 1:a -c:a aac -b:a 128k \
-f dash -seg_duration 2 -use_template 1 -use_timeline 0 \
-init_seg_name 'video$RepresentationID$' \
-media_seg_name 'video$RepresentationID$' \
-adaptation_sets "id=0,streams=v id=1,streams=a" \
-multiple_requests 1 -streaming 1 -remove_at_exit 0 \
-window_size 20 -extra_window_size 20 \
http://127.0.0.1:8080/ingest//ingest 配下の各 path は独立した parser state を持ち、path prefix 付きの MoQ track name を生成します。object を直ちに送信するには --forward 1、subscriber interest を待つには --forward 0 を使用します。DASH listener は現在 Unix 系 platform が必要です。
詳細は CLI quick start、FFmpeg recipe、SRT technical note を参照してください。
任意の moq5 backend は、batch、live stdin、live SRT、live object の公開を moq5 service tier 経由で処理します。service tier は catalog publication、CMSF/CMAF validation、subscriber demand gating、bounded backpressure、graceful transport drain を担当します。
この backend を有効にすると、CMake は現在の openmoq/moq5 main を取得します。local または offline の source override を使う場合にのみ OPENMOQ_LIBMOQ_SOURCE_DIR を設定してください。
cmake -S . -B build-libmoq \
-DOPENMOQ_USE_LIBMOQ_PUBLISHER=ON
cmake --build build-libmoq
ctest --test-dir build-libmoq --output-on-failureデフォルト build は組み込み transport path を維持します。backend の状態、dependency discovery、設定の詳細は docs/build.md を参照してください。
| サンプル | Target | 目的 |
|---|---|---|
| Psychedelic live publisher | openmoq-publisher-psychedelic-example |
1 つの FFmpeg audio/video pipeline を Publisher::publish_live(...) で実行 |
| CAT4MOQ authorization | openmoq-publisher-auth-example |
token file または Catapult token command を使用して決定的な live object を公開 |
| MSFTS publisher | openmoq-publisher-msfts-example |
packet-aligned MPEG-2 TS または M2TS object を Publisher::publish_live_objects(...) で公開 |
MSFTS example は examples/msfts-publisher/docs/ の local text draft に従い、PAT/PMT data を検出して 1 つの program を選択し、無関係な PID を除外して、packaging: "m2ts" の MSF version 1 catalog を出力します。
./build/examples/msfts-publisher/openmoq-publisher-msfts-example \
--input sample.m2ts \
--endpoint https://relay.example.com:443/moq \
--namespace media.msfts \
--track transport \
--draft 17program を選択するには --program NUMBER、object size を変更するには --packets-per-object COUNT を追加します。--insecure は relay certificate を意図的に信頼しない場合にのみ使用してください。
| トピック | リンク |
|---|---|
| ビルドと依存関係 | docs/build.md |
| CLI と live ingest の quick start | docs/quickstart.md |
| テスト | docs/testing.md |
| 設計概要 | docs/design.md |
| FFmpeg 入力レシピ | docs/ffmpeg.md |
| SRT ingest technical note | docs/srt-ingest-technical-note.md |
| Relay interoperability | docs/relay-interop.md |
| C++ Publisher API | docs/publisher-api.md |
| CAT4MOQ auth example | examples/auth/README.md |
| MSFTS text draft | examples/msfts-publisher/docs/draft-gregoire-moq-msfts.txt |
| Protocol mapping | docs/protocol-mapping.md |
| WebTransport compliance | docs/webtransport-compliance.md |
| Local MSF version 1 draft | docs/draft-ietf-moq-msf-01.txt |
| Local CMSF version 1 draft | docs/draft-ietf-moq-cmsf-01.txt |
| macOS DASH shutdown behavior | docs/macos-accept-shutdown-quirk.txt |
| Project status と roadmap | docs/status.md |
ローカライズされた Publisher API guide は、スペイン語、フランス語、イタリア語、日本語、ポルトガル語、中国語で利用できます。
include/openmoq/publisher: public C++ headersrc: static library と CLI の実装tests: CTest ベースの unit および integration coveragedocs: local draft text、protocol note、integration guide、design referenceexamples: Publisher API integration.github/workflows/ci.yml: Linux、macOS、Windows CI.github/workflows/release.yml: CLI、header、static library の release artifact
メインの openmoq-publisher CLI は draft 16 と 18 を受け付けます。draft 16 がデフォルトで、draft 18 はより新しい request-stream profile を提供します。draft 14、17、19 の text は実装履歴と protocol review 用に docs/ に残されていますが、メイン CLI では選択できません。独立した MSFTS example は draft-specific test 用に draft 14/16/17/18 の選択を維持しています。
デフォルトの picoquic backend と任意の moq5 backend は、どちらも継続的に interoperability test が行われています。詳細な機能範囲、制限、roadmap については docs/status.md と docs/protocol-mapping.md を参照してください。