このブログでは、Amazon Interactive Video Service (Amazon IVS) を使用してライブ ストリーミング エクスペリエンスを作成するさまざまな方法を検討してきましたが、これまでの例はすべて、再生の承認がなくても誰でも視聴できるパブリック チャンネルに焦点を当てています。視聴者がライブ ストリームの視聴を許可されていることを確認します。多くのライブ ストリーミング ユーザー生成コンテンツ (UGC) プラットフォームでは、ストリームを表示するための承認は必要ありませんが、ストリームの視聴者を視聴者のサブセットに限定したい場合があります。たとえば、コンテンツの作成者が、作成したコンテンツのサブスクリプションを請求したいと考えているとします。または、特定の人口統計または地理的な場所への配布を禁止する、ストリーム コンテンツに対するライセンス制限がある可能性があります。プラットフォームが再生承認を強制する必要があるユースケースに対処するために、Amazon IVS はプライベートチャネルをサポートしています。これらのチャネルは、秘密鍵で署名され、公開鍵で検証されたトークンを取得した視聴者に再生を制限します。この投稿では、再生認証を有効にする方法、再生キー ペアを作成する方法、トークンを生成する方法、プライベート ストリームを再生する方法について説明します。 プライベート チャネルの作成 このワークフローの最初のステップは、プライベート チャネルを作成することです。プライベート チャネルの作成は、パブリック チャネルの作成と非常によく似ています。唯一の違いは、チャネルを作成するときに、再生承認を有効にするための 1 つの設定です。 、AWS CLI、または任意の AWS SDK を介して、再生認証を有効にすることができます。 Amazon IVS コンソール まず、Amazon IVS コンソールを介してプライベート チャネルを作成する方法を見てみましょう。コンソールのチャネルのリストで、[ ] をクリックします。 チャネルの作成 [ ] ページで、チャネル名を入力し (#1)、[ ] を選択し (#2)、[ にする] をオンにします (#3)。 チャネルの作成 カスタム構成 ビデオ再生のトークン承認要件を有効 CLI を使用してチャネルを作成する場合は、 オプションを追加できます。 --authorized $ aws ivs create-channel --name demo-private-channel --latency-mode LOW --type STANDARD --authorized 実際には、AWS SDK を使用してユーザーのチャネルを作成することになるでしょう。この場合、お気に入りの言語の AWS SDK ドキュメントを参照して、 された再生に設定する適切な引数を決定できます。たとえば、AWS SDK for JavaScript v3 の の では、チャネルの作成時にブール値の プロパティを設定できると述べています。 authorized CreateChannelCommandInput ドキュメント authorized 再生承認を有効にしたので、チャネルにブロードキャストし、再生トークンを生成して渡さずにライブ再生を表示しようとすると、再生エラーが発生します。これは、再生エラーをキャプチャするために リスナーを追加した Amazon IVS プレーヤー SDK を使用した再生の例です。 ERROR const streamUrl = '[private channel Playback Url]'; const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play(); ivsPlayer.addEventListener(IVSPlayer.PlayerEventType.ERROR, (err) => { console.log(err); }); プライベート チャネルを指しているときにブラウザーでこれを実行すると、次のエラーがコンソールに記録されます。 { "type": "ErrorAuthorization", "code": 7, "source": "MasterPlaylist", "message": "invalid_playback_auth_token" } これにより、チャネルが実際に非公開であることが確認され、再生を承認するために を生成して と一緒に渡す必要があります。 token 再生 URL 再生キーの作成 再生トークンを生成する前に、秘密鍵と公開鍵のペアを作成して Amazon IVS コンソールにアップロードする必要があります。この鍵ペアは、秘密鍵で署名され、公開鍵で検証され、再生を許可する トークンを生成するために使用されます。 JWT Amazon IVS コンソールで再生キーを管理するには、左側のナビゲーション サイドバーで [ を選択します。 再生キー] コンソールでキーを作成するか、ローカル マシンでオフラインの OpenSSL を使用して手動でキーを作成できます。コンソールでキーペアを直接作成するには。このためには、[ ] をクリックします。 再生キーの作成 キーに名前を付けて、[ ] をクリックします。 作成 このペアの公開鍵は AWS アカウントに保存され、秘密鍵で署名されたトークンを含む再生リクエストを検証するために使用されます。 Amazon IVS コンソールを使用してキー ペアを生成する場合、秘密鍵はすぐにマシンにダウンロードさ 。 れ、コンソールに保存されず、さらにダウンロードすることもできません キー ペアをオフラインで作成する 独自のキー ペアを作成する場合は、オフラインで作成してから、パブリック キーを Amazon IVS コンソールにインポートできます。 OpenSSL で鍵ペアを作成する例を次に示します。 $ openssl ecparam -name secp384r1 -genkey -noout -out demo-private-channel-private-key-1.pem $ openssl ec -in demo-private-channel-private-key-1.pem -pubout -out demo-private-channel-public-key-1.pem 公開鍵をインポートするには、[ リスト] ページで [ ] をクリックします。 再生鍵 インポート インポートした鍵に名前を付け、 鍵ファイルを参照します (または 鍵ファイルの内容を貼り付けます)。 公開 公開 これは、AWS CLI からも実行できます。 $ aws ivs \ import-playback-key-pair \ --name demo-private-channel-playback-key-1 \ --public-key-material "`cat /path/to/your/public-key.pem`" または、AWS SDK 経由 (JavaScript の例については )。 ドキュメント プライベート チャンネルの再生 プライベート チャネルと再生キー ペアを作成したので、署名された再生認証トークンを生成する準備が整いました。アプリケーションでは、ビジネス ロジックによって、承認トークンを付与する必要があるユーザーが決定されます。前述のように、アプリケーション ロジックは、最初にデータベースにクエリを実行して、ユーザーがチャンネルの有効なサブスクライバーであることを確認します。または、地理的な制限がある場合は、視聴者の IP アドレスを調べて、ストリームを視聴できる地域に関連付けられていることを確認する必要があります。正確な実装はさまざまですが、視聴者が実際にストリームを表示する権限を持っているかどうかを判断したら、以下で説明するトークン生成方法に進むことができます。 注意 トークンの生成は、バックエンドで使用している言語によって異なります。要件の詳細については、 を参照してください。 : ユーザー ガイド Node.js でトークンを生成するには、 ライブラリ ( ) を使用できます。このライブラリはプロセスを簡素化し、Amazon IVS で必要とされる 署名アルゴリズムを使用してペイロードに署名できるようにします。ペイロードには 、再生を特定のドメイン (またはすべてのドメインの場合は ) に制限する 、およびトークンの有効期限のタイムスタンプが含まれている必要があります。ペイロードに署名するには、以下のようにフォーマットし、上記で作成してインポートした秘密鍵を使用します。 jsonwebtoken docs SHA-384 Channel ARN * access-control-origin トークンはプライベート チャネルで再生を開始するために使用されるため、有効期限はトークンの生成と再生開始の間の時間にのみ適用されます。ユーザーが特定のストリームを再生できる時間とは関係ありません。再生が許可されると、ユーザーが Web ページを切断するか再読み込みするまで再生を続行できます。 注: Node.js を使用して (マイクロサービスまたはサーバーレス アプリケーションを介して) バックエンドでトークンを生成する 1 つの方法を次に示します。 import jwt from "jsonwebtoken"; const getToken = () => { const privateChannelArn = process.env.DEMO_PRIVATE_CHANNEL_ARN; // private channel ARN const privateChannelPrivateKey = process.env.DEMO_PRIVATE_CHANNEL_PRIVATE_KEY; // playback private key const payload = { "aws:channel-arn": privateChannelArn, "aws:access-control-allow-origin": "*", "exp": Date.now() + (60 * 1000), // expires in 1 minute }; const token = jwt.sign(payload, privateChannelPrivateKey, { algorithm: 'ES384' }); return token; } フロントエンドでは、バックエンドからトークンを取得し、それをプライベート チャネルの に追加できます。以下の例では、簡潔にするために再生 URL ( ) を省略しています。 Playback Url streamUrl const streamUrl = `https://[truncated].m3u8?token=${token}` const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play(); まとめ この投稿では、プライベート チャネルの作成方法、再生キーペアの作成とインポート方法、および再生認証用の JWT トークンの生成方法を学びました。プライベート チャネルの詳細については、 を参照してください。 ユーザー ガイド