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