SlideShare a Scribd company logo
AbemaTVの動画配信を支える
サーバーサイドシステム
自己紹介
中澤 優一郎
プロジェクト経歴
- 2012/06~ AmebaスマートフォンPF
- 2014/01~ 『タップル誕生』
- 2015/12~ 『AbemaTV』
担当領域
- サーバーサイド全般
好きな言語
- golang
@hase_xpw
AbemaTVの動画配信を支えるサーバーサイドシステム
株式会社 AbemaTV
2015 年 4 月 : 設立
「インターネットTV局」
2016 年 4 月 11 日 本開局
約 30 チャンネル
24 時間放送
対応デバイス
A. TV のような体験 B. Internet
コンテンツとしての体験
AbemaTV の特性
ザッピング
受動型視聴
シェア
コメント
特徴その1
受動型視聴
「リニア型放送」
番組表通りの
時間にだけ配信。
「TV」を再現!!
特徴その2
ザッピング
テレビのチャンネルを
次々変えていく動作…
「ザッピング」
フリックで
「ザッピング」
を再現!!
特徴その3
コメント
インターネットで
おなじみの
コメント機能を
TV に融合!!
切り抜き
10 秒程度
シェア
インターネットTV局
アジェンダ
- 動画配信の基礎
- AbemaTVの動画配信システム
- AbemaTVのシステム構成
- 全体アーキテクチャ
- AbemaTV の開発スピード
動画配信の基礎
動画配信の歴史
2000
現在
【 1998 年頃〜】
主に UDP 上の
Server Push型
Streaming
【 2006 年頃〜】
HTTP による
動画サービスへ
【 2008 年〜】
各社独自の
HTTP Adaptive
Streaming
【 2010 年】
MPEG-DASH
(ISO/IEC 23009)
2010
【 1998 年】
Akamai 創業
CDN を活用したい
通信環境に
あわせて
配信したい
プログレッシブダウンロード
メディアファイルのうち、
ダウンロードできたところから再生
メディアファイル
プログレッシブダウンロード
メディアファイルのうち、
ダウンロードできたところから再生
メディアファイル
HTTP サーバに
ファイルを置くだけ。
簡単!!!
ストリーミング
時間分割したデータを
クライアントに順次転送・再生
元データ
時間分割
ストリーミング
撮影機材
時間分割したデータを
クライアントに順次転送・再生
オンラインで
映像が生成される
生配信形態も可能!!
Adaptive Bitrate Streaming
元データ
時間分割
帯域心配…。
最初は画質低め。
Adaptive Bitrate Streaming
元データ
時間分割
まだ余裕があるぞ!
Adaptive Bitrate Streaming
元データ
時間分割
高画質へ
シームレスに
切り替え!!
初期のストリーミング
元データ
時間分割
TCP or UDP の専用プロトコル
専用サーバ・専用クライアントが必要。
大規模サービスのリソース用意するの大変。
HTTP Adaptive Streaming
元データ
時間分割
ファイルの集まりとして
HTTP で転送
HTTP 関連のソリューションが使える!
ライブラリ、CDN、リバースプロキシ など
HTTP Adaptive Streaming の
具体的な規格は…?
HLS (HTTP Live Streaming)
TS
TS
TS
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100
#EXTINF:5.005,
100.ts
#EXTINF:5.005,
101.ts
#EXTINF:5.005,
102.ts
M3U8
(M3U + utf8)
動画ファイル
(MPEG2-TS)
過去
未来
HLS (HTTP Live Streaming)
TS
TS
TS
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100
#EXTINF:5.005,
100.ts
#EXTINF:5.005,
101.ts
#EXTINF:5.005,
102.ts
過去
未来
M3U8
(M3U + utf8)
動画ファイル
(MPEG2-TS)
HLS (HTTP Live Streaming)
TS
TS
TS
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100
#EXTINF:5.005,
100.ts
#EXTINF:5.005,
101.ts
#EXTINF:5.005,
102.ts
過去
未来
M3U8
(M3U + utf8)
動画ファイル
(MPEG2-TS)
HLS (HTTP Live Streaming)
TS
TS
TS
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100
#EXTINF:5.005,
100.ts
#EXTINF:5.005,
101.ts
#EXTINF:5.005,
102.ts
過去
未来
M3U8
(M3U + utf8)
動画ファイル
(MPEG2-TS)
ストリーミングサーバより
後ろでは何をしているの?
映像が配信されるまで
映像処理
パッケージン
グ
配信入力
映像が配信されるまで
映像処理
パッケージン
グ
配信入力
映像が配信されるまで
エンコード
- 入力映像の変換
映像の合成
- テロップ挿入
映像処理
パッケージン
グ
配信入力
映像が配信されるまで
パッケージング
- 映像配信可能なAssetを生成する
- m3u8+ts (HLS), mpd+fmp4 (MPEG-DASH) etc...
- 映像ファイルの暗号化 (DRM)
- 広告挿入
映像処理
パッケージン
グ
配信入力
映像が配信されるまで
配信
- クライアントに映像を配信する
- HTTPだとCDNがよく使われる
映像処理
パッケージン
グ
配信入力
AbemaTV の動画配信システム
録画済み番組
広告
生放送
Streaming-Server
管理システム
live
encoder
collector
collector
live
encoder
パッケージング入力 映像処理 配信
encoder
CDN
AbemaTVにおける配信システム
AbemaTVにおける配信システム
録画済み番組
広告
生放送A
Streaming-Server
encoder
CDN
collector
生放送B encoder collector
管理システム
encoder
配信の切り替え
自前開発
AbemaTVにおける配信システム
録画済み番組
広告
生放送A
Streaming-Server
encoder collector
Schedule 録画済み番組 生放送A 生放送B
10:00 10:30 11:00
生放送B encoder collector
管理システム
encoder 放送中
CDN
AbemaTVにおける配信システム
録画済み番組
広告
生放送A
Streaming-Server
encoder collector
生放送B encoder collector
管理システム
encoder
Schedule 録画済み番組 生放送A 生放送B
10:00 10:30 11:00
放送終了
放送開始
CDN
AbemaTVにおける配信システム
録画済み番組
広告
生放送A
Streaming-Server
encoder collector
生放送B encoder collector
管理システム
encoder
Schedule 録画済み番組 生放送A 生放送B
10:00 10:30 11:00
放送中
CDN
AbemaTVにおける配信システム
録画済み番組
広告
生放送A
Streaming-Server
encoder collector
生放送B encoder collector
管理システム
encoder
Schedule 録画済み番組 生放送A 生放送B
10:00 10:30 11:00
広告挿入
広告
CDN
Playlist はどうなっているのか
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100
#EXTINF:5.005,
program_a_1000.ts
#EXTINF:5.005,
program_a_1001.ts
#EXTINF:5.005,
program_a_1002.ts
#EXTINF:5.005,
program_a_1003.ts
Playlist はどうなっているのか
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100000
#EXTINF:5.005,
program_a_1000.ts
#EXTINF:5.005,
program_a_1001.ts
#EXTINF:5.005,
program_a_1002.ts
#EXTINF:5.005,
program_a_1003.ts
Schedule 番組A 番組B
10:00 10:30 11:00
Playlist はどうなっているのか
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100838
#EXTINF:5.005,
program_a_1838.ts
#EXTINF:5.005,
program_a_1839.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
program_b_0001.ts
#EXTINF:5.005,
program_b_0002.ts
Schedule 番組A 番組B
10:00 10:30 11:00
Playlist はどうなっているのか
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100840
#EXTINF:5.005,
program_b_0001.ts
#EXTINF:5.005,
program_b_0002.ts
#EXTINF:5.005,
program_b_0003.ts
#EXTINF:5.005,
program_b_0004.ts
Schedule 番組A 番組B
10:00 10:30 11:00
SEQUENCE
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100840
#EXTINF:5.005,
program_b_0001.ts
#EXTINF:5.005,
program_b_0002.ts
#EXTINF:5.005,
program_b_0003.ts
#EXTINF:5.005,
program_b_0004.ts
SEQUENCE
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:100840
#EXTINF:5.005,
program_b_0001.ts
#EXTINF:5.005,
program_b_0002.ts
#EXTINF:5.005,
program_b_0003.ts
#EXTINF:5.005,
program_b_0004.ts
SEQUENCE
セグメント103
セグメント102
セグメント101
セグメント100
SEQUENCE
100
セグメント104
セグメント103
セグメント102
セグメント101
SEQUENCE
101
セグメント105
セグメント104
セグメント103
セグメント102
SEQUENCE
102
セグメント104
セグメント103
セグメント102
セグメント101
セグメント100
セグメント105
プレイリスト プレイヤのメモリ上
時間
時間
SEQUENCE の計算
LB
SEQUENCE の計算
LB
DB
AbemaTV の全体アーキテクチャ
配信を取り巻く機能たち
リニア型
配信
シェア
コメント
通知
On-Demand
(課金)
検索
ランキング
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTVの全体アーキテクチャ
AbemaTV の開発スピード
AbemaTV 開局まで
1月 4月2月 3月
3 月 1 日
先行配信
4 月 11 日
本開局
サーバ開発
本格始動
AbemaTV 開局まで
1月 4月2月 3月
3 月 1 日
先行配信
4 月 11 日
本開局
サーバ開発
本格始動
配信サーバ
開発開始
AbemaTV 開局まで
1月 4月2月 3月
3 月 1 日
先行配信
4 月 11 日
本開局
サーバ開発
本格始動
生配信コンテンツ
配信の開発
録画コンテンツ
配信の開発
AbemaTV 開局まで
1月 4月2月 3月
3 月 1 日
先行配信
4 月 11 日
本開局
サーバ開発
本格始動
Abema
News
FRESH!
経由
生配信
録画コンテンツ
配信の開発
AbemaTV 開局まで
1月 4月2月 3月
3 月 1 日
先行配信
4 月 11 日
本開局
サーバ開発
本格始動
Abema
News
FRESH!
経由
生配信
録画コンテンツ
配信の開発
シェア
コメント
ランキン
グ
On Demand
課金
管理システム
短期間で仕上げられた背景
GCPに助けられたこと
- 各種機能の充実
- logging
- monitoring
- alert
- クライアントライブラリの充実
- ドキュメント
GKEに助けられたこと
- インテグレーション
- スケールアウト
今日の内容
- 動画配信の基礎
- AbemaTVの動画配信システム
- AbemaTVのシステム構成
- 全体アーキテクチャ
- AbemaTV の開発スピード
ご静聴ありがとうございました

More Related Content

PDF
インターネットにおける動画配信の仕組み
Ryosuke Kubo
 
PDF
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
 
PDF
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
 
PDF
AbemaTV が対峙する技術的課題と開発の現場
Yusuke Goto
 
PDF
WebSocketのキホン
You_Kinjoh
 
PDF
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
Amazon Web Services Japan
 
PDF
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
PDF
開発速度が速い #とは(LayerX社内資料)
mosa siru
 
インターネットにおける動画配信の仕組み
Ryosuke Kubo
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
 
AbemaTV が対峙する技術的課題と開発の現場
Yusuke Goto
 
WebSocketのキホン
You_Kinjoh
 
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
Amazon Web Services Japan
 
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
開発速度が速い #とは(LayerX社内資料)
mosa siru
 

What's hot (20)

PDF
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
法林浩之
 
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
 
PDF
ロードバランスへの長い道
Jun Kato
 
PDF
Data-Centric AI開発における データ生成の取り組み
Takeshi Suzuki
 
PPTX
MLflowで学ぶMLOpsことはじめ
Kenichi Sonoda
 
PDF
AWSではじめるMLOps
MariOhbuchi
 
PDF
ここが良かったDatadog
tyamane
 
PDF
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
Amazon Web Services Japan
 
PDF
ヤフー発のメッセージキュー「Pulsar」のご紹介
Yahoo!デベロッパーネットワーク
 
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
PDF
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
Amazon Web Services Japan
 
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
 
PDF
20190320 AWS Black Belt Online Seminar Amazon EBS
Amazon Web Services Japan
 
PDF
明日からはじめるネットワーク運用自動化
Taiji Tsuchiya
 
PDF
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
Amazon Web Services Japan
 
PDF
nginx入門
Takashi Takizawa
 
PDF
AWS EC2 Eメール制限解除 - 逆引き(rDNS)設定 申請手順
Amazon Web Services Japan
 
PDF
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
 
PDF
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon Web Services Japan
 
PDF
なぜ「マイクロサービス“化”」が必要なのか
Yusuke Suzuki
 
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
法林浩之
 
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
 
ロードバランスへの長い道
Jun Kato
 
Data-Centric AI開発における データ生成の取り組み
Takeshi Suzuki
 
MLflowで学ぶMLOpsことはじめ
Kenichi Sonoda
 
AWSではじめるMLOps
MariOhbuchi
 
ここが良かったDatadog
tyamane
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
Amazon Web Services Japan
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
Yahoo!デベロッパーネットワーク
 
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
Amazon Web Services Japan
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
 
20190320 AWS Black Belt Online Seminar Amazon EBS
Amazon Web Services Japan
 
明日からはじめるネットワーク運用自動化
Taiji Tsuchiya
 
20191112 AWS Black Belt Online Seminar AWS Media Services で始めるライブ動画配信
Amazon Web Services Japan
 
nginx入門
Takashi Takizawa
 
AWS EC2 Eメール制限解除 - 逆引き(rDNS)設定 申請手順
Amazon Web Services Japan
 
Fluentdのお勧めシステム構成パターン
Kentaro Yoshida
 
Amazon S3を中心とするデータ分析のベストプラクティス
Amazon Web Services Japan
 
なぜ「マイクロサービス“化”」が必要なのか
Yusuke Suzuki
 
Ad

Viewers also liked (9)

PDF
リニア放送型動画サービスの 
Web フロントエンド
Yusuke Goto
 
PDF
マイクロサービス時代の動画配信基Ruby×go=∞
DMM.com
 
PDF
AbemaTV Developer Conference 2016
康洋 板敷
 
KEY
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
Kentaro Matsumae
 
PDF
ニコニコ生放送の配信基盤改善
takahiro_yachi
 
PDF
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
Gaprot
 
PDF
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Ryosuke Suto
 
PDF
Kubernetesを触ってみた
Kazuto Kusama
 
PDF
AWS Black Belt Online Seminar 2017 動画配信 on AWS
Amazon Web Services Japan
 
リニア放送型動画サービスの 
Web フロントエンド
Yusuke Goto
 
マイクロサービス時代の動画配信基Ruby×go=∞
DMM.com
 
AbemaTV Developer Conference 2016
康洋 板敷
 
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
Kentaro Matsumae
 
ニコニコ生放送の配信基盤改善
takahiro_yachi
 
HTML5 + JavaScriptでDRMつきMPEG-DASHを再生させる
Gaprot
 
Google Container Engine と Kubernetes で 無理をしないコンテナ管理
Ryosuke Suto
 
Kubernetesを触ってみた
Kazuto Kusama
 
AWS Black Belt Online Seminar 2017 動画配信 on AWS
Amazon Web Services Japan
 
Ad

AbemaTVの動画配信を支えるサーバーサイドシステム