Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
1周年を迎えたAbemaTVの動画配信の裏側 TECH PLAY CONFERENCE 2017 Yusei YAMANAKA
Slide 2
Slide 2 text
自己紹介
Slide 3
Slide 3 text
山中勇成 @toriimiyukki 株式会社サイバーエージェント 2017年新卒 株式会社AbemaTV サーバサイドエンジニア 配信チーム こういうカメラを 持っているほどの 放送オタクです
Slide 4
Slide 4 text
「中3で初めて生放送サービスを作った」AbemaTVで働く最年少エンジニアとは? IUUQTXXXXBOUFEMZDPNDPNQBOJFTBCFNBQPTU@BSUJDMFT
Slide 5
Slide 5 text
本日のアジェンダ ・AbemaTVとは ・AbemaTVを支える技術 ・AbemaTVの生放送が視聴できるまで ・MPEG-DASH(DRM)対応
Slide 6
Slide 6 text
AbemaTVの動画配信を支えるサーバーサイドシステム IUUQTXXXTMJEFTIBSFOFUZVJDIJSPOBLB[BXBBCFNBUW インターネットにおける動画配信の仕組み IUUQTXXXTMJEFTIBSFOFU3ZPTVLF,VCPTT
Slide 7
Slide 7 text
AbemaTVとは
Slide 8
Slide 8 text
AbemaTVとは PC、タブレット、スマホ、テレビデバイスなど様々なデバイスで楽しめます 24時間365日のリニア型放送を行う、インターネットテレビ局 ニュースやアニメ、スポーツなど約25チャンネルを視聴できる
Slide 9
Slide 9 text
Since 2016/4/11
Slide 10
Slide 10 text
20 million downloads
Slide 11
Slide 11 text
290 thousand programs
Slide 12
Slide 12 text
3 billion requests per day
Slide 13
Slide 13 text
1.5 Petabytes via Akamai 65 Terabytes via origin Weekend day, transferred
Slide 14
Slide 14 text
AbemaTVを支える技術
Slide 15
Slide 15 text
AbemaTV(サーバサイド)で使用している主要技術 GCP + k8s + Golang
Slide 16
Slide 16 text
Google Cloud Platform Googleが提供するクラウド AbemaTVのほとんどのインフラは、GCPを使用している →Google検索やYouTubeと同じインフラが使用できる
Slide 17
Slide 17 text
AbemaTVでのGCP使用例 ComputeEngine varnish, redis, mongo, wowza… CloudStorage 動画ファイル, セグメント, サムネイル… BigQuery BigTable アクセスログ 視聴履歴データ Pub/Sub アクセスログ, 行動ログ, 通知… Network DNS, GLB…
Slide 18
Slide 18 text
Kubernetes(k8s) Googleのエンジニアによって作られた、コンテナの管理プラット フォーム GCPでは、Google Container Engine(GKE)として、 マネージドなKubenetesクラスタが提供されている →コンソール上でノード数を指定することで自動的に環境が構築される デプロイ、ローリングアップデート、スケーリングのスケジューリングを 行い、適切にpodの台数やリソースを管理してnodeに配置する →複数のDockerのコンテナをpodという単位で管理 →podが動作するコンテナ環境を提供するマシンをminion(node)と呼ぶ
Slide 19
Slide 19 text
230 nodes vCPU 3700 cores / RAM 3300 GB 840 instances vCPU 3000 cores / RAM 13 TB w/o GKE nodes
Slide 20
Slide 20 text
Microservices →API, 管理API, 生放送管理API, メディアサーバ, 投票機能, サムネ生成などなど… サービス間の通信が必要な場合は、gRPCを使用している AbemaTVでは、マイクロサービスアーキテクチャを取り入れており、 約40のサービスが稼働している 4FSWJDF %# 4FSWJDF# 4FSWJDF" H31$
Slide 21
Slide 21 text
Deploykun AbemaTVのChatOpsボット Slackでサービスのリリースの作成, デプロイ, スケールなどが可能
Slide 22
Slide 22 text
Golang サーバサイドでは(簡単なスクリプトも含め)Golangを使用している ・社内での幾つか運用実績があった ・新しいもの好き ・シンプルな言語
Slide 23
Slide 23 text
Codeship サーバサイドのCIは、Codeshipを使用している ・以前は、CircleCIだった(CircleCI 2.0が出る前に移行した) ・Golangのユニットテストを並列で実行している ・Codeshipはコンテナを並列して動かすことができるため、 インテグレーションテストの環境が比較的楽に用意できる
Slide 24
Slide 24 text
まとめ AbemaTVのサーバサイドは、GCP+k8s+Golangの構成 サービスのデプロイでは、ChatOpsを採用し、基本的にPRから デプロイまでを一人のエンジニアが行う
Slide 25
Slide 25 text
AbemaTVの生放送が視聴できるまで
Slide 26
Slide 26 text
AbemaTVの配信種別 タイムシフト 収録 生放送 リニア ビデオ
Slide 27
Slide 27 text
生放送が視聴できるまで 現場 Encoder Streaming Server CDN Client (一般的な構成)
Slide 28
Slide 28 text
生放送が視聴できるまで 現場 Wirecast Wowza Watchman Store MediaProxy CDN Client 放送管理画面 (AbemaTVの場合)
Slide 29
Slide 29 text
現場から 送出 現場の映像は、Wirecastを通してエンコードし、GCP上の Wowzaへストリーミング プロトコルとして、RTMP や RTMP over Zixi が使われる RTMP SDI
Slide 30
Slide 30 text
エンコード& パッケージング Wowzaでは、ストリーミングされてきた映像(1920x1080)を、 AbemaTVで使用している各種解像度ごとに再エンコードし、 HLSへのパッケージングも行う 生放送管理画面で行った、CMの送信、投票の開始などの 操作もHLSのプレイリストにメタとして埋め込む これを実現するために、独自の拡張モジュールを導入している RTMP m3u8 ts(解像度ごと)
Slide 31
Slide 31 text
監視& 保存 Watchmanは、プロセスごとに担当番組を決め、 該当番組のWowzaが出力するHLSのプレイリストを監視し、 セグメント情報をmongoへ、TSをredisとGCSに書き込む 開局当初、GCSのみへの書き込みであったが、冗長化のために redisを使用した m3u8 ts(解像度ごと) Watchman
Slide 32
Slide 32 text
配信& 広告挿入 ユーザーが映像を再生するためのプレイリストやTSのエンドポイント を持つサービス プレイリストへのアクセスに対して、DBを参照して現在のチャンネ ルの放送すべきセグメントを計算して、収録や生放送、 SSAI(Server Side Ad Insertion)の広告のTSパスをまとめたm3u8 プレイリストを生成する TSへのアクセスに対して、redisかGCSを参照して返す m3u8 ts(解像度ごと) MediaProxy
Slide 33
Slide 33 text
配信から ユーザーまで m3u8 ts MediaProxy Clientは、MediaProxyのプレイリストを取得して再生する TSファイルは、Akamai(CDN)を通して取得する
Slide 34
Slide 34 text
生放送が視聴できるまで 現場 Wirecast Wowza Watchman Store MediaProxy CDN Client 放送管理画面 (AbemaTVの場合)
Slide 35
Slide 35 text
生放送が視聴できるまで 現場 Wirecast Wowza Watchman Store MediaProxy CDN Client 放送管理画面 独自のシステム (AbemaNewsの場合)
Slide 36
Slide 36 text
独自のシステムでは、HLSをベースに動画の取得と配信を行って いる まとめ AbemaTVでは、リニア型の配信やSSAIのために、独自のシス テムで動画配信を行っている CM挿入や投票機能を映像に同期して行うために、パッケージャー の時点でHLSにそれらの情報を埋め込んでいる
Slide 37
Slide 37 text
MPEG-DASH(DRM) 対応
Slide 38
Slide 38 text
MPEG-DASH(DRM)対応 DRM技術に対応したコンテンツの配信を行う必要があった →DRMはデバイスごとの対応が異なり、DRMによって必要な 配信形式も異なる
Slide 39
Slide 39 text
DRMと配信方式の対応 .JDSPTPGU 1MBZ3FBEZ "QQMF 'BJS1MBZ (PPHMF 8JEFWJOF )-4 .1&(%"4) ✕ ˓ ✕ ˓ ˓ ˓ AbemaTVではこの2方式を採用
Slide 40
Slide 40 text
MPEG-DASH(DRM)対応 DRM対応するために、MPEG-DASHへの対応が必須になった MPEG-DASHは、ISO国際標準規格(ISO/IEC 23001-6) で定められているHTTP上で動画をストリームするための規格 規格ではTS, MP4, ABR, マルチストリーム, 字幕(CC), ライブなど 多くの機能がある しかし、すべてをサポートしているプレイヤーは存在しない…! →プロファイルという概念が存在する
Slide 41
Slide 41 text
MPEG-DASHのプロファイル 'VMM1SPpMF .1&( 54 NBJO .1&(54 TJNQMF *40#BTF NFEJBpMF GPSNBU0O %FNBOE *40#BTFNFEJBpMFNBJO *40#BTF NFEJBpMF GPSNBU -JWF *40#.'' .1 *40#.''0O%FNBOE *40#.''-JWF
Slide 42
Slide 42 text
MPEG-DASHのマニフェスト MPEG-DASHには、MPDと呼ばれるマニフェストファイルとMP4 を数秒の細かいチャンクに区切ったfMP4(fragmented MP4) が必要 →HLSのリスト型とは異なり、MPEG-DASHはテンプレートを書いているような感覚 (個人談)
Slide 43
Slide 43 text
TSの構造 UT 1"5 1.5 7JEFP%BUB "VEJP%BUB 7JEFP%BUB "VEJP%BUB 7JEFP%BUB "VEJP%BUB CZUF۠Γ ʜ
Slide 44
Slide 44 text
MP4とfMP4の構造(だいたい) .1 NFEJBNQ NPPW NWIE USBL GUZQ NEBU 7JEFP%BUB G.1 JOJUNT NT NPPG NEBU 7JEFP%BUB NGIE USBG NPPW NWIE USBL GUZQ
Slide 45
Slide 45 text
HLSとMPEG-DASHのファイル取得 )-4 .1&(%"4) NV .BTUFS1MBZMJTU .FEJB1MBZMJTU NV UT 4FHNFOU UT 4FHNFOU .FEJB1MBZMJTU NV UT 4FHNFOU NQE .BOJGFTU .BOJGFTU NQE NT 4FHNFOU 4FHNFOU NT 4FHNFOU 4FHNFOU NT 4FHNFOU 4FHNFOU *OJUJBM4FHNFOU NT 7JEFP "VEJP *OJUJBM4FHNFOU
Slide 46
Slide 46 text
MPEG-DASHのマニフェスト構造 プロファイル指定 メディアパスのテンプレート タイムライン ビットレート、解像度別の定義 映像、音声、字幕の定義(言語別の音声など) コンテンツごとの単位(時間で分割、広告など) リクエストの一例 1. mp4ce/BSnr3JKqCoqq3H/P4AMzXhX8xh/360p.1/74011529.m4s 2. mp4ce/BSnr3JKqCoqq3H/P4AMzXhX8xh/720p.1/74011529.m4s 3. mp4ce/BSnr3JKqCoqq3H/P4AMzXhX8xh/720p.1/74332041.m4s (74011529+320512)
Slide 47
Slide 47 text
AbemaTVでfMP4を生成する fMP4は、ffmpeg, Bento4, MP4Boxなど様々なツールで作 成できる →SSAIをするために、TSとタイミングを合わせ、時間情報を同期させる必要があるため 収録されたコンテンツは、予め変換をすることができるが、生放 送のコンテンツは、リアルタイムで変換する必要がある 現場 Wirecast Wowza Watchman Store MediaProxy CDN Client ここでやるのが一般的 AbemaTVではここで変換
Slide 48
Slide 48 text
AbemaTVでfMP4を生成する AbamaTVでは、予め区切られたTSファイルをMP4に変換し、 Initial SegmentとMedia Segmentに分ける また、TSの時刻情報をInitial Segmentにも書き込む UT NQ JOJUNT NFEJBNT ࣌ؒใ
Slide 49
Slide 49 text
まとめ 生放送の番組では、リアルタイムにTSからfMP4へのトランスコー ドをして、MPEG-DASHに対応している MPEG-DASHのMulti-Periodで広告やコンテンツを区切って いる
Slide 50
Slide 50 text
PR
Slide 51
Slide 51 text
AbemaTV開発局の構成 QA エンジニア E2Eテスト, 映像の品質基準など Android, iOS, Web, サーバサイド, インフラなど ディレクター 開発のディレクションなど デザイナー アプリケーションのデザイン, ロゴデザインなど
Slide 52
Slide 52 text
AbemaTVエンジニアの構成 Web サーバサイド フロント, 管理画面, Chromecastなど コア, API, 配信など Android Android, Fire TVなど iOS iOS, tvOSなど インフラ GCP, チューニング, 負荷試験など
Slide 53
Slide 53 text
We’re hiring! https://recruit.abematv.co.jp https://www.wantedly.com/companies/abema