cookpadLiveのライブ配信基盤Cookpad Tech Kitchen #23井口 翔太
View Slide
自己紹介● 井口翔太 @iguchi1124● 2017年新卒● 2019年からcookpadLiveのサーバーサイドを担当2
cookpadLiveの動画コンテンツ3
cookpadLiveの動画コンテンツ4● ライブ配信○ スマートフォン向けの縦型配信○ TV向けの横型配信● アーカイブ配信○ 各ライブ配信コンテンツを後から視聴できる
cookpadLiveの動画コンテンツ5● 「スペシャルTIME」の配信○ 有料会員のみが番組の後半を視聴できるライブ配信無料 有料
お話すること● AWSを活用した動画配信ワークフローの紹介● cookpadLiveのライブ配信基盤6
cookpadLiveのAWSを活用した動画配信ワークフロー7
cookpadLiveの動画配信で利用しているサービス● AWS MediaServicesを活用○ AWS MediaConnect○ AWS MediaConvert○ AWS MediaLive○ AWS MediaPackage○ AWS MediaStore○ AWS MediaTailor8
cookpadLiveの動画配信で利用しているサービス9
cookpadLiveの動画配信で利用しているサービス10動画配信をすべてAWSのマネージドサービスで構築
11cookpadLiveの動画配信で利用しているサービス
12MediaLive● AWSのライブ動画処理サービス○ RTMP等、ライブ配信の入力エンドポイントを提供○ 入力ストリームをエンコードし、メディアセグメントとプレイリストファイルを出力
13MediaStore● AWSのライブ配信に最適化されたストレージサービス○ ライブ配信に必要なパフォーマンス、整合性、低レイテンシーを実現
14MediaTailor● AWSのサーバーサイド広告挿入サービス○ プレイリストファイルの広告挿入マーカーをもとに広告サーバーに広告リクエストを送り、動画広告を挿入○ スペシャルTIME配信の無料会員向けの配信に利用
15cookpadLiveの動画配信で利用しているサービス
MediaConvert● AWSの動画トランスコーダー○ アーカイブのトランスコーダとして利用○ MediaLiveがS3にアーカイブ用に出力したメディアセグメントをソースとして配信用に映像をトランスコード16
cookpadLiveのライブ配信基盤17
cookpadLiveのライブ配信基盤 18ライブ配信基盤cookpadLive APIAWS MediaServicescookpadLive app
cookpadLiveのライブ配信の特徴と課題19● 有名人によるライブ配信に数万人単位の視聴者が集まる○ 配信システムのトラブルは極力避けたい○ 配信システムの一部に異常がおきてもすぐに復旧できる構成にしたい● MediaLiveのリソースの立ち上がりに時間がかかる○ リソースの作成からライブ配信開始できるまで1~2分かかる○ 同期的に配信リソースを確保するのは難しい
cookpadLiveのライブ配信の特徴と課題20● リソースは無限ではなく有限○ マネージドサービスを使うメリットとしてリソースの管理を仮想化できる一方で制約もある○ 管理を怠ると不要リソースが発生するなどしてコストがかかってしまう
ライブ配信基盤で実現すること21● 可用性の向上○ リソースの一部に障害がおきても素早く復旧できる○ いつでも配信を始めることができる● 配信に利用するMediaServicesのリソースを一元管理○ リソースのライフサイクルの管理○ 不要なリソースを作らない・放置しない
● 予めリソースをプーリングするリソースプール○ 一般にリソースの作成コストが高いシステムに適用される、DBのコネクションプール等と同様のしくみ○ 新たなリソースが必要な時、あるいはリソースの不具合が起きてもリプレースできるように余裕を持ってリソースを作成しスタンバイするライブ配信基盤のコンセプト22
ライブ配信基盤のコンセプト● プールごとに配信設定をコントロールするプリセット○ スマートフォン向け縦型配信、横型配信、入力の映像ストリームの品質に合わせた配信設定を保持する● ライブ配信数に応じてスケールするための予約モデル○ 一日の配信数が多くなるケースを考慮して、自動でプールサイズをスケールする23
ライブ配信フロー(リソースの確保)24Admin cookpadLiveServerライブ配信基盤 MediaLiveライブ配信数を予約 予約リクエスト予約テーブルに書き込みリソースのプーリング非同期にリソースの作成
ライブ配信フロー(リソースの確保)25Admin cookpadLiveServerライブ配信基盤 MediaLiveライブ配信数を予約 予約リクエスト予約テーブルに書き込みリソースのプーリング非同期にリソースの作成プール管理バッチジョブ
ライブ配信フロー(リソースの割り当て)26Admin cookpadLiveServerライブ配信基盤 MediaLiveプーリングしているidle状態のリソースをサービスに割り当て配信用リソースのリクエストRTMP Pushエンドポイント、master playlist URLを返すRTMP Pushエンドポイントに映像ストリームを流すRTMP Pushエンドポイント表示
ライブ配信フロー(リソースのクリーニング)27Admin cookpadLiveServerライブ配信基盤 MediaLiveRTMP Pushエンドポイントに映像ストリームを流す配信停止 リソースの利用終了リソースの状態を削除待ち状態に非同期にリソースのクリーニング
ライブ配信フロー(リソースのクリーニング)28Admin cookpadLiveServerライブ配信基盤 MediaLiveRTMP Pushエンドポイントに映像ストリームを流す配信停止 リソースの利用終了リソースの状態を削除待ち状態に非同期にリソースのクリーニングプール管理バッチジョブ
cookpadLiveのライブ配信基盤 29ライブ配信基盤cookpadLive APIAWS MediaServicescookpadLive appJSON over HTTP (garage) JSON over HTTP (aws-sdk)
cookpadLiveのライブ配信基盤● サービス間通信にはgRPCを採用○ Protocol Buffersでインターフェースを定義○ protocでインターフェースとなるコードを自動出力■ ライブ配信基盤を利用するプロジェクトの言語ごとにSDKを作成するコストが抑えられる○ googleが作成したAPI Design Guideを参考に一貫性のあるRPCを設計■ https://cloud.google.com/apis/design/30
● MediaServicesを活用したライブ配信基盤の機能拡充● CMAFを利用した低遅延ライブ配信● 映像の品質最適化● などなど...ライブ配信基盤で今後やっていくこと31
ありがとうございました32