Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
cookpadLiveのライブ配信基盤
Search
Shota Iguchi
January 30, 2020
0
1.1k
cookpadLiveのライブ配信基盤
Shota Iguchi
January 30, 2020
Tweet
Share
More Decks by Shota Iguchi
See All by Shota Iguchi
Webpacker移行ガイド / Migrating from Webpacker to Simpacker
iguchi1124
1
490
師弟登壇 2018 クックパッドで弟子入りした話
iguchi1124
1
3k
電話番号を扱う技術
iguchi1124
21
12k
RackでWEBアプリケーション開発入門
iguchi1124
0
300
Featured
See All Featured
Practical Orchestrator
shlominoach
186
10k
Done Done
chrislema
181
16k
Designing for Performance
lara
604
68k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Happy Clients
brianwarren
97
6.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
4
380
Docker and Python
trallard
40
3.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Building Applications with DynamoDB
mza
90
6.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
49k
Transcript
cookpadLiveのライブ配信基盤 Cookpad Tech Kitchen #23 井口 翔太
自己紹介 • 井口翔太 @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 MediaTailor 8
cookpadLiveの動画配信で利用しているサービス 9
cookpadLiveの動画配信で利用しているサービス 10 動画配信をすべてAWSの マネージドサービスで構築
11 cookpadLiveの動画配信で利用しているサービス
12 MediaLive • AWSのライブ動画処理サービス ◦ RTMP等、ライブ配信の入力エンドポイントを提供 ◦ 入力ストリームをエンコードし、メディアセグメントとプレイリスト ファイルを出力
13 MediaStore • AWSのライブ配信に最適化されたストレージサービス ◦ ライブ配信に必要なパフォーマンス、整合性、低レイテンシーを実現
14 MediaTailor • AWSのサーバーサイド広告挿入サービス ◦ プレイリストファイルの広告挿入マーカーをもとに広告サーバーに 広告リクエストを送り、動画広告を挿入 ◦ スペシャルTIME配信の無料会員向けの配信に利用
15 cookpadLiveの動画配信で利用しているサービス
MediaConvert • AWSの動画トランスコーダー ◦ アーカイブのトランスコーダとして利用 ◦ MediaLiveがS3にアーカイブ用に出力したメディアセグメントを ソースとして配信用に映像をトランスコード 16
cookpadLiveの ライブ配信基盤 17
cookpadLiveのライブ配信基盤 18 ライブ配信基盤 cookpadLive API AWS MediaServices cookpadLive app
cookpadLiveのライブ配信の特徴と課題 19 • 有名人によるライブ配信に数万人単位の視聴者が集まる ◦ 配信システムのトラブルは極力避けたい ◦ 配信システムの一部に異常がおきてもすぐに復旧できる構成にしたい • MediaLiveのリソースの立ち上がりに時間がかかる
◦ リソースの作成からライブ配信開始できるまで1~2分かかる ◦ 同期的に配信リソースを確保するのは難しい
cookpadLiveのライブ配信の特徴と課題 20 • リソースは無限ではなく有限 ◦ マネージドサービスを使うメリットとしてリソースの管理を仮想化でき る一方で制約もある ◦ 管理を怠ると不要リソースが発生するなどしてコストがかかってしまう
ライブ配信基盤で実現すること 21 • 可用性の向上 ◦ リソースの一部に障害がおきても素早く復旧できる ◦ いつでも配信を始めることができる • 配信に利用するMediaServicesのリソースを一元管理
◦ リソースのライフサイクルの管理 ◦ 不要なリソースを作らない・放置しない
• 予めリソースをプーリングするリソースプール ◦ 一般にリソースの作成コストが高いシステムに適用される、 DBのコネクションプール等と同様のしくみ ◦ 新たなリソースが必要な時、あるいはリソースの不具合が起きても リプレースできるように余裕を持ってリソースを作成しスタンバイする ライブ配信基盤のコンセプト 22
ライブ配信基盤のコンセプト • プールごとに配信設定をコントロールするプリセット ◦ スマートフォン向け縦型配信、横型配信、入力の映像ストリームの品質 に合わせた配信設定を保持する • ライブ配信数に応じてスケールするための予約モデル ◦ 一日の配信数が多くなるケースを考慮して、自動で
プールサイズをスケールする 23
ライブ配信フロー(リソースの確保) 24 Admin cookpadLive Server ライブ配信基盤 MediaLive ライブ配信数を予約 予約リクエスト 予約テーブルに
書き込み リソースのプーリング 非同期に リソースの作成
ライブ配信フロー(リソースの確保) 25 Admin cookpadLive Server ライブ配信基盤 MediaLive ライブ配信数を予約 予約リクエスト 予約テーブルに
書き込み リソースのプーリング 非同期に リソースの作成 プール管理バッチジョブ
ライブ配信フロー(リソースの割り当て) 26 Admin cookpadLive Server ライブ配信基盤 MediaLive プーリングしている idle状態のリソース をサービスに割り当て
配信用リソースの リクエスト RTMP Pushエンドポイント、 master playlist URLを返す RTMP Pushエンドポイントに 映像ストリームを流す RTMP Pushエンドポイント表示
ライブ配信フロー(リソースのクリーニング) 27 Admin cookpadLive Server ライブ配信基盤 MediaLive RTMP Pushエンドポイントに 映像ストリームを流す
配信停止 リソースの利用終了 リソースの状態を 削除待ち状態に 非同期に リソースのクリーニング
ライブ配信フロー(リソースのクリーニング) 28 Admin cookpadLive Server ライブ配信基盤 MediaLive RTMP Pushエンドポイントに 映像ストリームを流す
配信停止 リソースの利用終了 リソースの状態を 削除待ち状態に 非同期に リソースのクリーニング プール管理バッチジョブ
cookpadLiveのライブ配信基盤 29 ライブ配信基盤 cookpadLive API AWS MediaServices cookpadLive app JSON
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