FlutterでLiveKitを使ってみた

Flutterでターン制ボイス人狼アプリつくれるかな?課金の処理とかも楽そうだし
と思いlivekitの調査したのでメモ

LiveKitの動かし方

この記事を書いた時点では
LiveKitを動かすには

  • ローカル
  • 自前のバックエンド
  • LiveKitクラウド(たしか月に10-20時間くらい無料枠ある)

上記3つのどれかで使用する必要がある

トークン発行

さらにLiveKitにアクセスするためにトークンも発行が必要で調べた限り

  • ローカルは自分でコマンド叩いて発行できる
  • バックエンドの処理で発行
  • Firebase functionsでLiveKitクラウドから発行する方法がある

Firebase functions使う場合は従量課金のプランに入る必要があった(ためすだけなら無料の範囲だったはず)

動作確認

自分が試したのはローカルとLiveKitクラウドでiOSのシュミレーターと実機で動作確認した

リファレンス

https://docs.livekit.io/home

Flutterのもあるけどこれをやるまえにlivekitを動かす環境構築が必要

https://docs.livekit.io/agents/start/voice-ai

https://docs.livekit.io/home/quickstarts/flutter

サンプルリポジトリ

ローカルでlivekitを起動させて通話サンプルリポジトリ(iOSだけシュミレーターと実機で動作確認した)

https://github.com/kabikira/base_sample/tree/codex/create-flutter-project-with-livekit-voice-call

livekitクラウドでFirebase functionsでトークン取得を使ったリポジトリ

https://github.com/kabikira/sample_voice_chat/tree/develop

リファレンスの参考になるとこ抜粋

トークン/認証の仕組み(JWTに権限やroomが入る)

https://docs.livekit.io/home/get-started/authentication

トークンの作り方(バックエンドで発行しフロントへ渡す)

https://docs.livekit.io/home/server/generating-tokens

付与できる権限(VideoGrant: canPublish / canSubscribe / canPublishData / room / roomJoin など)

JS Server SDK(VideoGrantのプロパティ一覧)
https://docs.livekit.io/reference/server-sdk-js/interfaces/videogrant.html

Python Server SDK(access_token内のgrants一覧)
https://docs.livekit.io/reference/python/v1/livekit/api/access_token.html

接続時の考え方(参加者は音声/映像/データを公開できる)

https://docs.livekit.io/home/client/connect

テキスト送受信の方法(音声と同じRoomでテキストも可能)

Realtime text & data(全体)
https://docs.livekit.io/home/client/data/

Text streams(チャットやLLMレスポンス向けの高レベルAPI)
https://docs.livekit.io/home/client/data/text-streams/

Flutterでのデータ送信(publishData)
https://docs.livekit.io/reference/client-sdk-flutter/livekit_client/LocalParticipant/publishData.html

Flutterでのデータ受信(DataReceivedEvent)
https://docs.livekit.io/reference/client-sdk-flutter/livekit_client/DataReceivedEvent-class.html

運用上の補足(トークンは短いTTL推奨・発行後はリボーク不可)

Managing participants(TTLを短くする推奨など)
https://docs.livekit.io/home/server/managing-participants/

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です