2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OptimindAdvent Calendar 2024

Day 2

【Amazon Chime SDK】Chime SDKのサンプルを触ってみる

Last updated at Posted at 2024-12-01

はじめに

ひょんなことから Amazon Chime を使う機会を得たので、備忘録を残しておこうと筆を取りました。

本編

:chipmunk::chipmunk::chipmunk:

そもそもChimeって何?

Amazon Chime はざっくり言えばMTGをするためのサービスです。
これ単品でも使えるのですが、Amazon Chime SDK を使うことで、MTG機能(ビデオ通話や画面共有など)を自前のアプリに組み込むことができます。

Reactに組み込むには?

ざっくりと構成を図にしてみると以下のようになります。

スクリーンショット 2024-12-01 14.40.53.png

ユーザーは参加者情報(参加者名やMTGのID)を入力し、それを元にバックエンド側でChimeとの接続情報(websoketのエンドポイントなど)を発行します。
それを使ってMTGに参加することで、他の参加者と会話や画面共有が可能になるといった寸法です。

この際、Chimeとのやり取りを簡略化してくれるのが Chime SDK になります。
また、React用にコンポーネントやhooks・providerなどが公式から amazon-chime-sdk-component-library-react として提供されており、こちらを利用することで更に容易な構築が可能です。

実際に動かしてみる

公式が用意してくれている サンプル を動かしてみます。

最初に、amazon-chime-sdk をcloneしてきます。

cloneしたら apps/meeting を開きます。これがReact用のサンプルになります。

cd apps/meeting

後はローカルで起動するだけです。

※事前に AWS CLIの設定 が必要です

npm install && npm start

https://0.0.0.0:9000/ にアクセスします。

スクリーンショット 2024-12-01 15.20.33.png

スクリーンショット 2024-12-01 15.23.28.png

一人二役ですが無事にMTGできていますね。
それにしてもサンプル作り込まれすぎでは…?なぜかテキストチャットまで付いてるし(???)

処理の概要

サンプルの実装はとても複雑化しているため、重要な箇所だけをピックアップしてみました(ほぼ疑似コードです)

import { ThemeProvider } from 'styled-components';
import {
  MeetingProvider,
  lightTheme,
  GlobalStyles,
} from 'amazon-chime-sdk-component-library-react';

const App = () => (
  <ThemeProvider theme={lightTheme}>
    <GlobalStyles />
    {/*
    * MTGに必要な情報はほとんどが MeetingManager なるものが管理してくれるようになっています
    * このProviderは MeetingManager インスタンスを提供するためのものです
    */}
    <MeetingProvider>
      <Meeting />
    </MeetingProvider>
  </ThemeProvider>
);

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <Suspense fallback={<div>Loading...</div>}>
      <App />
    </Suspense>
  </StrictMode>,
);
import { useMeetingManager, Grid } from 'amazon-chime-sdk-component-library-react';
import { MeetingSessionConfiguration } from 'amazon-chime-sdk-js';

const MyApp = () => {
  const meetingManager = useMeetingManager();

  const joinMeeting = async () => {
    const body = {
      // title と書かれていますが、これが meetingID です
      title: 'test',
      // 参加者名
      attendeeName: 'test',
      region: 'ap-northeast-1',
    };

    // バックエンドで接続情報を発行するだけで、まだMTGには参加できていません(ネーミングがややこしい)
    const res = await fetch('/join', {
      method: 'POST',
       headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(body),
    });

    const data = await res.json();

    if (data.error) {
      throw new Error(`Server error: ${data.error}`);
    }
  
    const meetingSessionConfiguration = new MeetingSessionConfiguration(data.Meeting, data.Attendee);

    // join していますが、まだまだMTGに参加できていません(ネーミングがややこしい)
    await meetingManager.join(meetingSessionConfiguration);

    // start することで、ようやくMTGに参加することができます(ネーミng...
    await meetingManager.start();
  };

  return (
    <div>
      <button onClick={joinMeeting}>Join</button>
      <Grid>
        {// これがビデオを表示するコンポーネントです}
        <VideoTileGrid
          noRemoteVideoView={<div>まだ他の参加者がいません</div>}
        />
      </Grid>
    </div>
  );
};

おわりに

もうあの人(公式サンプル)一人で良くないですか? :sob:

冗談はさておき、Chime SDKは純粋なMTGアプリの自前開発に利用するのではなく、やはり何かしらのアプリのコミュニケーション機能として組み込む(例えばslackにおけるハドルのように)のが順当な使い方であるという教訓を得ました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?