SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
を用いた配信基盤
Kazuhiro Ota
@ciela
1
自己紹介
大田 かずひろ
@ciela
㈱サイバーエージェント所属
ゆとりサーバサイドアプリエンジニア
アメーバピグでHadoopとかいじってました
takusutaには各サービスで共通の配信基盤担
当として関わってます
2
今日のおはなし
takusutaで利用している共通配信基盤の中でも Wowza Streaming Engine という
プロダクトについて私が得た知見を出来る限りお伝えします。
3
共通配信基盤
4
共通配信基盤の役割
利用サービス
採用技術
配信開始フロー
共通配信基盤
現在稼働中の生配信に特化した3サービスの配信部分を共通化したシステム。
❏ 動画・音声の配信・視聴
❏ 配信サーバの管理
❏ 配信ストリームの管理
❏ 各種APIの提供
5
利用サービス
6
❏ takusuta
❏ https://takusuta.com/
❏ ライブ動画加工フィルターで楽しむ個人配信サービス
❏ アメスタ
❏ http://studio.ameba.jp/
❏ 有名人・芸能人に特化した高画質生配信サービス
❏ ラジ生?
❏ https://radio-nama.com/
❏ 音声のみのお手軽なネットラジオ配信サービス
主な使用技術
❏ 配信サーバ
❏ Wowza Streaming Engine on EC2
❏ RTMPでストリームを待ち受け
❏ 各サービスごとにクラスタを分割して疎な配置を行ってます
❏ CDN
❏ CloudFront
❏ HLSをキャッシュする配信視聴側のエンドポイント
❏ APIサーバ
❏ Go on EC2
❏ 各サービスに共通配信基盤の情報を提供
❏ ストリーム・配信サーバ管理DB
❏ MongoDB on EC2
❏ アーカイブストレージ
❏ S3
❏ ElasticTranscoderによるHLSトランスコード済みのストリームデータを格納
7
ライブ配信時(生配信時)①
8
Wowza
API
宅スタAPI
配信基盤
CloudFront
DB
takusuta配信者
takusuta視聴者
配信した〜い
新規配信用に
トークン払い出し
て配信サーバ教
えて〜
すいてる配信
サーバ教えて〜
ライブ配信時(生配信時)②
9
Wowza
API
takusutaAPI
配信基盤
CloudFront
DB
takusuta配信者
takusuta視聴者
トークンと接続
する配信サー
バだよ〜
xxxというトークン
で配信サーバ01
に繋ぐよう伝え
て〜
配信サーバ01が
すいてるよ〜
ライブ配信時(生配信時)③
10
Wowza
API
takusutaAPI
配信基盤
CloudFront
DB
takusuta配信者
takusuta視聴者
01さん、配信開
始するよ〜これ
トークンね〜
HLSを
CloudFrontに
キャッシュさせ
るよ〜
ライブ配信視
聴した〜い
VOD配信時(アーカイブ配信)
11
配信基盤
CloudFront
takusuta視聴者
S3
過去配信
視聴した〜い
HLSをキャッシュ
させるよ〜
その他の機能
❏ 配信終了後のMP4ファイルをS3にアップロードしてアーカイブ
❏ S3にアップロードされたファイルをVOD用にトランスコード
❏ サービスごとに必要なタイミングで通知を送信
12
配信準備からVOD変換までワークフロー形式で処理を行っています。
次の発表で詳しくご説明いたします。
Wowza
Streaming Engine
13
プロダクトの簡単な説明
付随するクラウドサービスとプレイ
ヤーアプリケーション
主要アドオン紹介
Wowza Streaming Engine
14
❏ Wowza Media Systems が開発・販売している動画ストリーミングサーバ
❏ ‘1510現在最新版は4.3
❏ Adobe Media Server (Flash Media Server) 互換
❏ カスタマイズ可能
❏ 設定やアドオンでもある程度の自由度はもたせられる
❏ プラグインの自作も可能
❏ アダプティブビットレート機能
❏ 回線環境ごとに予め決めておいた
ビットレート・解像度で視聴できる
サポートプロトコルなど
❏ 対応プロトコル
❏ RTMP
❏ RTSP
❏ HLS
❏ MPEG-DASH
❏ SmoothStreaming
❏ など
❏ 対応コーデック
❏ H.264
❏ H.265
❏ AAC
❏ など
❏ 対応ファイルフォーマット
❏ MP4
❏ MP3
❏ FLV
❏ など
15
Wowza Streaming Cloud
❏ マネージドなクラウドストリーミングサービス
❏ もちろん自分でサーバを用意する必要はなし
❏ 時間指定で配信を開始・停止できるスケジューリング機能
16
Wowza GoCoder
Wowzaサーバに対して簡単な配信を試すこ
とができる純正のネイティブアプリ
❏ iOS
❏ Android
1年ほど前に無料になりました
17
Transcoderアドオン
18
❏ 設定可能項目
❏ ビデオビットレート
❏ オーディオビットレート
❏ 画面解像度
❏ フレームレート
❏ コーデック
❏ など
ライブ配信ストリームをリアルタイムに複数のビットレートや
フォーマットへの変換を行うアドオン。
アダプティブビットレートが簡単に実現できる、
既にWowzaに組み込み済みの有料アドオン。
Transcoderアドオン
19
予めテンプレートを用意し、 Stream Name Group というリソース単位にまとめておくことで
アダプティブビットレートに簡単に対応することが可能。
この例では
❏ 360p
❏ 160p
という2つのトランスコードプリセットが有効で
❏ [ストリーム名]_all というName Groupで 360p, 160p 両方
❏ [ストリーム名]_mobile というName Groupで 160p のみ
がアダプティブビットレートとして利用できる
もちろん他のプリセットも有効であれば ABR対象になります
その他の有料アドオン
❏ nDVRアドオン
❏ ライブ配信時の追っかけ再生やポーズを VODライクに行うことができる
❏ DRMアドオン
❏ 配信コンテンツに対しての保護をかけることができる
2つともTranscoderアドオン同様有料であり既にWowzaに組み込み済み。
20
設定とカスタマイズ
21
Application設定
Transcoderアドオン設定
プラグインの開発と種類
共通配信基盤における役割
❏ RTMPでアプリケーションからの配信を待ち受け
❏ HLSでCloudFrontを介した視聴を待ち受け
❏ 配信開始・終了のトークン認証
❏ 配信開始・終了時の各サービスへの通知
❏ 各配信サーバごとの接続数をDBに更新
❏ 配信期限の過ぎたストリームの切断
❏ 配信の強制切断
❏ 配信ビットレートのロギング
22
アプリケーション設定
アプリケーションとはWowzaでライブ配信を行う際に作成する設定の単位。
共通配信基盤では各サービスごとに1アプリケーションを割り当てている。
以下、共通で施している設定。
❏ アプリケーション種別
❏ LiveHTTPOrigin
❏ 配信プロトコル
❏ RTMP
❏ 視聴プロトコル
❏ HLS
❏ 利用するアドオン
❏ Transcoderアドオン
❏ ストリーム全録画をONに
❏ すべての配信ストリームがローカルに MP4で保存される
23
プラグイン開発
デフォルトの状態でできることは基本的な配信・録画・視聴のみ。
配信の開始・終了をフックしたり、何らかの処理を定期実行させるにはJavaでのプラグイ
ン開発が必要。
具体的には以下のような処理はプラグイン開発で補うことになりました。
❏ 配信開始・終了時のトークン認証
❏ 配信開始・終了時のサービスへの通知
❏ DB上の各サーバごとの接続数レコードの更新
❏ 配信期限の過ぎたストリームの切断
❏ 配信の強制切断
❏ 配信ビットレートのロギング
24
プラグイン開発
現在配信基盤で稼働しているプラグインの大まかな種別。
(私が勝手にこう呼んでるだけです)
❏ イベントフック型
❏ 配信開始時のトークン認証
❏ 配信開始時の通知送信
❏ 配信途中切断時のクリーンアップ
❏ 常駐ワーカー型
❏ 数秒毎の配信ストリームそれぞれのビットレートロギング
❏ 数秒毎のサーバの接続数の確認と DBレコードの更新
❏ 1分毎の配信期限切れストリームの切断
❏ HTTPエンドポイント型
❏ 配信中のストリームの強制切断
25
イベントフック型
ユーザの配信状態に伴う処理を定義できる。
まずは ModuleBase というクラスを拡張しストリームが再生された際
(onStreamCreate)にストリームオブジェクトにストリームのリスナインターフェイスであ
る IMediaStreamListener3 を実装・登録することになる。
利用できる主なフックは
❏ ストリーム配信開始時
❏ onPublish
❏ ストリーム配信終了時
❏ onUnPublish
❏ AMFデータ送信時
❏ onMetaData
など。 26
常駐ワーカー型
主にWowzaサーバの状態を確認したりタイマーで自動処理を行うために
基本的にJavaのExecutorFrameworkを利用してスレッドを常駐させています。
Executorの立ち上げにはWowzaサーバ自体の立ち上がりをフックしています。
具体的には IServerNotify3 というインターフェイスを実装することで
❏ サーバインスタンス初期化
❏ onServerInit
❏ サーバインスタンス破棄開始
❏ onServerShutdownStart
❏ サーバインスタンス破棄開始
❏ onServerShutdownComplete
などのタイミングをフックすることができます。 27
HTTPエンドポイント型
自作機能をWebアプリケーションとして提供できます。
HTTPProvider2Base というクラスを拡張し、onHTTPRequest メソッドを実装することで
任意の処理を記述することができます。
その後設定ファイルに作成したクラスのFQDNとパスパターンを追記することでエンドポ
イントが利用可能になります。
28
プラグイン開発
❏ インストールしたWowza自体のライブラリ(Jar)を参照して開発していくスタイル
❏ SDKというには少々荒っぽい
❏ Eclipse用のプロジェクト雛形は提供されてるけどビルドツールは Ant
❏ 結局自前でGradle化してJarをリポジトリにアップしたりした
❏ ドキュメントがあまり書かれてない
❏ オブジェクトやスレッドのライフサイクルがわからない
❏ なぜかPDFで配布
❏ FAQ兼ねているフォーラムで検索・尋ねたほうが早いことも
❏ プラグインのサンプル集が配られてるのが救い
❏ Java1.4とかその時代のコードが沢山残ってたりするけど
29
サーバ情報と簡単
なメトリクス紹介
takusutaサーバ情報
サーバリソースの使われ方
30
takusuta Wowzaサーバ情報
現在takusutaで利用しているWowzaサーバインス
タンス情報は下記の通り。
❏ EC2インスタンス
❏ c3.2xlarge x 5
❏ ディスク
❏ EBS gp2 100GB
❏ OS
❏ CentOS7
❏ ファイルシステム
❏ xfs
31
さらにWowza実行Java環境は下記の通り。
❏ Java
❏ Oracle JDK
❏ ヒープサイズ
❏ Production Levelを選択
❏ 10GB
❏ GC
❏ Concurrent Mark-Sweep GC
takusuta Transcoder設定
❏ トランスコード先のStream種類
❏ 1Mbps 288x512 px
❏ 300kbps 288x512 px
❏ 200kbps 216x384 px
❏ 100kbps 90x160 px
❏ アダプティブビットレート用のStream Name Group
❏ All
❏ 全て
❏ high
❏ 1Mbps, 300kbps
❏ mid
❏ 300kbps, 200kbps
❏ low
❏ 100kbps
32
サーバリソースの使われ方
❏ 配信側ネットワーク帯域
❏ 同時配信本数・配信ビットレートによる
❏ 現在takusutaでは1台あたりピーク帯で約 350〜400Mbpsの使用率
33
サーバリソースの使われ方
❏ CPU
❏ 同時配信本数・配信ビットレート・トランスコーダ設定に依存
❏ 1本の配信でのベンチマークが取れればあとは配信本数で見積もり可能
❏ 現在takusutaでは1台あたりピーク帯で約 5,60%の使用率
34
サーバリソースの使われ方
❏ メモリ
❏ 同時配信本数・配信ビットレート・トランスコーダ設定に依存
❏ 現在takusutaでは1台あたりピーク帯で約 1.5〜2GBの使用率
35
まとめ
❏ Wowza Streaming Engine を用いた共通配信基盤における配信についてご説明
させていただきました。
❏ Wowzaは今もアップデートを続けており、これからも新機能が登場してくることと思
います。
❏ まだまだ知見が少ない(と思う・・)プロダクトではありますが、Web上なりリアルコ
ミュニケーションなりで積極的な情報交換を行っていければと思っております。
36
おしまい
37

Contenu connexe

Tendances

マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
Takuya ASADA
 

Tendances (20)

Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
 
root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす root権限無しでKubernetesを動かす
root権限無しでKubernetesを動かす
 
ストリームデータ分散処理基盤Storm
ストリームデータ分散処理基盤Stormストリームデータ分散処理基盤Storm
ストリームデータ分散処理基盤Storm
 
Apache OpenWhiskで実現するプライベートFaaS環境 #tjdev
Apache OpenWhiskで実現するプライベートFaaS環境 #tjdevApache OpenWhiskで実現するプライベートFaaS環境 #tjdev
Apache OpenWhiskで実現するプライベートFaaS環境 #tjdev
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
 
高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット高速にコンテナを起動できるイメージフォーマット
高速にコンテナを起動できるイメージフォーマット
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
Elasticsearch as a Distributed System
Elasticsearch as a Distributed SystemElasticsearch as a Distributed System
Elasticsearch as a Distributed System
 
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
OpenStackで始めるクラウド環境構築入門(Horizon 基礎編)
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
 
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
KubeEdgeを触ってみた
KubeEdgeを触ってみたKubeEdgeを触ってみた
KubeEdgeを触ってみた
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 

Similaire à Wowzaを用いた配信基盤 Takusuta tech conf01

20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
openrtm
 

Similaire à Wowzaを用いた配信基盤 Takusuta tech conf01 (20)

Amebaにおけるログ解析基盤Patriotの活用事例
Amebaにおけるログ解析基盤Patriotの活用事例Amebaにおけるログ解析基盤Patriotの活用事例
Amebaにおけるログ解析基盤Patriotの活用事例
 
動画配信プラットフォーム on AWS
動画配信プラットフォーム on AWS動画配信プラットフォーム on AWS
動画配信プラットフォーム on AWS
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
Lagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばLagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそば
 
Storm×couchbase serverで作るリアルタイム解析基盤
Storm×couchbase serverで作るリアルタイム解析基盤Storm×couchbase serverで作るリアルタイム解析基盤
Storm×couchbase serverで作るリアルタイム解析基盤
 
ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術ABEMA の視聴品質向上戦術
ABEMA の視聴品質向上戦術
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
ABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組みABEMA を次のフェーズへ進化させる技術への取り組み
ABEMA を次のフェーズへ進化させる技術への取り組み
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
Live配信のワークフロー takusuta tech conf #1
Live配信のワークフロー takusuta tech conf #1 Live配信のワークフロー takusuta tech conf #1
Live配信のワークフロー takusuta tech conf #1
 
NABShow報告:マルチCDNと最新ストリーミングプロトコル
NABShow報告:マルチCDNと最新ストリーミングプロトコルNABShow報告:マルチCDNと最新ストリーミングプロトコル
NABShow報告:マルチCDNと最新ストリーミングプロトコル
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch Usecases
 
WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!
 
Osc2018tokyo spring-20180224
Osc2018tokyo spring-20180224Osc2018tokyo spring-20180224
Osc2018tokyo spring-20180224
 
loggregator update
loggregator updateloggregator update
loggregator update
 
より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化
 
Azure Media Services 概要
Azure Media Services 概要Azure Media Services 概要
Azure Media Services 概要
 
Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302
 

Plus de Kazuhiro Ota

Plus de Kazuhiro Ota (7)

社内論文読み会資料 Image-to-Image Retrieval by Learning Similarity between Scene Graphs
社内論文読み会資料 Image-to-Image Retrieval by Learning Similarity between Scene Graphs社内論文読み会資料 Image-to-Image Retrieval by Learning Similarity between Scene Graphs
社内論文読み会資料 Image-to-Image Retrieval by Learning Similarity between Scene Graphs
 
広告クリエイティブ制作におけるコンピュータビジョングラフィックデザイン CA Data Engineering & Data Analysis WS #9
広告クリエイティブ制作におけるコンピュータビジョングラフィックデザイン CA Data Engineering & Data Analysis WS #9広告クリエイティブ制作におけるコンピュータビジョングラフィックデザイン CA Data Engineering & Data Analysis WS #9
広告クリエイティブ制作におけるコンピュータビジョングラフィックデザイン CA Data Engineering & Data Analysis WS #9
 
社内論文読み会 LADN: Local Adversarial Disentangling Network for Facial Makeup and D...
社内論文読み会 LADN: Local Adversarial Disentangling Network for Facial Makeup and D...社内論文読み会 LADN: Local Adversarial Disentangling Network for Facial Makeup and D...
社内論文読み会 LADN: Local Adversarial Disentangling Network for Facial Makeup and D...
 
社内論文読み会 Paper Friday, Invertible Grayscale
社内論文読み会 Paper Friday, Invertible Grayscale社内論文読み会 Paper Friday, Invertible Grayscale
社内論文読み会 Paper Friday, Invertible Grayscale
 
PaperFriday: SAVOIAS: A Diverse, Multi-Category Visual Complexity Dataset
PaperFriday: SAVOIAS: A Diverse, Multi-Category Visual Complexity DatasetPaperFriday: SAVOIAS: A Diverse, Multi-Category Visual Complexity Dataset
PaperFriday: SAVOIAS: A Diverse, Multi-Category Visual Complexity Dataset
 
社内論文読み会 20180316 - Unpaired Image-to-Image Translation using Cycle-Consistent...
社内論文読み会 20180316 - Unpaired Image-to-Image Translation using Cycle-Consistent...社内論文読み会 20180316 - Unpaired Image-to-Image Translation using Cycle-Consistent...
社内論文読み会 20180316 - Unpaired Image-to-Image Translation using Cycle-Consistent...
 
黄色い象と共に生きる
黄色い象と共に生きる黄色い象と共に生きる
黄色い象と共に生きる
 

Wowzaを用いた配信基盤 Takusuta tech conf01