動画
- 動画よくある用途
- 動画ファイルのアップロード
- 動画ファイルフォーマット/エンコード
- 動画ファイルのホスト/配信
- 動画ファイルの加工
- 動画ファイルの再生プレイヤー
- 動画ファイルの再生トラッキング
- 動画のストリーミング配信/ライブ配信/P2P通信
- 動画の解析
- 動画へのコメントのオーバレイ/字幕
画像解析と動画解析の組み合わせ
動画のよくある用途
- 動画共有: Youtube, niconico
- ライブ配信: ツイキャス, Periscope, Twitch, Mirrativ, Fb Live, LINE Live
- 動画配信: Netflix, Hulu
- ショート動画: Facebook, Instagram, Vine
- 自撮りフィルタ: Snapchat, MSQRD
- 分散型動画: KURASHIRU, C Channel, every tv
- ビデオチャット: Skype, Facetime
動画ファイルのアップロード
クライアントでの選択方法
- ブラウザ: HTMLのinputタグでtypeをfileにして、画像を選択
- または、HTML5のDnD APIで複数枚のFileを取得する
- jQueryにしろReactにしろ、それぞれやり方ある
- iOS: AlamofireでNSDataとしてファイルを選択する
- カメラの起動、カメラロールからの取得など
- Androidも同様(いくつかライブラリがある)
ファイルアップロード
- multipart/form-dataでアップロードする
pre-flightでS3に画像をアップ
メインサーバーでは、選択された画像のメタデータだけ送信し、認証処理と画像のvalidationを完了したら、S3へのアクセストークンを返却し、クライアントから直接画像をS3にアップロードする。メインサーバーの負荷を減らすためにも、直接アップロードしたほうがお得。CORSに注意が必要。
動画ファイルフォーマット/エンコード
- AVI
- MP4
- MOV
- MPEG
動画形式の種類と違い(AVI・MP4・MOV・MPEG・MKV・WMV・FLV・ASF等)【コンテナ】
Elastic Transcoder でのエンコード
S3にアップロード後、LambdaをTranscoderを呼び出し、エンコードし、Bucketに設置。
動画ファイルのホスト/配信
- WEBサーバーと同じ場所にホスト: Nginxが稼働しているファイルシステムと同じ場所にホスト
- S3など専用ファイルサーバーにホスト: サーバー経由またはクライアントからダイレクトで送る
- AkamaiなどのCDNから配信: CDNにキャッシュさせて配信する
- CloudFront(AWS), Cloudflare, Fastlyなど
動画ファイルの加工
- 圧縮(compression)
- サイズ変更(resize)
- 拡大縮小(scale)
- サムネイル(thumbnail)
- 切り出し(crop)
- 回転(lotate)
- 色変換/エフェクト(effect/filter)
- 合成
- 文字入れ
動画ファイルの再生プレイヤー
- HTML5のvideoタグ, JavaScriptのライブラリ, Flashのライブラリ
- iOS(Swift): AVPlayer
- Android(Java): VideoView
参考
動画ファイルの再生トラッキング
- 再生状況
- 飛ばしたポイント
- 途中離脱のポイント
動画のストリーミング配信/ライブ配信/P2P通信
- Create a Simple Music Streaming App with Ruby on Rails
- Linuxとフリーソフトでライブ動画配信サーバーを構築する - idinorの日記
- ニコニコ動画のダウンロードツールをRubyで書いてみた。(その2) - いものやま。
プロトコル
- HLS(m3u8), TCP, UDP, RTMP, SRTP/DTLS/SCTP(WebRTC)
- Real Time Messaging Protocol - Wikipedia
- HTML5 live streaming - Stack Overflow
WebRTC
動画の解析
- 画像解析と音声解析の合わせ技
- メタデータの収集と編集
- OCRで文字認識
- 顔の判定/抽出
- 特徴抽出
やりかた
- メタデータ(日時やGPSデータなど)を処理する場合がある
- Twitterでは画像のGPSデータを安全性のため削除している(ストーカー対策)
- OpenCVのラッパーを使う: JS, Swift, Rubyでもある
- CPU/GPUの負荷や機械学習が必要なケースが多いのでサーバー側で処理するイメージだったが、Snapchatの顔識別などのようにクライアントで処理をするケースもある
- SaaS/API(GCP, AWS, Azure): APIの呼び出し数だけお金を払えば、機械学習済みの画像認識エンジンを利用することができる。GCPのCloud Visionなど高精度でOCRなどが可能。
動画へのコメントのオーバレイ/字幕
- シークバーのタイムラインに対してコメントや字幕を表示する
- ニコニコ動画ではコメントの表示管理
- 字幕の場合は切り替え言語の切り替えもする
- Netflixの場合は映像/音声/字幕を別のサーバーで時間軸で管理している