絶対失敗できないライブ放送を支えるNewsPicks動画基盤

# あいさつ

こんにちは。NewsPicksエンジニアの桐畑と申します。[NewsPicksAdventCalendar2018](https://qiita.com/advent-calendar/2018/newspicks)の8日目を書かせていただきます。今日はNewsPicksの動画基盤についてお伝えできればと思います。

# NewsPicksの動画

NewsPicksでは、2017年からテキストコンテンツではなく、動画コンテンツを開始しています。立ち上げ当初は経済メディア×動画は難しいと言われていたのですが、トライアンドエラーを繰り返し、今ではユーザー獲得ドライバーのコンテンツへと成長を遂げています。
人気のコンテンツとしては、[WEEKLY OCHIAI](https://newspicks.com/movie-series/6)や[メイクマネー](https://newspicks.com/movie-series/2)などがあります。[WEEKLY OCHIAI](https://newspicks.com/movie-series/6)は、リアルタイムのライブ配信で毎回、出演者の皆さん・制作陣の皆さん・エンジニアが全力を尽くして番組を放送しています！

[![wo.jpg](https://qiita-image-store.s3.amazonaws.com/0/1130/c08f93af-1051-aaca-39c3-e63da5176a64.jpeg)](https://newspicks.com/movie-series/6)
[![mk.jpg](https://qiita-image-store.s3.amazonaws.com/0/1130/01a4db21-b25e-f972-f9c4-d91b767a9bb8.jpeg)](https://newspicks.com/movie-series/2)


# 概要

NewsPicksの動画配信では、クラウドサービス(AWS / Azure)を使って配信しております。

今回は

- AWSを使った動画配信基盤
- 基盤を支える基盤

をお伝えできればと思います。

ちなみに、ライブ配信を今すぐ試してみたい方には、AWSのHitoshi Anjiさんの「20分でLIVE配信!」の資料に沿って進めると20分前後でライブ配信を試せます！
https://www.slideshare.net/KamedaHarunobu/20180123-20liveaws-media-servicesmedia-live-mediapackagepub


# 動画配信基盤の全体構成

- ライブ配信は安定性 / リアルタイム性を
- オンデマンド配信は自動化を

意識して構成しております。

![np.png](https://qiita-image-store.s3.amazonaws.com/0/1130/fdbeef82-2315-4535-ae9f-e6db64e1e063.png)


## 映像→エンコーダー部分

この部分はクラウドではなく、オンプレミスで配信機材がスタジオ内にあります。Tricaster※1で作成された映像データをSDIケーブルで、ElementalLive※2に送ります。ElementalLiveでは映像データを配信用に複数の画質帯に圧縮しています。

※1[Tricaster](http://tricaster.jp/tricaster/))複数の入力映像をくっつけたり、ワイプで表示したり、テロップ差し込んだりする機材で主要なテレビ局で使われている機材です。
※2[ElementalLive](https://www.evc.jp/product/elemental/elemental_live.html))複数画質にエンコード。複数のプラットフォームへの同時配信できる機材です。


![01.jpg](https://qiita-image-store.s3.amazonaws.com/0/1130/907f7604-0078-0ae7-bc17-420a64070592.jpeg)


複数の画質帯に圧縮することで、視聴環境（回線速度）に応じて最適な動画を流すことができます。

- モバイル回線には容量が少ない動画流す（荒い）
- お家の回線には綺麗な動画流す（容量多い）

ちなみに、iMovieを使って動画の書き出しを実施したことがある人はわかるかもしれませんが、複数の画質に同時にエンコードするには、かなりのマシンパワーが必要となります。ElementalLiveは、それを実現するに十分な見た目となっております。

*1Uの奥行き1900mmある重量感あるElementalLive（AWSカラー）*
![el.jpg](https://qiita-image-store.s3.amazonaws.com/0/1130/f039d634-5e60-48d8-7b29-a00dc1f2992e.jpeg)
(ラック構築中の画像につき見辛くて申し訳ございません。)


## ライブ配信

ElementalLiveでエンコードした動画データをAWSの[MediaStore](https://aws.amazon.com/jp/mediastore/)というサービスに送ります。MediaStoreは、映像配信に特化したS3でイメージしてもらうと分かりやすいかと思います。MediaStoreに送られた動画データはCloudFrontを通してアプリに届けられます。

![02.jpg](https://qiita-image-store.s3.amazonaws.com/0/1130/6e0ed091-7b66-c6fd-7c40-26582882bbce.jpeg)

現時点では、かなり安定して配信できており、遅延も少なめです。（HLSなのである程度は遅れますが・・・）


## オンデマンド配信

ライブ放送が終わると、自動で準備が始まるように仕組みを構築しています。

1. 放送終了時すると、ElementalLiveからmp4ファイル自動でS3にアップロードされます。
2. LambdaでS3のアップロードを検知して、[MediaConverter](https://aws.amazon.com/jp/mediaconvert/)のエンコードタスクを実行します。
3. 動画データ　/　ダウンロードファイルを生成されると、オンデマンド配信が開始されます。

![03.jpg](https://qiita-image-store.s3.amazonaws.com/0/1130/0e8bfd9f-211c-a07c-1ff2-c03b3f39e99e.jpeg)

もともとそこまの作業量でもないことから、マニュアルで実施していたのですが、放送時間帯によっては配信作業者の負担が大きいため、システムでできることはシステムでできるように自動化を進めました。

# 基盤を支える基盤

どれだけ優れた基盤があっても、基盤を作る・使う・改善する`人`がいないと成り立ちません。
NewsPicksの動画立ち上げは、基盤およびアプリケーション開発を2ヶ月で実現しました。その後の基盤改善も今までに3回実施しています。なによりもエンジニアがスピード感をもって仕事に取り組むようにしています。

<img width="375" alt="Image from iOS (53).jpg" src="https://qiita-image-store.s3.amazonaws.com/0/1130/c4880448-9ffd-5529-a9e2-230115340048.jpeg">

また、NewsPicksでは動画配信運用を全てのエンジニアで分担しています。

主な理由としては、

1. 動画配信の知識や業務の属人化を防ぐ
2. 重要かつ緊張感あふれる仕事だからこそ、全エンジニアが担当して運用を理解する

となります。
特に２にの効果は大きく、全てのエンジニアが動画配信の重要さと大変さを分かち合えることで、運用・機能の改善点が共通認識となり、一部のメンバーで回していたときよりも、改善のスピード・精度がアップしました。


# おわりに

NewsPicksは5年後、世界で最も影響力のある経済メディアになるという目標を実現するための仲間を募集しています。今回の動画配信や動画コンテンツに興味を持たれた方はもちろん、 [NewsPicksAdventCalendar2018](https://qiita.com/advent-calendar/2018/newspicks)を御覧頂いて興味を持っていただいた方はぜひご連絡ください。
動画のアプリケーション側の機能も随時改善を進めています。アプリエンジニアも絶賛募集中です。

AdventCalendarの明日(12/9)の担当はNewsPicks　期待のHOPE　ホアンさんが機械学習について書いてくれる予定です。ぜひともご期待ください。


※念の為ですが、配信の仕組みは常にアップデートを進めており、基盤は発展途上にあります。

# 追記

[NewsPicksAdventCalendar2018](https://qiita.com/advent-calendar/2018/newspicks)の9日目が更新されています。
ずばり、[ゼロから最先端のAIを理解する方法](https://qiita.com/blacksun174/items/f39c4eca833050756103)ということで、今までAI / 機械学習などに触れたことが無い方は是非ともご一読いただければ幸いです。