1 台で動かして、
配信して、見る。

ソースから SENCA をビルドして 1 台のノードを起動し、RTMP で送った映像を HLS で見るまでの流れです。コマンドは Linux x86_64(Ubuntu 26.04)で確かめています。詳しい手順は クイックスタート をご覧ください。

1 台で動かす手順

6 つの手順で、最初の配信まで。

  1. 1

    ビルドする

    ソースからノード本体と変換用のプログラムを作ります。Rust 1.90 以上と C のリンカーが必要です。できた 2 つの実行ファイルは同じ場所に置いてください。キャプチャ機器を使うときは、-p senca-capture も加えます。

    git clone https://github.com/kobesoft-labs/senca.git && cd senca
    cargo build --release -p senca-node -p senca-codec-worker
  2. 2

    ノードを起動する

    サーバーとして動かします。設定や録画を置く --data-dir は必ず指定してください。外から見たホスト名やポートが手元と違うときは、--public-http-url と --public-rtmp-url で合わせます。最後の curl で、受け付けの準備ができたことを確かめます。

    ./target/release/senca-node --data-dir ./data \
      --http 127.0.0.1:8080 --rtmp 127.0.0.1:1935 \
      --console-dir ./apps/console
    curl -s http://127.0.0.1:8080/readyz   # ready
  3. 3

    管理者トークンを取り出す

    API を使うための鍵を用意します。初めて起動したときに、強い権限を持つトークンがファイルに書き出されます。運用では用途ごとに権限を絞ったトークンを作り、このファイルは安全な場所へ移すか削除してください。

    TOKEN=$(cat ./data/control/bootstrap-admin-token)
  4. 4

    ストリームを作る

    配信を受ける枠を作ります。応答に含まれる stream_key は、作成したときと再発行したときにしか返りません。必ず控えてください。

    curl -s -X POST http://127.0.0.1:8080/api/v1/streams \
      -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
      -d '{"name":"demo"}'
    # 応答の id と ingest.stream_key を控える
    SID=60dd5cca...; KEY=sk_...
  5. 5

    配信する

    映像を送ります。OBS では[設定]→[配信]で、サービスを「カスタム」、サーバーを rtmp://127.0.0.1:1935/live、ストリームキーを控えた sk_... にします。キーフレームの間隔は 2 秒以下にしてください。右の例は、FFmpeg でテスト映像を送るコマンドです。

    ffmpeg -re -f lavfi -i testsrc2=size=1280x720:rate=30 \
      -f lavfi -i sine=frequency=440:sample_rate=48000 \
      -c:v libx264 -preset veryfast -tune zerolatency -g 60 -pix_fmt yuv420p \
      -c:a aac -b:a 128k -f flv "rtmp://127.0.0.1:1935/live/$KEY"
  6. 6

    再生 URL を作って見る

    届いた映像を確かめます。ライブの再生には署名付きの URL が必要で、既定の有効期間は 300 秒です。ブラウザーでは、hls.js などの HLS プレイヤーで再生できます。

    curl -s -X POST -H "Authorization: Bearer $TOKEN" \
      http://127.0.0.1:8080/api/v1/streams/$SID/playback-url
    ffplay "http://127.0.0.1:8080/s/.../index.m3u8"

管理画面は http://127.0.0.1:8080/console/ です(API トークンでログインします)。管理画面のプレイヤーが再生できるのは fMP4 の HLS と WHEP だけなので、既定の TS 形式のストリームは管理画面では再生できません。

Docker

コンテナで動かす。

docker compose up -d --build
docker compose exec senca cat /var/lib/senca/control/bootstrap-admin-token
# 外から使うとき(例)
SENCA_PUBLIC_HTTP=https://media.example.com \
SENCA_PUBLIC_IP=203.0.113.10 docker compose up -d
  • ・使うポートは、管理 API・HLS・管理画面が 8080/tcp、RTMP が 1935/tcp、SRT が 9000/udp、WebRTC が 8443/udp です。
  • ・イメージは Ubuntu 26.04 をもとにしています。ロイヤリティフリーのコーデックと、GPU 用のライブラリを含みます。
  • ・WebRTC で相手に知らせる IP アドレスは SENCA_PUBLIC_IP で指定します(既定は 127.0.0.1)。
  • ・配布するイメージは、コミット済みのソースから作ってください(git archive HEAD | docker build -t senca/node:local -)。

compose.yaml Dockerfile

コーデックのライブラリ(任意)

変換を使うときに入れておくもの。

これらが無くてもノードは動き、受け取った映像をそのまま配信・録画できます。ただし、変換・静止画・サムネイルの要求には 503 を返します。H.264・H.265 の変換には、GPU とメーカーのドライバーが必要です。

ライブラリ用途Ubuntu 26.04 のパッケージ
libdav1d.so.7AV1 のデコードlibdav1d7
libSvtAv1Enc.so.2AV1 のエンコードlibsvtav1enc2
libvpx.so.12VP8・VP9(libvpx 1.16 の ABI)libvpx12
libopus.so.0Opuslibopus0

公開する前に

インターネットに出す前の、確認リスト。

セキュリティと運用のドキュメントから、外部に公開する前に確かめておきたいことを抜き出しました。

セキュリティのドキュメント 運用のドキュメント

  • 最初の管理者トークン(bootstrap-admin-token)を安全な場所へ移し、用途ごとに権限を絞ったトークンを使う
  • リバースプロキシの後ろやコンテナの外から使う場合は、--public-*-url を外から見た URL に合わせる
  • HTTPS・RTMPS を有効にする(--tls-cert・--tls-key)か、手前のリバースプロキシで TLS を終端する
  • 社内の機器へつなぐときは、--egress-allow で接続を許可する範囲を決める
  • データディレクトリは専用のユーザーで運用し、chmod 700 にする(バックアップも同じように守る)
  • クラスターでは、ノード間の通信を mTLS にし、クラスターシークレットには推測できない値を使う
  • 再生 URL の有効期間は短くし、必要になるたびに発行する
次のページ API