Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

13,127 views

Published on

'151026の Takusuta Tech Conf #1 での発表スライド。
WowzaStreamingEngineについてです。

Published in: Engineering
  • Be the first to comment

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

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

×