akiyoko blog

akiyoko の IT技術系ブログです

「ライブ配信サービス作ってみた Takusuta TechConf #1」に参加しました

会場

株式会社サイバーエージェント
渋谷区道玄坂1丁目12番1号(渋谷マークシティウエスト 13階)


Twitter



サービス紹介と開発体制について

船ヶ山 慶氏

  • Live と VOD(アーカイブ)配信の二種類がある
  • Python, node.js, Golang, Java(Wowza関連)
  • スマホ開発は、Swift, Java
  • DBは、MongoDB, Redis
  • AWS, GCPの混合
  • プロトコルは、RTMP, HLS, websocket, 一部 mpeg-dash



 

AWSとGCPを利用したインフラ技術について

永岡 克利氏

  • 初期のころのインフラ構成は、AWSメイン
  • 死活監視は StackDriver、Slackに通知が行く
  • オーケストレーションは、Hashicorp社製の Terraform を採用
    • JSONで定義できる
    • 新しくインフラ構築する場合はすごく便利
    • 変更内容をレビューできる
    • ELBなどの状態をもつものは Terraformの管理下に置かない、など不向きもある。。
    • 書くインスタンス固有の設定は Ansible で行っている
    • バージョンアップがクッソ早い。。v0.6系は安定しているかも。
  • Web V2以降は、GCE-LB, GKE(Kubernetesのクラスタ)も採用し、徐々に GCP を本番投入
  • マルチリージョン環境
  • GCP は、Google Cloud SDK で管理している
    • gcloud, kubectl
    • SDKがまだ未対応のものも多い??
    • GKE以外は GA になっていない
  • Production環境で Docker を使える時代になった



 

Wowzaを利用した配信基盤について

大田 和寛氏

  • 共通配信基盤
    • 動画・音声の配信・視聴
    • 配信サーバの管理
    • 配信ストリームの管理
    • 各種APIの提供
  • takusuta、アメスタ、ラジ生にも採用
  • 配信サーバ
    • EC2
    • RTMP のエンドポイントを提供、HLS を CloudFront にキャッシュさせる
  • CDN
    • CloudfFront
  • APIサーバ
    • Go on EC2
  • 配信プロトコルは RTMP、視聴プロトコルは HLS
  • Wowza Streaming Engine
    • Java製の動画ストリーミングサーバ
    • Adobe Media Serverと同じように使える。互換?
    • 設定やアドオンの他、プラグインの自作も可能
    • アダプティブビットレート機能
      • Transcoderアドオン(有料??)
    • 対応プロトコル・対応コーデック・対応ファイルフォーマットが多い
  • マネージドな Wowza Streaming Cloud もある(使ってない)
    • Wowza GoCoder というアプリから配信もできる(Wowzaサーバ向け)
  • EC2インスタンスのタイプは、c3.2xlarge x 5台
  • トランスコード先の Stream種類
    • 1Mbps 288 x 512 px
    • 300kbps 288 x 512 px
    • 200kbps 216 x 384 px
    • 100kpbs 90 x 160 px
  • HLSで配信すると、8〜13秒の遅延が発生してしまう。今後の課題
  • HLSのチャンクは Apple推奨の10秒にしている


 

Live配信のワークフローについて

杉山 仁則氏

  • 配信サーバは Wowza Streaming Engine
  • Python製 workerプロセス
    • Lambda で実現できそうだが、開発時に東京リージョンに来ていなかったので非採用
    • SQSを使用
    • SNS や Transcoderとも連携
  • APIサーバは Golang製(ただの HTTPサーバなので Golang で作った深い意味はなし)
  • VOD配信のときは、S3をバックエンドにした CloudFrontからダウンストリーミングさせる
  • Live配信のときは、Wowza がバックエンド
  • Amazon Elastic Transcoder で MP4 を HLS に変換
  • SQS ・・・Workerプロセスを組み合わせ
  • SNS ・・・SQS や HTTP(S) と連携し、アーカイブの終了などを通知
  • Elastic Trasncoder は SQS に直接キューを投げられないので(ほんと?)、一旦 SNS に処理を渡している


 

Riot.jsを用いたWeb開発について

今井 啓介氏

  • React+SPA でさくっと Webを作ってた
    • シンプルなわりに重い。SEO弱い。。
  • Riot.js がある!すっごい軽い。12KB
    • カスタムタグ
    • サーバサイドレンダリング(Isomorphic)を実現
  • gulp + Browserify + Riot + Babel
  • フロントエンドは Flux
  • コンポーネント(共通app)
    • DOM+Style+Script が書ける
  • Player は V1の頃は、Video.js
    • いろんなフォーマットの動画に対応するのがめんどくさい
    • V2以降は、JWPlayer を使用
    • 商用だが、その分サポートしてくれる