Slide 1

Slide 1 text

cookpadLiveのライブ配信基盤 Cookpad Tech Kitchen #23 井口 翔太

Slide 2

Slide 2 text

自己紹介 ● 井口翔太 @iguchi1124 ● 2017年新卒 ● 2019年からcookpadLiveのサーバーサイドを担当 2

Slide 3

Slide 3 text

cookpadLiveの動画コンテンツ 3

Slide 4

Slide 4 text

cookpadLiveの動画コンテンツ 4 ● ライブ配信 ○ スマートフォン向けの縦型配信 ○ TV向けの横型配信 ● アーカイブ配信 ○ 各ライブ配信コンテンツを後から視聴できる

Slide 5

Slide 5 text

cookpadLiveの動画コンテンツ 5 ● 「スペシャルTIME」の配信 ○ 有料会員のみが番組の後半を視聴できるライブ配信 無料 有料

Slide 6

Slide 6 text

お話すること ● AWSを活用した動画配信ワークフローの紹介 ● cookpadLiveのライブ配信基盤 6

Slide 7

Slide 7 text

cookpadLiveのAWSを活用した 動画配信ワークフロー 7

Slide 8

Slide 8 text

cookpadLiveの動画配信で利用しているサービス ● AWS MediaServicesを活用 ○ AWS MediaConnect ○ AWS MediaConvert ○ AWS MediaLive ○ AWS MediaPackage ○ AWS MediaStore ○ AWS MediaTailor 8

Slide 9

Slide 9 text

cookpadLiveの動画配信で利用しているサービス 9

Slide 10

Slide 10 text

cookpadLiveの動画配信で利用しているサービス 10 動画配信をすべてAWSの マネージドサービスで構築

Slide 11

Slide 11 text

11 cookpadLiveの動画配信で利用しているサービス

Slide 12

Slide 12 text

12 MediaLive ● AWSのライブ動画処理サービス ○ RTMP等、ライブ配信の入力エンドポイントを提供 ○ 入力ストリームをエンコードし、メディアセグメントとプレイリスト ファイルを出力

Slide 13

Slide 13 text

13 MediaStore ● AWSのライブ配信に最適化されたストレージサービス ○ ライブ配信に必要なパフォーマンス、整合性、低レイテンシーを実現

Slide 14

Slide 14 text

14 MediaTailor ● AWSのサーバーサイド広告挿入サービス ○ プレイリストファイルの広告挿入マーカーをもとに広告サーバーに 広告リクエストを送り、動画広告を挿入 ○ スペシャルTIME配信の無料会員向けの配信に利用

Slide 15

Slide 15 text

15 cookpadLiveの動画配信で利用しているサービス

Slide 16

Slide 16 text

MediaConvert ● AWSの動画トランスコーダー ○ アーカイブのトランスコーダとして利用 ○ MediaLiveがS3にアーカイブ用に出力したメディアセグメントを ソースとして配信用に映像をトランスコード 16

Slide 17

Slide 17 text

cookpadLiveの ライブ配信基盤 17

Slide 18

Slide 18 text

cookpadLiveのライブ配信基盤
 18 ライブ配信基盤 cookpadLive API AWS MediaServices cookpadLive app

Slide 19

Slide 19 text

cookpadLiveのライブ配信の特徴と課題 19 ● 有名人によるライブ配信に数万人単位の視聴者が集まる ○ 配信システムのトラブルは極力避けたい ○ 配信システムの一部に異常がおきてもすぐに復旧できる構成にしたい ● MediaLiveのリソースの立ち上がりに時間がかかる ○ リソースの作成からライブ配信開始できるまで1~2分かかる ○ 同期的に配信リソースを確保するのは難しい

Slide 20

Slide 20 text

cookpadLiveのライブ配信の特徴と課題 20 ● リソースは無限ではなく有限 ○ マネージドサービスを使うメリットとしてリソースの管理を仮想化でき る一方で制約もある ○ 管理を怠ると不要リソースが発生するなどしてコストがかかってしまう

Slide 21

Slide 21 text

ライブ配信基盤で実現すること 21 ● 可用性の向上 ○ リソースの一部に障害がおきても素早く復旧できる ○ いつでも配信を始めることができる ● 配信に利用するMediaServicesのリソースを一元管理 ○ リソースのライフサイクルの管理 ○ 不要なリソースを作らない・放置しない

Slide 22

Slide 22 text

● 予めリソースをプーリングするリソースプール ○ 一般にリソースの作成コストが高いシステムに適用される、 DBのコネクションプール等と同様のしくみ ○ 新たなリソースが必要な時、あるいはリソースの不具合が起きても リプレースできるように余裕を持ってリソースを作成しスタンバイする ライブ配信基盤のコンセプト 22

Slide 23

Slide 23 text

ライブ配信基盤のコンセプト ● プールごとに配信設定をコントロールするプリセット ○ スマートフォン向け縦型配信、横型配信、入力の映像ストリームの品質 に合わせた配信設定を保持する ● ライブ配信数に応じてスケールするための予約モデル ○ 一日の配信数が多くなるケースを考慮して、自動で プールサイズをスケールする 23

Slide 24

Slide 24 text

ライブ配信フロー(リソースの確保) 24 Admin cookpadLive Server ライブ配信基盤 MediaLive ライブ配信数を予約 予約リクエスト 予約テーブルに 書き込み リソースのプーリング 非同期に リソースの作成

Slide 25

Slide 25 text

ライブ配信フロー(リソースの確保) 25 Admin cookpadLive Server ライブ配信基盤 MediaLive ライブ配信数を予約 予約リクエスト 予約テーブルに 書き込み リソースのプーリング 非同期に リソースの作成 プール管理バッチジョブ

Slide 26

Slide 26 text

ライブ配信フロー(リソースの割り当て) 26 Admin cookpadLive Server ライブ配信基盤 MediaLive プーリングしている idle状態のリソース をサービスに割り当て 配信用リソースの リクエスト RTMP Pushエンドポイント、 master playlist URLを返す RTMP Pushエンドポイントに 映像ストリームを流す RTMP Pushエンドポイント表示

Slide 27

Slide 27 text

ライブ配信フロー(リソースのクリーニング) 27 Admin cookpadLive Server ライブ配信基盤 MediaLive RTMP Pushエンドポイントに 映像ストリームを流す 配信停止 リソースの利用終了 リソースの状態を 削除待ち状態に 非同期に リソースのクリーニング

Slide 28

Slide 28 text

ライブ配信フロー(リソースのクリーニング) 28 Admin cookpadLive Server ライブ配信基盤 MediaLive RTMP Pushエンドポイントに 映像ストリームを流す 配信停止 リソースの利用終了 リソースの状態を 削除待ち状態に 非同期に リソースのクリーニング プール管理バッチジョブ

Slide 29

Slide 29 text

cookpadLiveのライブ配信基盤
 29 ライブ配信基盤 cookpadLive API AWS MediaServices cookpadLive app JSON over HTTP (garage) 
 JSON over HTTP (aws-sdk) 


Slide 30

Slide 30 text

cookpadLiveのライブ配信基盤 ● サービス間通信にはgRPCを採用 ○ Protocol Buffersでインターフェースを定義 ○ protocでインターフェースとなるコードを自動出力 ■ ライブ配信基盤を利用するプロジェクトの言語ごとにSDKを 作成するコストが抑えられる ○ googleが作成したAPI Design Guideを参考に一貫性のあるRPCを設計 ■ https://cloud.google.com/apis/design/ 30

Slide 31

Slide 31 text

● MediaServicesを活用したライブ配信基盤の機能拡充 ● CMAFを利用した低遅延ライブ配信 ● 映像の品質最適化 ● などなど... ライブ配信基盤で今後やっていくこと 31

Slide 32

Slide 32 text

ありがとうございました 32