asuka431 / youtube-study-space

Youtube-based online study space! You can enter the study-room by using command in youtube live chat.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

youtube-study-space

Youtubeで24時間365日ライブ配信し続ける、オンライン自習室! 視聴者はライブチャットからコマンドを打つことで自由に入退室できます。

Youtubeチャンネルへ

テスト環境と本番環境

環境分けについて

GCP

  • 本番環境:youtube-study-space
  • テスト環境:test-youtube-study-space

AWS

  • 本番環境:Tokyo (ap-northeast-1) リージョン
  • テスト環境:N. Virginia (us-east-1) リージョン

手順書

  • テスト環境:TEST_README.md
  • 本番環境:PRODUCTION_README.md

共通設定

Firestore

データ

  • ルームの入室状況
  • ライブ配信用youtubeチャンネルのAPIアクセス情報
  • Bot用youtubeチャンネルのAPIアクセス情報
  • ラインBotのアクセス情報
  • youtubeライブ配信の情報
  • オンライン作業部屋のユーザー情報
    • 入退室ログ
  • システムconfig
    • デフォルト入室時間
    • 設定可能な最大入室時間
    • 設定可能な最小入室時間
    • 席数
    • その他

データ構造 system/core/myfirestore/type_firestore_data.go

  • configコレクション
    • constants
    • credentials
  • roomsコレクション
    • default
      • seats(席情報の配列)
        • 席番号
        • 作業名
        • 表示ユーザー名
        • ユーザーID
        • 入室日時
        • 自動退室予定時刻
        • 席の背景色のカラーコード
  • usersコレクション
    • ユーザーのyoutubeチャンネルIDがドキュメントID
      • historyコレクション(そのユーザーの行動ログ)
        • 行動の種類(入室・退室など)
        • 日時
        • 行動の詳細
      • 当日の累計作業時間
      • 累計作業時間
      • ランク表示設定(bool)
      • 登録日
      • 最終入室日時
      • 最終退室日時

Lambda関数

youtube_organize_database

cloud schedulerにより毎分実行される。 入室中のユーザーから,自動退室予定時刻を過ぎているユーザーを発見して,退室処理をする。

環境変数:なし

rooms_state

monitorからAPIで呼ばれる。 ルームの状況および最大席数などの情報を返す。

環境変数:なし

reset_daily_total_study_time

cloud schedulerにより毎日0時0分に実行される。 全ユーザーのデイリー作業時間を0にリセットする。

環境変数:なし

check_live_stream_status

cloud schedulerにより毎分実行される。 ライブ配信の状態がactiveであるかどうかチェックする。 activeでない場合はLINEで通知する。

環境変数:なし

set_desired_max_seats

monitorにより必要な時にAPIで呼ばれる。 monitor側で席数を変更すべきと判断したときの、希望の席数をfirestoreに保存する。

環境変数:なし

DynamoDB

Lambda関数と同じregionのDyanamoDBテーブルであること!

データ

  • Firestoreのアクセス情報(サービスアカウント)のjson文字列

注意:json内で出てくるprivate keyの値の文字列内のエスケープは調整する必要があった気がする。

テーブル名:secrets

API Gateway

API名:youtube-study-space-http-api

エンドポイント

  • /organize_database
  • /reset_daily_total_study_time
  • /rooms_state
  • /check_live_stream_status

Cloud Scheduler

  • call_lambda_function_organize_database: * * * * *
  • call_lambda_function_reset_daily_total_study_time: 0 0 * * *
  • scheduledFirestoreExport: every 24 hours (Asia/Tokyo)
  • call_lambda_function_check_live_stream_status: * * * * *

Pub/Sub

Topic name: projects/youtube-study-space/topics/initiateFirestoreExport

Cloud Functions

firestoreExport

cloud scheduler + Pub/Subにより毎日実行される。 Firestoreのデータをエクスポートする。

環境変数:

Youtubeモニター

  • ローカルでNext.jsのサーバーを立てる。
  • public/audio/lofigirl/に音声ファイルを入れておくこと。

OBS Studio

設定など

  • OBS内蔵のブラウザを使用する
  • 「OBSを介して音声を制御する」を有効にする(じゃないとBGMが配信に流れない)
  • リンクに、ローカルで起動しているyoutube-monitorのサーバーのアドレスを入力する
  • マイクは必ずOFFにする
  • カメラをソースとして登録したシーンは絶対に登録しない。 OBSは配信専用として使う。 当たり前だけど、本番配信中にシーンいじるとそれが映像に反映される(一回やらかした)

Youtube Live配信

すぐに配信を始めると、少し映像ストリームが途切れただけで勝手にライブ配信が終了してしまい無限に配信できないので、「SCHEDULE STREAM」から配信予定を立てて、配信を開始する。 こうすることで途中何かのトラブルである程度の時間OBSからの映像送信が途切れてもライブ配信が勝手に終了することはない。

About

Youtube-based online study space! You can enter the study-room by using command in youtube live chat.

License:MIT License


Languages

Language:TypeScript 77.8%Language:Go 21.7%Language:Shell 0.5%Language:Sass 0.0%Language:Dockerfile 0.0%