Closed hATrayflood closed 2 years ago
認証方法について
クラウド レコーディングについて
Internal Meeting メモ (as is)
「Zoom録画で作成したトピックはそれがわかるようにアイコン等つける」の実装方法
「トピック一覧画面で,トピックを選択してブックを作成できるようにする」
Zoom 動画削除後にゴミ箱から復活させられた場合問題
zoom 動画インポート時の絞り込み処理
複数のLMSからのCHiBi-CHiLOにアクセスした場合のユーザー突き合わせへの応用
開発スケジュール
「トピック一覧画面で,トピックを選択してブックを作成できるようにする」 トピック一覧画面に「トピックを選択してブックを作成」ボタンを付けてクリックしたらトピック選択モード (ページ) に以降。選択後に「ブックを作成する」ボタンを押すとブック作成され、その編集ページに移行。
一覧画面で複数選択の概念を導入するという点は #411 に関連しています(#411 のissueを切り分けたほうがよさそう)
処理の流れ
* 自動バッチで zoom 管理者権限貰って取ってくる * 各 meeting の主催者メールアドレスを取得する * 対応する LTI / CC ユーザを見つける * そのユーザの Topic として登録する * 動画を Wowza に UP する * Zoom から動画を削除 (ゴミ箱に移動)
確認事項
* Vimeo 対応などを行って複数 VOD 対応した場合に Zoom import はいずれか一つに決め打ちなのか、ユーザ毎の設定に対応するのか * Zoom import はバッチ処理なので、ユーザ毎に選択させるなら事前に決めさせておかなければならない
管理者がインポート先を決めておく。(ユーザごとは将来的な話)
* メールアドレス対応は Zoom 録画 import 時点での都度対応だけでいずれかのアドレスの変更への追従などは行わない
対応しない
* 「制限事項(開発概要B)が行われない」の前半が日本語になっていない * メールアドレス対応がない場合とか変更があった場合のこと?インポート時に存在するメールアドレスにのみ割り当てて他は放置でいいのでは? * 後半は Wowza 動画は Zoom import に限らず制限できないだけの話
更新していただく
* LTI 連携のアドレス登録について * 「CHiBi-CHiLOのユーザーテーブルにはメールアドレスをもうける」を実装・導入 * 一度以上 LTI から該当ユーザがログインして貰う必要がある * その後に録画した Zoom 動画を自動インポート
これでOK
* 対応付けられた CC ユーザ以外の動画の扱いは? * 対応付けられた CC ユーザのある動画だけをインポートで良いか? * 未ログインユーザは一度ログインしたら一括インポートできる * LTI ログインしたら勝手に既存の全 Zoom 動画をインポート・削除して良いのか? * ログイン時にユーザに対して通知・承認を得るか?「この CC では Zoom 空のインポート機能が有効化されています、自動的に [user@example.com](mailto:user@example.com) で録画した Zoom の動画を全てインポート・Wowza にアップロード・Zoom 空削除してよろしいですか?」という確認をして OK だったらオンにするか? * Zoom から削除はしないがインポートはする場合にインポート済動画の識別をどうするか。それをするならインポート済動画リストを保持する必要はある。但し無限に増えるインポート済リストを保持し続けたくない。インポート対象を直近 x ヶ月とかに絞るか?
確認する必要はない。自動で全部やる。 自動削除しないはありかもしれない。熊大に確認 直近インポートnか月は管理側で設定する。熊大に確認
実装検討
* 「Zoom録画で作成したトピックはそれがわかるようにアイコン等つける」の実装方法 * 見た目で目立たせる * アイコン付けるなら Topic のデータとしてフィールドを追加するか JSON の中にフラグを立てる必要がある。フィールド追加ならトピックの検索での絞り込みもありえるがどうしたいのか * 同じ問題は PPT audio 動画のインポートにもあったので、どうせやるならそっちもフラグ立てて同じ対応をすべき (沢山フィールド追加していくことになるのは嫌じゃない?大丈夫?) * トピックタイトルの Prefix 文字列 (絵文字 例えば :ビデオカメラ: 📹) で目立たせる (フィールド追加など DB 影響なし) * 単純に日付的に目立たせる * 更新日時を現時刻でインポートすることで分かり易くする (Zoom の録画日付を無視してインポートするかどうか?)
何百もコンテンツがあって管理が大変。 仕様待ち。
* 「トピック一覧画面で,トピックを選択してブックを作成できるようにする」 * トピック一覧画面に「トピックを選択してブックを作成」ボタンを付けてクリックしたらトピック選択モード (ページ) に以降。選択後に「ブックを作成する」ボタンを押すとブック作成され、その編集ページに移行。
これでOK
* Zoom 動画削除後にゴミ箱から復活させられた場合問題 * Resource Object 側にインポート元の Zoom 動画 ID を入れるか?
やはりインポート済みリストは必要
* zoom 動画インポート時の絞り込み処理 * ゴミ箱内ではない動画リストを取得 * メールアドレスをリストして CC ユーザと突き合わせ、該当するものだけ選択 * 更にインポート済動画を除外 * 残ったものだけインポート処理を行う * 複数のLMSからのCHiBi-CHiLOにアクセスした場合のユーザー突き合わせへの応用 * これは Zoom 対応の要件外だと思うがコメント * 久野さんの方で Link Object 作る話に関連するので事前共有 (メールアドレスフィールドは追加すること) * 既存メールアドレスリストと付き合わせることで、既存ユーザがいたら紐付け、いなければ新規作成の流れが出来る * 但し、ユーザが LMS の情報を保持している場合はそれを複数 LSM のデータを入れられる配列にするのか別テーブル(したくない)にするのか何かの対応が必要
マスターアカウントapiの制約を解除しないことには話が進みそうにないので、次のミーティングで開発に使えるzoom管理者アカウントを相談する。
打ち合わせで確認したこと (に少し勝手に追記した) メモ:
file_type = shared_screen_with_speaker_view || speaker_view
のように優先順位上位のモノを 1 つ決め打ちでインポート
今後について
必要があればユーザ単位で削除のオンオフが出来ても良いのかもだがひとまずシステム単位で進める (そうしないと動画が残ってるのを減らしたいという大学側の希望が叶わない)
Zoom インポート後の動画削除について,システム単位であれば,オンだけでなく,オフも今回できるであっていますか?
Zoom インポート後の動画削除について,システム単位であれば,オンだけでなく,オフも今回できるであっていますか?
環境変数 ZOOM_IMPORT_AUTODELETE
が定義されていれば自動削除するという仕様にしてます。
自動削除したくなければ、ZOOM_IMPORT_AUTODELETE
を定義せずに運用すれば良いです。
実装作業は以下のissueで
@hATrayflood projects https://github.com/orgs/npocccties/projects/1 に各 issue のカードを (取り組み状況に応じた列に) 配置してくださいませ
実装段階に入っており詳細調整は各 issue の方で進められているのでこちらはクローズしても良いのでは? (設計変更とか最終的な設計のドキュメント化とかの議論があるならそれはそれで別 issue で良さそうに思う)
~Master account APIs について~
~https://marketplace.zoom.us/docs/api-reference/master-account-apis~ ~https://www.cdatablog.jp/entry/2020/08/17/085924#注意したいこと~
~マスターアカウントapiを使うには、あらかじめzoom営業に連絡しておく必要がある?~ ~ユーザーリストの取得はマスターアカウントapiではないので、連絡は不要かも。~
jwt認証
apiにアクセスするにはトークンが必要で、トークンはapiキーと任意の有効期限から生成できる。 本番ではトークンを都度生成する運用となるため、apiキーは機密情報となる。 ~apiシークレットはjwt認証では使われてない?~ 必要だった。
バッチ処理全体の冒頭で生成したトークンを使いまわしたいところだが、動画ファイルのダウンロードにもトークンが必要になり、ファイルサイズを考えると相応に時間がかかると予想されるため、apiアクセスの都度トークンを生成するほうがよさそう。
バッチ処理の流れ
ZOOM_API_KEY
ZOOM_API_SECRET
ZOOM_IMPORT_INTERVAL
ZOOM_IMPORT_TO
ZOOM_IMPORT_WOWZA_BASE_URL
ZOOM_IMPORT_TO
で指定したサイトに動画ファイルをアップロードする。(現在wowzaのみ対応)ZOOM_IMPORT_AUTODELETE
が設定されてるか確認する※リストを取得するapiはいずれもページングに関するパラメータが必要で、一回のリクエストですべてのデータが取れるとは限らない。
バッチの自動実行について
node-cronかnode-scheduleでできそう。どちらもcronと同じ書式でスケジュールを設定可能。 要件としては1日1回実行ではあるが、昼に1時間や2時間おきに実行するなどの設定もアリか。運用はさまざまだと思われるため、環境変数から設定できるのが望ましい。 また、スケジューラはサーバープロセス内で動作できるのが望ましい。個別の起動コマンドやスクリプトなどは不要にして、サーバ起動と同時にスケジューラも動き始めるようにしたい。
uiの変更
ユーザーログイン時の処理
ZOOM_API_KEY
ZOOM_API_SECRET
ZOOM_IMPORT_INTERVAL
ZOOM_IMPORT_TO
ZOOM_IMPORT_WOWZA_BASE_URL
ユーザー設定画面
環境変数の追加
ZOOM_API_KEY=xxxxxxxxxxxxxxxxxx
ZOOM_API_SECRET=xxxxxxxxxxxxxxxxxx
ZOOM_IMPORT_INTERVAL="1 6 * * *"
ZOOM_IMPORT_TO=wowza
ZOOM_IMPORT_WOWZA_BASE_URL=http://localhost:8080
ZOOM_IMPORT_AUTODELETE=1
db定義の変更
ALTER TABLE "users" ADD COLUMN "email" TEXT NOT NULL DEFAULT E'';
CREATE INDEX "email" ON "users"("email");
ALTER TABLE "users" ADD COLUMN "settings" JSONB NOT NULL DEFAULT '{}'::JSONB;
ALTER TABLE "resources" ADD COLUMN "imported_id" TEXT NOT NULL DEFAULT E'';
CREATE INDEX "imported_id" ON "resources"("imported_id");
参考資料
Zoom API - API Reference - Zoom Developer - Technical Documentation and Reference https://marketplace.zoom.us/docs/api-reference/zoom-api
Master account APIs - API Reference - Zoom Developer - Technical Documentation and Reference https://marketplace.zoom.us/docs/api-reference/master-account-apis
クラウド レコーディング – Zoom ヘルプセンター https://support.zoom.us/hc/ja/articles/203741855-Cloud-Recording
記録管理 – Zoom ヘルプセンター https://support.zoom.us/hc/ja/articles/205347605
Zoom APIを試してみる JWT編 https://qiita.com/nanbuwks/items/ed74a76a0f294c0bf4ed
ZoomのAPIを使ってみた - Qiita https://qiita.com/akihiko_sugiyama/items/806e69dabc41c90677bc
Zoom APIの使い方:OAuth・JWT による認証方法・Postman での実行方法 - CData Software Blog https://www.cdatablog.jp/entry/2020/08/17/085924
Zoomの録画データをダウンロードする - 芝浦工業大学 学術情報センター https://web.sic.shibaura-it.ac.jp/Rec_data_download
Node.jsで定期実行メモ - Qiita https://qiita.com/n0bisuke/items/66abf6ca1c12f495aa04
Node-Schedule で cron ライクなスケジュールジョブを実現する : まだプログラマーですが何か? http://dotnsf.blog.jp/archives/1077733140.html