Upgrade to Pro — share decks privately, control downloads, hide ads and more …

React Nativeを使ったリアルタイム配信サービスの開発 / React-Native-Matsuri-2021-BAKOON-Development

Junichi Sato
October 02, 2021

React Nativeを使ったリアルタイム配信サービスの開発 / React-Native-Matsuri-2021-BAKOON-Development

Junichi Sato

October 02, 2021
Tweet

More Decks by Junichi Sato

Other Decks in Programming

Transcript

  1. 自己紹介 名前: 佐藤純一 (Junichi Sato) 所属: SB イノベンチャー株式会社 ( ヤフー株式会社)

    得意分野 検索システム、類似画像検索システム → 『Python とTensorFlow で学ぶ類似画像検索システム』 GitHub: @sat0b Twitter: @sat0b 2
  2. BAKOON 開発の取り組み 2019 年10 月 PJ スタート 2020 年3 月

    審査通過 2020 年5 月 開発スタート 2020 年8 月 アプリ版開発開始 2021 年1 月 iOS アプリリリース 2021 年3 月 有料課金開始 2021 年5 月 HIIT トレーニング開始 7
  3. React Native 採用の経緯 最初の2 ヶ月くらいはWeb アプリで作成 React で開発 & 仮説検証

    モバイルアプリ化 Push 通知、アプリ内課金 React Native に決めた理由 React から移行するため 少ない人数でiOS/Android 対応するため 16
  4. ホーム画面での活用 Firestore からスケジュールを取得 コレクションをonSnapshot で リッスン 更新が自動的に反映される db.collection(`rooms`) .where(`end`, `>=`,

    dateBegin) .where(`end`, `<`, dateEnd) .onSnapshot(async (snapshot) => { snapshot.docs.map( async (doc): Promise<Room> => { // ... return rooms; } ) }) 23
  5. Agora クライアント クライアントの初期化 const rtcEngine = await RtcEngine.create(appId); await rtcEngine.enableVideo();

    await rtcEngine.setChannelProfile(ChannelProfile.LiveBroadcasting); token を渡してチャンネルに参加 rtcEngine.joinChannel(token, channelId, null, agoraUid); 36
  6. 録画配信 (HLS) Agora の機能で配信後の動画をS3 上に保存 Amazon S3, Alibaba Cloud, Qiniu

    Cloud に対応 Firestore にURL を保存、react-native-video で再生 38
  7. リアクション推定とスコア計算 PoseNet の骨格データの推定 const { pose, posenetOutput } = await

    model.estimatePose(images); リアクションの推定 const prediction = await reactionModel.predict(posenetOutput); 運動量のスコア計算 const score = calculateScore(posenetOutput) 43
  8. React Native でよかったこと React 製のWeb アプリからの移行がスムーズ React Native 力が上がるとReact も扱えるようになった

    PJ のコードをTypeScript で統一 高い柔軟性・型の表現力 TS は好きな言語の一つになった 豊富なサンプルコード JS, Node.js 54
  9. まとめ BAKOON のサービスについて紹介 BAKOON の技術・システム Firebase (Firestore とFunctions) の活用 Agora

    を利用したリアルタイム配信 TensorFlow.js を用いたモーションキャプチャ 開発を通して学んだこと ユーザーのフィードバックを得る方法 55