wowzaを用いた配信基盤 takusuta tech conf01

37
を用いた配信基盤 Kazuhiro Ota @ciela 1

Upload: kazuhiro-ota

Post on 06-Jan-2017

7.091 views

Category:

Engineering


6 download

TRANSCRIPT

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

を用いた配信基盤

Kazuhiro Ota@ciela

1

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

自己紹介

大田 かずひろ

@ciela

㈱サイバーエージェント所属

ゆとりサーバサイドアプリエンジニア

アメーバピグでHadoopとかいじってました

takusutaには各サービスで共通の配信基盤担

当として関わってます

2

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

今日のおはなし

takusutaで利用している共通配信基盤の中でも Wowza Streaming Engine という

プロダクトについて私が得た知見を出来る限りお伝えします。

3

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

共通配信基盤

4

共通配信基盤の役割

利用サービス

採用技術

配信開始フロー

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

共通配信基盤

現在稼働中の生配信に特化した3サービスの配信部分を共通化したシステム。

❏ 動画・音声の配信・視聴

❏ 配信サーバの管理

❏ 配信ストリームの管理

❏ 各種APIの提供

5

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

利用サービス

6

❏ takusuta❏ https://takusuta.com/

❏ ライブ動画加工フィルターで楽しむ個人配信サービス

❏ アメスタ

❏ http://studio.ameba.jp/

❏ 有名人・芸能人に特化した高画質生配信サービス

❏ ラジ生?

❏ https://radio-nama.com/

❏ 音声のみのお手軽なネットラジオ配信サービス

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

主な使用技術

❏ 配信サーバ❏ Wowza Streaming Engine on EC2❏ RTMPでストリームを待ち受け

❏ 各サービスごとにクラスタを分割して疎な配置を行ってます

❏ CDN❏ CloudFront❏ HLSをキャッシュする配信視聴側のエンドポイント

❏ APIサーバ❏ Go on EC2❏ 各サービスに共通配信基盤の情報を提供

❏ ストリーム・配信サーバ管理DB❏ MongoDB on EC2

❏ アーカイブストレージ❏ S3❏ ElasticTranscoderによるHLSトランスコード済みのストリームデータを格納

7

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

ライブ配信時(生配信時)①

8

Wowza

API

宅スタAPI配信基盤

CloudFront

DB

takusuta配信者

takusuta視聴者

配信した〜い

新規配信用にトークン払い出して配信サーバ教えて〜

すいてる配信サーバ教えて〜

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

ライブ配信時(生配信時)②

9

Wowza

API

takusutaAPI配信基盤

CloudFront

DB

takusuta配信者

takusuta視聴者

トークンと接続する配信サーバだよ〜

xxxというトークンで配信サーバ01に繋ぐよう伝えて〜

配信サーバ01がすいてるよ〜

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

ライブ配信時(生配信時)③

10

Wowza

API

takusutaAPI配信基盤

CloudFront

DB

takusuta配信者

takusuta視聴者

01さん、配信開始するよ〜これトークンね〜

HLSをCloudFrontにキャッシュさせるよ〜

ライブ配信視聴した〜い

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

VOD配信時(アーカイブ配信)

11

配信基盤

CloudFront

takusuta視聴者

S3過去配信視聴した〜い

HLSをキャッシュさせるよ〜

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

その他の機能

❏ 配信終了後のMP4ファイルをS3にアップロードしてアーカイブ

❏ S3にアップロードされたファイルをVOD用にトランスコード

❏ サービスごとに必要なタイミングで通知を送信

12

配信準備からVOD変換までワークフロー形式で処理を行っています。

次の発表で詳しくご説明いたします。

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

WowzaStreaming Engine

13

プロダクトの簡単な説明

付随するクラウドサービスとプレイ

ヤーアプリケーション

主要アドオン紹介

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

Wowza Streaming Engine

14

❏ Wowza Media Systems が開発・販売している動画ストリーミングサーバ

❏ ‘1510現在最新版は4.3

❏ Adobe Media Server (Flash Media Server) 互換

❏ カスタマイズ可能

❏ 設定やアドオンでもある程度の自由度はもたせられる

❏ プラグインの自作も可能

❏ アダプティブビットレート機能

❏ 回線環境ごとに予め決めておいた

ビットレート・解像度で視聴できる

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

サポートプロトコルなど

❏ 対応プロトコル

❏ RTMP

❏ RTSP

❏ HLS

❏ MPEG-DASH

❏ SmoothStreaming

❏ など

❏ 対応コーデック

❏ H.264

❏ H.265

❏ AAC

❏ など

❏ 対応ファイルフォーマット

❏ MP4

❏ MP3

❏ FLV

❏ など

15

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

Wowza Streaming Cloud❏ マネージドなクラウドストリーミングサービス

❏ もちろん自分でサーバを用意する必要はなし

❏ 時間指定で配信を開始・停止できるスケジューリング機能

16

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

Wowza GoCoderWowzaサーバに対して簡単な配信を試すこ

とができる純正のネイティブアプリ

❏ iOS❏ Android

1年ほど前に無料になりました

17

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

Transcoderアドオン

18

❏ 設定可能項目❏ ビデオビットレート

❏ オーディオビットレート

❏ 画面解像度

❏ フレームレート

❏ コーデック

❏ など

ライブ配信ストリームをリアルタイムに複数のビットレートや

フォーマットへの変換を行うアドオン。

アダプティブビットレートが簡単に実現できる、

既にWowzaに組み込み済みの有料アドオン。

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

Transcoderアドオン

19

予めテンプレートを用意し、 Stream Name Group というリソース単位にまとめておくことで

アダプティブビットレートに簡単に対応することが可能。

この例では

❏ 360p❏ 160p

という2つのトランスコードプリセットが有効で

❏ [ストリーム名 ]_all というName Groupで 360p, 160p 両方❏ [ストリーム名 ]_mobile というName Groupで 160p のみ

がアダプティブビットレートとして利用できる

もちろん他のプリセットも有効であれば ABR対象になります

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

その他の有料アドオン

❏ nDVRアドオン

❏ ライブ配信時の追っかけ再生やポーズを VODライクに行うことができる

❏ DRMアドオン

❏ 配信コンテンツに対しての保護をかけることができる

2つともTranscoderアドオン同様有料であり既にWowzaに組み込み済み。

20

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

設定とカスタマイズ

21

Application設定

Transcoderアドオン設定

プラグインの開発と種類

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

共通配信基盤における役割

❏ RTMPでアプリケーションからの配信を待ち受け

❏ HLSでCloudFrontを介した視聴を待ち受け

❏ 配信開始・終了のトークン認証

❏ 配信開始・終了時の各サービスへの通知

❏ 各配信サーバごとの接続数をDBに更新

❏ 配信期限の過ぎたストリームの切断

❏ 配信の強制切断

❏ 配信ビットレートのロギング

22

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

アプリケーション設定

アプリケーションとはWowzaでライブ配信を行う際に作成する設定の単位。

共通配信基盤では各サービスごとに1アプリケーションを割り当てている。

以下、共通で施している設定。

❏ アプリケーション種別❏ LiveHTTPOrigin

❏ 配信プロトコル❏ RTMP

❏ 視聴プロトコル❏ HLS

❏ 利用するアドオン❏ Transcoderアドオン

❏ ストリーム全録画をONに❏ すべての配信ストリームがローカルに MP4で保存される

23

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

プラグイン開発

デフォルトの状態でできることは基本的な配信・録画・視聴のみ。

配信の開始・終了をフックしたり、何らかの処理を定期実行させるにはJavaでのプラグイ

ン開発が必要。

具体的には以下のような処理はプラグイン開発で補うことになりました。

❏ 配信開始・終了時のトークン認証

❏ 配信開始・終了時のサービスへの通知

❏ DB上の各サーバごとの接続数レコードの更新

❏ 配信期限の過ぎたストリームの切断

❏ 配信の強制切断

❏ 配信ビットレートのロギング

24

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

プラグイン開発

現在配信基盤で稼働しているプラグインの大まかな種別。

(私が勝手にこう呼んでるだけです)

❏ イベントフック型❏ 配信開始時のトークン認証

❏ 配信開始時の通知送信

❏ 配信途中切断時のクリーンアップ

❏ 常駐ワーカー型❏ 数秒毎の配信ストリームそれぞれのビットレートロギング

❏ 数秒毎のサーバの接続数の確認と DBレコードの更新

❏ 1分毎の配信期限切れストリームの切断

❏ HTTPエンドポイント型❏ 配信中のストリームの強制切断

25

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

イベントフック型ユーザの配信状態に伴う処理を定義できる。

まずは ModuleBase というクラスを拡張しストリームが再生された際

(onStreamCreate)にストリームオブジェクトにストリームのリスナインターフェイスであ

る IMediaStreamListener3 を実装・登録することになる。

利用できる主なフックは

❏ ストリーム配信開始時❏ onPublish

❏ ストリーム配信終了時❏ onUnPublish

❏ AMFデータ送信時❏ onMetaData

など。 26

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

常駐ワーカー型

主にWowzaサーバの状態を確認したりタイマーで自動処理を行うために

基本的にJavaのExecutorFrameworkを利用してスレッドを常駐させています。

Executorの立ち上げにはWowzaサーバ自体の立ち上がりをフックしています。

具体的には IServerNotify3 というインターフェイスを実装することで

❏ サーバインスタンス初期化

❏ onServerInit❏ サーバインスタンス破棄開始

❏ onServerShutdownStart❏ サーバインスタンス破棄開始

❏ onServerShutdownComplete

などのタイミングをフックすることができます。27

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

HTTPエンドポイント型

自作機能をWebアプリケーションとして提供できます。

HTTPProvider2Base というクラスを拡張し、onHTTPRequest メソッドを実装することで

任意の処理を記述することができます。

その後設定ファイルに作成したクラスのFQDNとパスパターンを追記することでエンドポ

イントが利用可能になります。

28

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

プラグイン開発

❏ インストールしたWowza自体のライブラリ(Jar)を参照して開発していくスタイル

❏ SDKというには少々荒っぽい

❏ Eclipse用のプロジェクト雛形は提供されてるけどビルドツールは Ant

❏ 結局自前でGradle化してJarをリポジトリにアップしたりした

❏ ドキュメントがあまり書かれてない

❏ オブジェクトやスレッドのライフサイクルがわからない

❏ なぜかPDFで配布

❏ FAQ兼ねているフォーラムで検索・尋ねたほうが早いことも

❏ プラグインのサンプル集が配られてるのが救い

❏ Java1.4とかその時代のコードが沢山残ってたりするけど

29

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

サーバ情報と簡単なメトリクス紹介

takusutaサーバ情報

サーバリソースの使われ方

30

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

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

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

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

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

サーバリソースの使われ方

❏ 配信側ネットワーク帯域❏ 同時配信本数・配信ビットレートによる

❏ 現在takusutaでは1台あたりピーク帯で約 350〜400Mbpsの使用率

33

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

サーバリソースの使われ方

❏ CPU❏ 同時配信本数・配信ビットレート・トランスコーダ設定に依存

❏ 1本の配信でのベンチマークが取れればあとは配信本数で見積もり可能

❏ 現在takusutaでは1台あたりピーク帯で約 5,60%の使用率

34

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

サーバリソースの使われ方

❏ メモリ❏ 同時配信本数・配信ビットレート・トランスコーダ設定に依存

❏ 現在takusutaでは1台あたりピーク帯で約 1.5〜2GBの使用率

35

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

まとめ

❏ Wowza Streaming Engine を用いた共通配信基盤における配信についてご説明

させていただきました。

❏ Wowzaは今もアップデートを続けており、これからも新機能が登場してくることと思

います。

❏ まだまだ知見が少ない(と思う・・)プロダクトではありますが、Web上なりリアルコ

ミュニケーションなりで積極的な情報交換を行っていければと思っております。

36

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

おしまい

37