Fincs

コンテンツ / ライブ配信

コンテンツ / ライブ配信

本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(## 🔧 実装詳細 以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。

概要

ライブ配信は、講師が指定の日時に講座内でリアルタイム配信を行い、受講者が同時受講・チャットでコミュニケーションできる機能。配信予定の登録から開始・終了、配信中のチャット、配信終了後の結果集計、後日受講用のアーカイブ生成までを一連の流れとして提供する。

主な利用想定は、定期講義・特別レッスン・Q&A セッション・体験会・週次ライブなど。配信中はビデオ ON/OFF 切替(音声のみのラジオモード)に対応し、講師の画面構成や趣旨に合わせて柔軟に運用できる。配信中に受講を始めた受講者は、冒頭から見る「追っかけ受講」も利用できる。配信終了後は自動的にアーカイブ(./livearchive.md)化され、ライブ配信を受講できなかった受講者も後から内容を確認できる。チャットは配信終了後も結果画面から確認可能。

ライブ配信の状態は「予定 → 配信中 → 配信終了 → アーカイブ生成中 → アーカイブ公開」の順で遷移する。長時間配信が継続している場合は、内部の自動補修処理によって配信終了状態に遷移する仕組みもある。

📝 レビュー観点(draft 段階の記述ヒント、完成時に削除):

  • 目的: 講師がリアルタイムでライブ配信し、受講者が受講 + チャットで参加。配信後はアーカイブ化
  • 誰が使うか: 受講者・未受講者(公開設定次第、受講)/ メイン講師・サブ講師(配信ホスト・スケジューリング)
  • どこで使うか: 講座コンテンツタブからライブ一覧 → 個別ライブ。ホストは配信メニュー、スケジュール画面
  • 隣接機能との関係: ライブアーカイブ(./livearchive.md)/ ライブ予定(./liveschedule.md)/ 動画(./movie.md
  • CS 問い合わせで頻発する論点: 「ライブが映らない」「チャットが流れない」「追っかけが遅い」「配信終了したのにアーカイブが出ない」「ホスト画面に入れない」
  • [本機能特有] 状態遷移: 予定 → 配信中 → 配信終了 → アーカイブ → アーカイブ生成中 → アーカイブ公開
  • [本機能特有] 追っかけ受講: Cloud Recording の HLS を遅延再生、専用 BE エンドポイントなし
  • [本機能特有] チャット: MySQL ではなく Firestore(livechats/{liveId}/messages)に保存、リアルタイム購読
  • [本機能特有] 強制終了: 専用運営アドミン経路なし、生存ライブはバッチで live_stopped
  • [本機能特有] Agora Cloud Recording: ライブ配信は Agora Web SDK で行い、録画は Agora Cloud Recording が S3 に出力

利用シナリオ

シナリオ 1: 講師がライブ配信を予約して当日に開始する

メイン講師またはサブ講師が配信予定登録画面から、タイトル・開始予定日時・公開範囲を設定して予定を登録。受講者には予定が一覧で表示され、開始時刻が近づくと案内される。当日、講師が配信ホスト画面を開き「配信開始」を押すと、受講者画面が自動的にライブ受講モードへ切り替わり、双方向のチャットを伴うリアルタイム配信が始まる。配信終了ボタンで配信を閉じると、結果画面に切り替わり、内部で自動的にアーカイブ生成が始まる。

シナリオ 2: 受講者がライブ配信に参加する

受講者は講座のコンテンツタブからライブを選択して受講開始。配信中の映像・音声・チャットが同時に表示され、チャットを投稿することで講師や他の受講者とリアルタイムにやり取りできる。配信中に途中から参加した受講者は、冒頭から見たい場合「追っかけ受講」モードで、自動生成された録画を遅延再生で受講できる。

シナリオ 3: 配信終了後にアーカイブで受講する

ライブ配信を見逃した受講者・別の予定で参加できなかった受講者は、配信終了後に自動生成されるアーカイブを通常の動画コンテンツとして受講できる(./livearchive.md 参照)。アーカイブ生成中の状態では受講できず、生成完了後に閲覧可能となる。

シナリオ 4: 講師が配信結果を確認する

配信終了後、講師は結果画面で参加者数や配信時間などの集計、配信中のチャット履歴を確認できる。

シナリオ 5: ラジオモードでの音声配信

講師がビデオ OFF(音声のみ)で配信したい場合、配信中にビデオ ON/OFF を切り替えられる。受講者画面ではビデオ OFF 区間で音声のみが流れる表示に切り替わる。

シナリオ 6: 別タブで映像のみを表示したい(v2.30.0 追加)

受講画面の URL に ?chat_off=1 を付けることで、チャット欄を非表示にしてライブ映像のみを表示できる。別端末・別タブで配信を流しっぱなしにする、映像に集中したい等のケースで利用可能。

よくある失敗ケース

  • 配信開始時に映像・音声が出ない: 端末のカメラ・マイク権限の許可漏れ、ブラウザ権限ブロック
  • 配信中にネットワーク切断: 講師側の自動再接続が効かない場合は、配信終了扱いとなる
  • 長時間配信が放置された場合: 内部の自動補修処理で配信終了状態に遷移する
  • 追っかけ受講の遅延: 録画ファイルの生成インターバルに依存して、ライブ進行から数十秒〜数分の遅延が生じる

権限別仕様

権限定義は ../user-roles.md 参照。用語は ../terminology.md

講座権限軸

受講

操作 未受講者 受講者 サブ講師 メイン講師
ライブ受講(配信中、一般公開)
ライブ受講(配信中、受講者限定) ×
追っかけ受講 ×
チャット投稿 ×
結果閲覧 × ○(要確認)

配信ホスト・編集

操作 未受講者 受講者 サブ講師 メイン講師
配信予定登録 × ×
配信編集(タイトル・予定日時等) × ×
ホスト画面で配信開始・終了 × ×
ビデオ ON/OFF 切替(ラジオモード) × ×
結果集計閲覧 × ×

横断軸

操作 運営アドミン テストユーザー 投稿禁止
ライブ受講 (通常と同じ) (通常と同じ) (通常と同じ、受講可)
ライブチャット投稿 (通常と同じ) (通常と同じ) ×(投稿禁止フラグの影響)
ライブ削除 ○(運営アドミン専用機能、contents 削除) × ×
ライブ強制終了 ×(専用運営アドミン経路なし、バッチが対応) × ×
Firestore 同期再実行 ○(チャット・ステータスの再同期用) × ×

📝 レビュー観点:

  • サブ講師がホスト画面に入れるかは要確認
  • 受講者の結果閲覧可否(運営側で出すべきか講師のみか)

機能詳細(ふるまい)

状態遷移

状態 説明 受講者の見え方
予定(scheduled) 配信予定登録済み、未開始 予定一覧に表示、開始時刻に自動遷移
配信中(live) ホストが配信開始 リアルタイム受講可、追っかけ開始可
配信終了(archived) ホスト終了、Cloud Recording で録画完了 アーカイブ生成中表示
アーカイブ生成中(archive_movie_progress) 録画ファイルから動画化処理中 受講不可 / 生成中表示
アーカイブ公開(archive_movie) アーカイブ動画として閲覧可 通常動画として再生
強制終了(live_stopped) バッチで生存ライブを終了 配信終了扱い、アーカイブは経由する場合と経由しない場合あり

配信ホスト画面

  • 配信開始 / 終了ボタン: 講師は配信ホスト画面で開始・終了操作を行う
  • ビデオ ON/OFF(ラジオモード): 配信中にビデオを OFF にして音声のみの配信に切り替え可能。OFF 期間は受講者画面で音声のみ表示モードに切り替わる
  • 参加状況の確認: 配信中の参加者数を画面上で確認できる
  • チャット監視: 配信中のチャットをホスト画面でリアルタイムに確認、必要に応じて自分も投稿可能

追っかけ受講

  • 配信中の途中から参加した受講者が、冒頭から内容を確認したい場合に利用するモード
  • 配信開始時から自動的に進行している録画ファイルを、遅延再生で順次受講
  • 通常のライブ受講とは別画面・別プレイヤーで動作し、進行中のライブと並行して時間差で内容確認が可能
  • 遅延量: 録画ファイルの生成タイミングに依存し、ライブ進行から数十秒〜数分程度の遅延が生じる(運用環境・ネットワーク状況により変動)

ライブチャット

  • 配信中のリアルタイムテキスト交流の場
  • 受講者・サブ講師・メイン講師が投稿可能、未受講者は投稿不可
  • 投稿は他の受講者にもリアルタイムに表示される
  • 配信終了後はアーカイブとして残り、結果画面で確認可能
  • 投稿禁止フラグが付いた受講者は投稿不可(受講のみ可能)

結果閲覧

配信終了後、講師は結果画面で以下を確認できる:

  • 配信時間(実配信時間、ビデオ ON 区間の累計)
  • 参加者数(延べ・ユニーク)
  • チャット投稿数・チャット履歴

配信スケジューリング

  • 配信予定登録: 講師が事前に予定を登録し、開始予定日時を指定して受講者に告知
  • 即時開始モード: 予定登録せずにその場で配信を開始することも可能
  • 配信日時の編集: 配信開始前であればタイトル・日時・サムネイル・公開範囲を編集可能

📝 レビュー観点:

  • 入力 → 処理 → 出力: 配信開始 API → Agora token 発行 → ホスト Agora 接続 → 受講者の Agora 接続
  • エッジケース: ホストネットワーク切断、Agora 接続失敗、ビデオ ON/OFF 切替時のチャット影響
  • エラー表示: 配信開始失敗、受講接続失敗
  • [本機能特有] 追っかけ遅延: Cloud Recording のセグメント生成インターバル依存(具体値はコード上に定数化されていない)
  • [本機能特有] チャット保存先: MySQL ではなく Firestore

admin 操作

できる操作

  • ライブ削除: 運営アドミン専用機能で対応(contents 削除)
  • Firestore 同期再実行: チャット・ステータスの補修
  • 無料公開フラグ切替: 受講者限定 ↔ 一般公開

詳細は ../admin/contents.md 参照。

実装されていない / 不明

  • 運営アドミンによるライブ強制終了: 専用経路なし。バッチ(LiveStreamForceTerminationJob)が生存ライブを強制終了状態へ遷移させるのみ。即時強制終了したい場合は dev 対応必要 — 今後の改善課題
  • チャット CSV エクスポートの呼び出し経路: LiveChatCsv 定義はあるが UI 経路未確認

📝 レビュー観点:

  • 配信トラブル時の運営側介入手段の不足
  • チャット履歴のエクスポート用途

品質 / 約束事項

  • 応答性: ライブ配信遅延は数秒以内(Agora SDK 標準)、追っかけ受講は Cloud Recording のセグメント生成依存
  • 信頼性: 配信中のホスト切断は再接続を試行、長時間切断は強制終了バッチが補修
  • 制限値:
    • チャット 1 投稿あたりの文字数上限: ライブチャット投稿欄の上限値を画面表示
    • 配信時間上限: 仕様上の固定上限なし(運用上は数時間規模が想定)。長時間継続して終了されない配信は自動補修処理で配信終了状態に遷移
  • データ保持: チャットは Firestore に保持、配信履歴は永続

📝 レビュー観点:

  • 応答性: 配信開始から受講者画面に映るまでの遅延、追っかけ受講の遅延量
  • 信頼性: ホスト・受講者のネットワーク不安定時の挙動
  • [本機能特有] 強制終了バッチ: 起動間隔と判定条件(要確認)

変更履歴(リリースノート候補)

v2.30.0: 2026-05-05

  • [追加] ライブ受講画面でチャットを非表示にする経路を追加。受講画面の URL に ?chat_off=1 を付けるとチャット欄が非表示でライブ映像のみが表示される。配信を別画面・別タブでチャットなしで確認したいケースに使用可

v2.29.2: 2026-05-01(PSD 初版)

  • [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない

📝 レビュー観点:

  • 過去の主要変更(Agora 移行 / Cloud Recording 導入 / 追っかけ受講追加 / ラジオモード追加 等)

関連ドキュメント


このページの内容を AI に質問しますか?
関連 spec を自動抽出して ChatGPT / Claude などに渡せます。
AI Prompt で開く →