できること、
すべて。
現在の版(v0.0.1)の機能を、分野ごとに残らず並べました。使い方を詳しく知りたいときは、各分野の「ドキュメントを読む」から技術ドキュメントへ進んでください。
14分野 111項目
-
RTMP・RTMPS
OBS や FFmpeg などから配信できます。AV1・VP9・H.265 を送れる拡張版(Enhanced RTMP)にも対応しています。
-
SRT
相手からの接続を待つ方式(listener)と、こちらから接続する方式(caller)の両方に対応しています。AES による暗号化も使えます。
-
WHIP(WebRTC)
ブラウザーから配信できます。H.264・VP8・VP9・AV1・Opus・PCMU・PCMA を受け付けます。配信用のページ(/sender/)も含まれています。
-
MoQ での送信
Media over QUIC(draft-22)で、CMAF 形式の映像・音声を送れます。
-
取りに行く入力(pull)
RTSP・RTMP・SRT・HLS の映像を、SENCA から取りに行きます。接続が切れたら自動で再接続します。
-
スマートフォンの配信アプリ
Android と iOS・iPadOS・macOS の配信アプリから、SRT・RTMP で送れます。送り先は QR コードやリンクで設定でき、ズームなどのカメラ操作は VISCA over IP で受け付けます。
-
キャプチャ機器
V4L2 のカメラ、DeckLink のカード、ALSA の音声機器から取り込みます。取り込みは本体とは別のプロセスで行います。
-
ストリームキー
配信者ごとに発行する鍵です。サーバーにはハッシュ値だけを保存し、再発行もできます。publish 権限を持つ API トークンでも配信できます。
-
再接続の猶予
配信者の接続が切れても、既定では 30 秒の間、同じ配信の続きとして待ちます。
-
受信量の上限
配信者から受け取るビットレートの上限を決められます。上限を超え続けた配信者は切断できます。
-
HLS(TS・fMP4)
ライブの HLS ではディスクを使わず、セグメント(短く区切った映像)をメモリから直接配信します。
-
LL-HLS
遅れを小さくした HLS です。部分セグメント(part)、更新を待って返すプレイリスト(ブロッキングリロード)、差分だけのプレイリストに対応しています。
-
遅延の段階
standard・low・interactive の 3 段階から選びます。interactive は WebRTC や MoQ で見ることを前提に、各所の待ち時間を小さくします。
-
WHEP(WebRTC)
ブラウザーで、遅れの小さい再生ができます。
-
RTMP・SRT・RTSP での再生
機材や他のサーバーへ、受け取った形のまま転送します。
-
MoQ・HTTP/3
QUIC の 1 つのポートで、HTTP/3・WebTransport・MoQ による視聴を受け付けます。
-
署名付きの再生 URL
有効期限と署名が付いた URL で再生します。期限は既定で 300 秒で、上限は設定で決めます。
-
視聴者数の上限
ノードごとに、同時に見られる人数の上限を決められます。今の人数も確かめられます。
-
どのノードからでも再生
クラスターでは、配信を受けていないノードでも、配信を中継して再生できます。
-
静止画
今の映像の静止画を取得できます。一定の間隔で保存することもできます。
-
変換の見通し
今の入力が各方式でどう扱われるかを、設定を何も変えずに確かめられます。そのまま届くのか、届かないならなぜなのかがわかります。
-
ライブと同時の録画
ライブの HLS と同じセグメントを、そのまま保存します。録画の処理が遅れても、ライブは止まりません。
-
自動録画・手動録画
配信が始まったら自動で録画するか、API で開始・停止します。
-
VOD(録画の再生)
録画を HLS で再生します。署名付きの URL と、範囲を指定した取得(Range)に対応しています。
-
MP4 のエクスポート
再エンコードせずに MP4 にまとめます。時刻の範囲を指定してエクスポートすることもできます。
-
サムネイル
録画から、真っ黒な画面やぶれた画面を避けて 1 枚を選びます。
-
予約
録画、配信の受け付け、静止画の保存を予約できます。時間帯と繰り返し(毎週など)は、タイムゾーンを付けて指定します。予約を作る前に内容を確かめられ、実行の履歴も残ります。
-
保持期限と法的保全
保持する日数を過ぎた録画は自動で削除します。法的保全(legal hold)を指定した録画は削除しません。
-
障害の後の復旧
停電などで書き込みの途中だった録画は、次に起動したときに「中断」として閉じ、それまでの分を残します。
-
S3 互換のストレージ
AWS S3・MinIO・Cloudflare R2 などに録画をアップロードできます。アップロードした録画は、どのノードからでも再生・エクスポートできます。
-
RTMP・SRT での送信(push)
外部のサーバーや配信サービスへ、同時に送ります。1 つの配信につき 16 か所まで送れます。
-
Cloudflare Stream
インジェストエンドポイント(Live Input)を作り、RTMPS か SRT で送ります。録画の設定もできます。
-
Amazon IVS
チャンネル(Channel)を作り、RTMPS で送ります。SRT に対応したチャンネルでは SRT でも送れます。
-
AWS Elemental MediaLive
入力(Input)とその接続の許可(Input Security Group)を作り、RTMP か SRT で送ります。チャンネル(Channel)は利用者が作ります。
-
後片付け
出力を削除すると、SENCA がクラウド側に作ったものも削除します。作成の途中で止まっても、二重に作ることはありません。
-
シークレット
配信サービスのストリームキーなどを暗号化して保存し、入力・出力からは名前で指定します。API から読み出すことはできません。
-
状態と再接続
送信の状態とエラーを確かめられます。接続が切れたら、間隔を空けて再接続します。
加工・合成(パイプライン)
処理の部品をつないで、合成や切り替え、コーデックの変換を行います。できあがった映像は普通の配信と同じ扱いになり、HLS での視聴にも、録画にも、外部への送信にも使えます。
ドキュメントを読む →-
使える部品
入力、デコード、板書の補正、拡大縮小、切り抜き、合成、音声のミックス、エンコード、板書の変化の保存、出力を組み合わせられます。
-
合成(シーンとレイヤー)
入力は 32 本、画像は 32 枚、シーンは 64 個まで使えます。レイヤーごとに、位置・大きさ・透明度・角丸・枠線・重なりの順・切り抜きを指定できます。
-
プレビューと本番
次に出すシーンをプレビューで確かめてから、take の操作で本番に切り替えます。
-
切り替えの効果
カット・フェード・ワイプ(左・右)から選べます。効果の長さも指定できます。
-
動作中の操作
シーンの切り替え、レイヤーの変更、シーンの作成、音量の変更、キーフレームの要求を、動かしたまま API で行えます。
-
音声ミキサー
入力ごとに音量・ミュート・ソロ・左右の位置・遅延を調整できます。全体の音量と、音割れを防ぐリミッターもあります。出力は 48 kHz のステレオです。
-
映像が途切れたとき
最後の画を出したまましばらく待ち、その後は決めておいた画面(色か画像)に切り替えます。
-
板書の補正
ホワイトボードや黒板を正面から見た形に直し、照明のむらや反射を抑えます。四隅は自動でも見つけます。黒板を白地の画像に変えることもできます。
-
板書の変化を静止画に
板書が書き変わって落ち着いたところで、JPEG の静止画を保存します。
-
コーデックの変換
AV1・VP8・VP9・Opus はソフトウェアでエンコードします。H.264・H.265 は GPU でエンコードします。
-
保存前の確認
保存する前に、部品のつなぎ方、コーデックの方針、必要な機器を確かめられます。
-
デグレードレベル
資源が足りないときに外す部品を、品質の高い順に 8 段階まで決めておけます。
-
音声認識
OpenAI の API(と、それと互換のあるサーバー)か、whisper.cpp のサーバーを使います。
-
翻訳
Anthropic(Claude)・DeepL・OpenAI を使えます。翻訳先は 8 言語まで選べます。
-
HLS の字幕
WebVTT の字幕を、言語ごとのプレイリストとしてライブの HLS に加えます。
-
音声を変換しない
AAC・Opus の音声は、デコードせずに形式だけを整えてサービスへ送ります。
-
配信を止めない作り
認識が遅れたら古い音声から捨てます。字幕が欠けることはあっても、配信は止まりません。
-
送り先の制限
設定しない限り、音声やテキストを外へは送りません。送り先は、外部への接続の制限に従って確かめます。
リアルタイムのルーム(ビデオ通話)
ブラウザーやアプリの参加者どうしが、映像・音声・データをやり取りする場です。SENCA は SFU(受け取った映像を変換せずに各参加者へ転送する仕組み)として動きます。
ドキュメントを読む →-
役割と複数の映像
送信だけ・受信だけ・送受信のいずれかの役割で参加し、複数の映像・音声をやり取りできます。
-
サイマルキャスト
同じ映像を画質を変えて 1〜4 本送り、受け手ごとに合う画質を選んで届けます。
-
スポットライト
話している人の映像を高画質で、ほかの人の映像を低画質で届けます。
-
転送フィルター
誰の映像・音声を誰に届けるかを、条件で絞り込めます。
-
データのメッセージ
DataChannel を使って、参加者どうしや、サーバーから参加者へデータを送れます。
-
参加トークン
Ed25519 で署名したトークンで参加します。トークンはどのノードでも発行・検証できます。
-
認証とイベントの Webhook
参加してよいかを自社のサーバーに問い合わせられます。ルームで起きたことを、署名付きで自社のサーバーへ知らせることもできます。
-
エンドツーエンド暗号化(E2EE)
参加者の間で暗号化した映像も、サーバーは復号せずにそのまま転送します。
-
統計と参加者の管理
参加者の一覧、切断、参加者の情報(metadata)の変更、ルームの統計を API で扱えます。
-
カスケード
1 つのルームの参加者を、複数のノードで受け付けられます。
-
ブラウザー用の SDK
@senca/sdk の Senca.connect() で、ブラウザーからルームに参加できます。
メディアパイプライン(会議の録画・配信)
ルームの参加者の映像を SENCA の配信としてエクスポートします。録画・合成・外部への配信・文字起こしを、1 つの指定でまとめて行えます。
ドキュメントを読む →-
参加者ごとのエクスポート
参加者 1 人につき 1 本の配信を、再エンコードせずに作ります。
-
合成
参加者を格子状に並べた画面か、話している人を大きく映した画面を 1 つ作ります。
-
録画
参加者ごとの配信と、合成した配信を自動で録画します。
-
外部への配信
合成した画面を、RTMP・SRT やクラウドの配信サービスへ送ります。
-
文字起こし
参加者ごとの配信に、字幕と翻訳を付けます。
グリッド(配置と障害への備え)
各ノードの資源をまとめて把握し、ワークロード(入力・出力・パイプライン・ルーム)をどのノードで動かすかを自動で決めます。ノードが 1 台だけでも、同じ仕組みで動きます。
ドキュメントを読む →-
資源の登録
各ノードは、CPU・メモリ・回線の帯域・GPU(エンコードとデコードを同時に何本できるか)・キャプチャ機器・ラベルを登録します。
-
自動の配置
取り込み・送信・パイプライン・ルームを、見積もった資源の量をもとに配置します。元の映像を受けているノードを優先します。
-
置き場所の指定
ノードや GPU を指定したり、ラベルで条件を付けたりできます。同じグループのワークロードを別々のノードに分ける指定(アンチアフィニティ)や、分散させる(spread)か詰める(binpack)かも選べます。
-
優先度
低・通常・高・最重要の 4 段階です。同じか高い優先度のワークロードを押しのけることはありません。
-
ノードと機器の停止の検出
1 秒ごとの知らせが 5 秒途絶えたら停止と判定し、ワークロードを移します。GPU などの機器は 10 秒ごとに確かめます。
-
段階的なデグレードと復帰
資源が足りなければ、決めておいた順に処理を外して動かし続けます。30 秒たってから元に戻します。
-
ピン留め
ノードを指定して固定(ピン留め)したワークロードについて、そのノードが止まったとき、別のノードへ移す(prefer)か、止めたままにする(strict)かを選べます。
-
ドレイン(保守の準備)
保守の前に、そのノードへの新しい割り当てを止め、動いているワークロードをほかのノードへ移します。
-
機器を手動で外す
調子の悪い GPU やキャプチャ機器を、手動で使わないようにできます。
-
独自に実装した Raft
設定を、投票に加わる 1〜7 台のノードで複製します(Raft は合意の方式です)。過半数と通信できない側では、書き込みを止めます。
-
ノード間の mTLS
ノード同士の通信を、互いに証明書を確かめ合う TLS で守ります。
-
配信の所有者
配信を受けたノードが、その配信の所有者になります。同じ配信が 2 か所で同時に公開されることはありません。
-
分断されたときの自己停止
ネットワークが分断されると、少数側のノードは 4 秒ほどで自分からワークロードを止めます。同じワークロードが 2 か所で動くのを防ぐためです。
-
ノード間の中継
視聴者がどのノードにつないでも、所有者のノードからエンコード済みのデータを 1 本だけ転送し、そこから配信します。
-
API トークンと権限
8 種類の権限(scope)を組み合わせて、トークンごとにできることを絞ります。
-
テナント
資源はテナントごとに分かれています。ほかのテナントの資源は見えません。
-
JWT
自社の認証の仕組みが発行した JWT でも API を使えます。JWT は JWKS(公開鍵の一覧)で検証します。
-
署名付き URL
ライブの再生、VOD、MoQ での視聴は、期限と署名の付いた URL で許可します。
-
シークレットの暗号化
ストリームキーなどのシークレットは、ノードの鍵で暗号化して保存します。API からは読み出せません。
-
外部への接続の制限
社内のネットワーク(プライベートアドレス)へは、許可した範囲にだけ接続します。外から送り込まれた宛先へ勝手に接続させられる攻撃(SSRF)への対策です。
-
コーデックの隔離
外部のコーデックのライブラリは、seccomp・Landlock などで権限を絞った別のプロセスで動かします。
-
要求の数の上限
IP アドレスごと・トークンごとの要求の数、認証に失敗した回数、新しい接続の数に上限を設けています。
-
監査ログ
誰が・いつ・何を変えたかを、1 行に 1 つの JSON で記録します。
-
稼働の確認
/healthz で動いているかを、/readyz で要求を受け付けられるかを確かめられます。コンテナの稼働の確認(ヘルスチェック)にも使えます。
-
ログ
ノードのログを、1 行に 1 つの JSON の形でも出力できます。
-
イベントの通知(SSE)
配信の開始と終了、録画、ノードの停止などを、つないだままの HTTP の接続で受け取れます。残っている範囲であれば、再接続しても取りこぼしません。
-
管理画面
配信・録画・予約・トークン・入力・出力・シークレットを管理できます。パイプラインの編集、スイッチャー、ブラウザーからの配信もここから行えます。
-
二重実行の防止
Idempotency-Key を付けた POST の要求は、再送しても二重には実行しません。
-
同時の変更の防止
ETag と If-Match を使い、ほかの人の変更を気づかずに上書きすることを防ぎます。
-
バックアップと更新
バックアップする対象と、版の更新・停止の手順をドキュメントにまとめています。
-
REST API(OpenAPI)
88 の操作を OpenAPI 3.1 で定義しています。エラーは problem+json の形式で返します。
-
TypeScript の SDK
@senca/sdk の SencaClient で管理 API を、Senca.connect() でルームを扱えます。
-
Rust のクライアント
senca-client で管理 API を使えます。
-
シグナリング
ルームへの参加の手続きは、WebSocket(senca.rooms.v1)で行います。その仕様も公開しています。
-
送信用の SDK
C から呼び出せる送信用の SDK があります。Android と iOS・iPadOS・macOS の配信アプリも、この SDK で作っています。
-
GPU でのエンコード・デコード
H.264・H.265 は、NVIDIA(NVENC/NVDEC)・Intel(oneVPL)・AMD(AMF)・VA-API の SDK を実行時に読み込んで処理します。
-
ロイヤリティフリーのコーデック
AV1(dav1d・SVT-AV1)、VP8・VP9(libvpx)、Opus(libopus)は、ソフトウェアで処理します。
-
そのまま届ける
受け取った H.264・H.265・AAC は、GPU がなくても、そのまま配信・録画できます。
-
royalty_free の指定
配信ごとに、特許プールのあるコーデックの映像・音声を捨てる設定ができます。
-
変換できないとき
GPU がない環境で H.264・H.265 の変換を求めると、503 CAPACITY_UNAVAILABLE を返します。AAC のエンコード・デコードには対応していません。