できること、
すべて。

現在の版(v0.0.1)の機能を、分野ごとに残らず並べました。使い方を詳しく知りたいときは、各分野の「ドキュメントを読む」から技術ドキュメントへ進んでください。

14分野 111項目

取り込み

映像・音声を SENCA に入れる方法です。相手から送ってもらう方式(push)と、SENCA から取りに行く方式(pull)があります。

ドキュメントを読む →
  • 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 秒の間、同じ配信の続きとして待ちます。

  • 受信量の上限

    配信者から受け取るビットレートの上限を決められます。上限を超え続けた配信者は切断できます。

再生・配信

視聴者や機材へ届ける方法です。1 つの配信を、複数の方式で同時に届けられます。

ドキュメントを読む →
  • 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 秒で、上限は設定で決めます。

  • 視聴者数の上限

    ノードごとに、同時に見られる人数の上限を決められます。今の人数も確かめられます。

  • どのノードからでも再生

    クラスターでは、配信を受けていないノードでも、配信を中継して再生できます。

  • 静止画

    今の映像の静止画を取得できます。一定の間隔で保存することもできます。

  • 変換の見通し

    今の入力が各方式でどう扱われるかを、設定を何も変えずに確かめられます。そのまま届くのか、届かないならなぜなのかがわかります。

録画・VOD

ライブ配信と同時に録画し、後から見返したり、ファイルとしてエクスポートしたりできます。

ドキュメントを読む →
  • ライブと同時の録画

    ライブの 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 やキャプチャ機器を、手動で使わないようにできます。

クラスター

複数のノードが 1 つのシステムとして動きます。どのノードに指示を出しても、同じ結果になります。

ドキュメントを読む →
  • 独自に実装した 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 を使い、ほかの人の変更を気づかずに上書きすることを防ぎます。

  • バックアップと更新

    バックアップする対象と、版の更新・停止の手順をドキュメントにまとめています。

API と SDK

どの操作も API から行えます。自社のシステムに組み込むときは、次の SDK やクライアントを使えます。

ドキュメントを読む →
  • 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 のエンコード・デコードには対応していません。

次のページ アーキテクチャ