SlideShare une entreprise Scribd logo
1  sur  21
Live配信のワークフロー
- Takusuta TechConf #1 -
INTRODUCTION
自己紹介
> 2011年 CyberAgent 中途入社
> PC ピグゲーム(ピグ/ピグワールド/ピグライフ)の開発・運用
> 現在、ライブ配信動画サービス「Takusuta」を立ち上げ、運用中
杉山 仁則 (Yoshinori Sugiyama) ENGINEER
株式会社 タクスタ 従業員代表
@ syama666
#python #js #aws #node.js #mongodb ...
登場人物
配信サーバ(Wowza Streaming Engine)
RTMPでupされたLiveをHLS変換したり、番組を
録画したりする。
Workerプロセス(Python)
SQSを使用
役割毎に別のプロセスを立ち上げ、別々のキューをポーリング
SNSやTranscoderとも連携
配信サーバと同居
APIサーバー(Golang)
番組のステータス管理や配信URLの払い出し等行う
動画基盤
HTTPS
HTTPS
Amazon SNS(HTTPS)
HLS downstream(AWS Cloud Front)
RTMP upstream(wowza)
サービスと動画基盤の概要
HLS(live)
RTMP upstream
LiveとVOD(アーカイブ)の概
要
HLS(vod)
encode(HLS)
AWS transcoder(HLS)
動画基盤
create stream
RTMP url & key の発効
配信準備
live_ready
動画基盤
live_doing
RTMP upstream
配信開始
動画基盤
live_end
RTMP upstream disconnect
destroy stream
RTMP url & key の無効化
配信終了
動画基盤
RTMP upstream disconnect
destroy stream
RTMP url & key の無効化
配信終了(時間切れパターン)
配信サーバ
VOD(録画/アーカイブ)
What’s Amazon Elastic Transcoder?
MP4をHLS(playlist + ts files)に変換
参考URL
http://www.slideshare.net/AmazonWebServicesJapan/20131120-aws-
medisterregeneratecloudfrontetspublic
What’s AWS SQS?
Workerプロセスと組み合わせて非同期処理するの
に便利
参考URL
http://www.slideshare.net/takurosasaki/jawsug-snssqsses
What’s AWS SNS?
SQS, HTTP(S)と連携可能
参考URL
http://docs.aws.amazon.com/ja_jp/sns/latest/dg/SendMessageToHttp.html
attribute name example of attribute value 備考
applicationID takusuta サービス毎にユ
ニークな値
streamName 8aed684929914b0a9edec26afefa1e0e@1436750704941 番組のキー
SQS Attributes format
プロセス キュー名 処理の内容
transcode_ready queue_transcode_ready_[host ip] エンコードの準備
wowzaが出力したmp4をs3に
uploadする
wowzaとworkerのhostが一致する
必要があるのでキュー名のsuffix
にipをつけている
transcode_doing queue_transcode_doing エンコード実行
Elastic TranscoderのAPIを実行す
る
transcode_end queue_transcode_end Elastic Transcodrからの通知を受
け取る
transcode_end_notify queue_transcode_end_notify サービスにSNS経由で通知する
SQS queue & worker process
配信サーバ
transcode_readyの処理
mp4ファイル
upload
enqueue:
queue_transcode_ready_xx.xx.xx.xx
dequeue:
queue_transcode_ready_xx.xx.xx.xx
enqueue:
queue_transcode_doing
配信サーバ
transcode_doingの処理
dequeue:
queue_transcode_doing
POST transcoder job
transcoding to HLS
配信サーバ
transcode_endの処理
dequeue:
queue_transcode_end job finished
notification
enqueue:
queue_transcode_end_notify
配信サーバ
transcode_end_notifyの処理
dequeue:
queue_transcode_end_notify
notification to HTTPS endpoint
・冪等性の担保
・一タスクの処理をコンパクトに
まとめ
ご静聴ありがとうございました

Contenu connexe

Tendances

Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...
Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...
Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...さくらインターネット株式会社
 
Cloud Foundry構成概要 111018
Cloud Foundry構成概要 111018Cloud Foundry構成概要 111018
Cloud Foundry構成概要 111018Uemura Yuichi
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Kazuto Kusama
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
俺的 Ignite update 萌えポイント portal&arm, compute, network -
俺的 Ignite update 萌えポイント   portal&arm, compute, network -俺的 Ignite update 萌えポイント   portal&arm, compute, network -
俺的 Ignite update 萌えポイント portal&arm, compute, network -Yui Ashikaga
 
Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...
Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...
Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...Masaya Aoyama
 
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化Shigeru Tsubota
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with javaYasunari Tanaka
 
Swarm mode運用してみた
Swarm mode運用してみたSwarm mode運用してみた
Swarm mode運用してみたAkifumi Niida
 
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)さくらインターネット株式会社
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったtakanori suzuki
 
Introduction of Azure Docker Integration
Introduction of Azure Docker IntegrationIntroduction of Azure Docker Integration
Introduction of Azure Docker IntegrationTakekazu Omi
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理maebashi
 
K8s meetup containerized_cloud_foundry
K8s meetup containerized_cloud_foundryK8s meetup containerized_cloud_foundry
K8s meetup containerized_cloud_foundryJUNICHI YOSHISE
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来Kazuto Kusama
 
OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!Takashi Sogabe
 
Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015Ken Ojiri
 

Tendances (20)

Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...
Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...
Dockerホスティング「Arukas」について(「さくらインターネット」のDockerホスティング「Arukas」と「Docker Machine」ドラ...
 
Cloud Foundry構成概要 111018
Cloud Foundry構成概要 111018Cloud Foundry構成概要 111018
Cloud Foundry構成概要 111018
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
俺的 Ignite update 萌えポイント portal&arm, compute, network -
俺的 Ignite update 萌えポイント   portal&arm, compute, network -俺的 Ignite update 萌えポイント   portal&arm, compute, network -
俺的 Ignite update 萌えポイント portal&arm, compute, network -
 
Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...
Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...
Kubernetes をいじって Hardware LoadBalancer で "type LoadBalancer" を実現してみた @Kuberne...
 
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
GNS3上の仮想アプライアンス+GitLabRunner+BDDによるテスト自動化
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with java
 
Swarm mode運用してみた
Swarm mode運用してみたSwarm mode運用してみた
Swarm mode運用してみた
 
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
 
Reading NATS
Reading NATSReading NATS
Reading NATS
 
Introduction of Azure Docker Integration
Introduction of Azure Docker IntegrationIntroduction of Azure Docker Integration
Introduction of Azure Docker Integration
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理
 
K8s meetup containerized_cloud_foundry
K8s meetup containerized_cloud_foundryK8s meetup containerized_cloud_foundry
K8s meetup containerized_cloud_foundry
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来
 
Lattice深掘り話
Lattice深掘り話Lattice深掘り話
Lattice深掘り話
 
OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!OpenContrailのソースコードを探検しよう!
OpenContrailのソースコードを探検しよう!
 
Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015Cloud Foundryの件について@OpenStack Days Tokyo 2015
Cloud Foundryの件について@OpenStack Days Tokyo 2015
 

Similaire à Live配信のワークフロー takusuta tech conf #1

決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1Toshiaki Maki
 
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...Game Tools & Middleware Forum
 
Socialセミナー資料
Socialセミナー資料Socialセミナー資料
Socialセミナー資料Yasunori Kawata
 
さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~法林浩之
 
インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版Yusei Yamanaka
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1Keisuke Imai
 
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報モノビット エンジン
 
ライブ動画配信用制作・送出システムの開発
ライブ動画配信用制作・送出システムの開発ライブ動画配信用制作・送出システムの開発
ライブ動画配信用制作・送出システムの開発Eiji KOMINAMI
 
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27SORACOM,INC
 
Infrastructure of Pathtraq
Infrastructure of PathtraqInfrastructure of Pathtraq
Infrastructure of PathtraqKazuho Oku
 
TV連動サービスのリアルタイム通知を支える技術
TV連動サービスのリアルタイム通知を支える技術TV連動サービスのリアルタイム通知を支える技術
TV連動サービスのリアルタイム通知を支える技術Tsuyoshi Torii
 
ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現Shigeru Tatsuta
 
ETロボコン2020 競技会場システムのおはなし
ETロボコン2020 競技会場システムのおはなしETロボコン2020 競技会場システムのおはなし
ETロボコン2020 競技会場システムのおはなしTetsuya Odashima
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイiwata jaws-ug
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 bitbank, Inc. Tokyo, Japan
 
30min Serverless xTuber
30min Serverless xTuber30min Serverless xTuber
30min Serverless xTuberTakaaki Suzuki
 
映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来
映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来
映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来Takesato Nigorikawa
 
30min serverless-x tuber
30min serverless-x tuber30min serverless-x tuber
30min serverless-x tuberc-mitsuba
 

Similaire à Live配信のワークフロー takusuta tech conf #1 (20)

FRESH LIVEへのSRT導入
FRESH LIVEへのSRT導入FRESH LIVEへのSRT導入
FRESH LIVEへのSRT導入
 
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
 
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報 - モノビットエンジン - GTMF 2018 O...
 
Socialセミナー資料
Socialセミナー資料Socialセミナー資料
Socialセミナー資料
 
さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~
 
インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版インターネット生放送を支える技術としくみ2015年版
インターネット生放送を支える技術としくみ2015年版
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
 
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報
VRライブ・コミュニケーションサービス「バーチャルキャスト」でのモノビットエンジンの採用事例と最新情報
 
ライブ動画配信用制作・送出システムの開発
ライブ動画配信用制作・送出システムの開発ライブ動画配信用制作・送出システムの開発
ライブ動画配信用制作・送出システムの開発
 
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
 
Infrastructure of Pathtraq
Infrastructure of PathtraqInfrastructure of Pathtraq
Infrastructure of Pathtraq
 
TV連動サービスのリアルタイム通知を支える技術
TV連動サービスのリアルタイム通知を支える技術TV連動サービスのリアルタイム通知を支える技術
TV連動サービスのリアルタイム通知を支える技術
 
ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現
 
ETロボコン2020 競技会場システムのおはなし
ETロボコン2020 競技会場システムのおはなしETロボコン2020 競技会場システムのおはなし
ETロボコン2020 競技会場システムのおはなし
 
LogicFlow 概要
LogicFlow 概要LogicFlow 概要
LogicFlow 概要
 
Gitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイGitlab ci & ecsへのデプロイ
Gitlab ci & ecsへのデプロイ
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
 
30min Serverless xTuber
30min Serverless xTuber30min Serverless xTuber
30min Serverless xTuber
 
映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来
映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来
映像コンテンツを自動生成するT2Vが広げる動画ビジネスの未来
 
30min serverless-x tuber
30min serverless-x tuber30min serverless-x tuber
30min serverless-x tuber
 

Live配信のワークフロー takusuta tech conf #1

Notes de l'éditeur

  1. 配信サーバ。Wowzaのことです。RTMP配信したり、視聴側のためにHLSに変換したりするコアなところです。 Python製のWorkerプロセスがあります。live開始・終了、トランスコードの準備・開始・終了・終了の通知と、それぞれ個別の役割をもち、別々のキューをポーリングしています。 配信サーバに同居する形で、複数のプロセスが起動しています。 APIサーバは番組のステータス管理や配信URLの払い出し等行います。とても役割として小さい部分なので、この後の説明にはほとんど登場しません。 Golangで作った意味も今となってはほとんど無いです。いい思い出です。
  2. 各サービス、ここでは宅スタと動画基盤との連携の全体的な概要を説明します。ラジ生やアメスタについてもこれとほぼ同様であると思っていただいて大丈夫です。 iOS/Android/Webのクライアントサイドとやりとりするのはほとんど宅スタのサーバです。 RTMPの配信とHLSでの視聴については動画基盤のサーバ、もしくはCloudFrontにアクセスします。 それ以外でクライアントから直接動画基盤と通信することはありません。
  3. LiveとVODについて、配信と視聴の関係がどうなっているか簡単に図でしめしました。 LiveはWowzaでHLS変換を行い、Cloud Frontにのせて配信します。 VODはWowzaがレコーディングしたMP4をAWS TranscoderにかけてS3に保存し、Cloud Frontにのせて配信します。
  4. ここからは配信者の視点で説明いたします。視聴者はCloud Front経由で配信されたHLSの動画を再生されるだけなので特に説明はしません。 配信するにはまず宅スタの live_ready APIを叩きます。宅スタサーバーから動画基盤のcreate stream APIを実行し、RTMPのURL(どのWowzaから配信するか)と、配信サーバでRTMPするためのアクセスキーが発行されます。 アクセスキーには有効期限がついていて、その有効期限は任意の値にすることが可能です。 宅スタは30分を一枠としているので有効期限も30分です。
  5. 次に配信開始について。クライアントから宅スタサーバのlive_doing APIが実行されます。 配信準備の時点で動画基盤的に配信可能な状態になっているので、あとはクライアントからRTMP通信がされればCloud Front経由で番組が配信されます。
  6. 次に配信終了について。こちらには2つのパターンがあります。まず配信者が30分の期限を待たずに任意のタイミングで終了させた場合です。 宅スタの live_end APIを実行します。宅スタサーバから動画基盤に向けて destory stream APIが実行されます。これにより該当の番組のURLやキーが無効化されます。 クライアント側からRTMPを切断します。
  7. 次に時間切れで番組が終わる場合です。配信サーバのWowzaには自作プラグインでワーカスレッドを立てており、それぞれの配信サーバのstreamの有効期限を監視しています。 有効期限が過ぎた番組はWowza側からRTMPのセッションを切断されます。
  8. Liveが終わり、番組がアーカイブ化されるまでのフローを説明します。 登場人物は配信サーバ(WowzaとPythonワーカープロセス)とサービス(宅スタ)と、AWS(SQS/SNS/S3/TransCoder)です。 ここでのワーカープロセスの役割は非常に大きい物になっています。個別の小さな役割のプロセスをたくさん立てて、シンプルでスケーラビリティに強い仕組みにしています。
  9. Elastic Transcoderはクラウド上で動画のエンコーディングを行ってくれるサービスです。 ソースとなるデジタルコンテンツをS3のバケットに配置して、指定した形式での動画ファイルを指定したバケットに出力してくれます。 mp4をソースコンテンツとし、HLS形式でのファイル郡を出力してもらってます。 またSNSと連携することで、ジョブ完了時通知を受け取ることができます。
  10. SQS。シンプルでマネージドなメッセージキューサービスです。詳しくは公式ドキュメントか、参考URLを御覧ください。
  11. Amazon SNSはプッシュ通知してくれるサービスです。 SQS, HTTP(S), emailなど、多くのサービスやプロトコルと連携できます。 宅スタではHTTP(S)連携を使用しており、アーカイブ化完了した際に通知を送ってもらっています。
  12. SQS で扱うメッセージのフォーマットについて SQSのメッセージには本文とは別にアトリビュートという領域が使えます。 各サービス、例えば宅スタならtakusutaといったような個別のユニークなapplicationIDと、番組のIDを入れてメッセージを飛ばします。 これで、各workerはどのサービスのどの番組を処理するのか判断します。 全てのキューがこのフォーマットを使用しています。
  13. transcodeに関わるworkerプロセスとそれぞれの内容についてです。 それぞれのプロセスはそれぞれのキューだけをポーリングして、メッセージを受け取り、最小限の処理だけ実行して次のキューにメッセージを投げます。
  14. transcode_readyを図と一緒に説明します。 配信が終わった番組を管理してるWowzaからSQSにキューが投げられます。これは先程説明したように配信サーバ毎にキューが作られているので、Wowzaと同じインスタンス内にあるtranscode_ready workerだけがこのメッセージを受け取れます。 メッセージを受け取ったworkerは、mp4をs3バケットにuploadして、次のtranscode_doingのキューに向けてメッセージを投げます。
  15. 続いて、実際にElastic TranscoderへJOBをPOSTするworkerについて 先ほどキューイングされたtranscode_doingへのメッセージを受け取ったworkerがElastic TranscoderへJOBをPOSTします。 次のworkerが受け取るキューはTranscoderがSNS経由でenqueueするので、JOBをPOSTして処理終了です。
  16. 続いて、エンコードが終了すると、TranscoderがSNSから通知します。予めSNSをtranscode_endのキューと連携させる設定をいれています。 transcode_endキューをポーリングしているworkerは次のtranscode_end_notifyへ向けてenqueueするだけして処理終了です。
  17. 最後にtranscode_end_notifyのworkerはSNS経由して各サービスへ動画のエンコードが終了した旨を通知します。
  18. 質問タイム