見出し画像

WebRTC + HLS のライブストリーミングについての学習メモ

WebRTC + HLS のライブストリーミング界隈について学習しようと思ったので、調べたことのメモです。

まずは主要(の中の主要)キーワード

RTMP (wikipediaより)

Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、Adobe Flash プレーヤーとサーバーの間で、音声・動画・データをやりとりするストリーミングのプロトコル。元々は Macromedia が開発していて、Adobe に買収された。

RTMP (RTMFP を除く) は TCP上のプロトコルで、持続的接続を使い、(HTTPとの比較で)低レイテンシ通信を実現する。ストリームをスムーズに配信し、できるだけ多くの情報を送れるようにするために、ストリームをフラグメントに分割し、そのサイズはクライアントとサーバーの間で動的に交渉する。デフォルトのフラグメントサイズは音声は64バイト、動画とその他のデータタイプは128バイトである。

Real Time Media Flow Protocol (RTMFP) は UDP 上で動作するストリーミングプロトコル。ボイスチャット・ビデオチャット用。

ちなみに主要なプレイヤーである Adobe Flash が2020年末でFlashのアップデート及び配布を終了することをアナウンスしていることから RTMP を使った配信は衰退していく可能性があるようです。

WebRTC(wikipediaより)

WebRTC(Web Real-Time Communication)は、ウェブブラウザやモバイルアプリケーションにシンプルなAPI経由でリアルタイム通信(real-time communication; RTC)を提供する自由かつオープンソースのプロジェクトである。ウェブページ内で直接のピア・ツー・ピア通信によって、プラグインのインストールやネイティブアプリのダウンロードをせずに、ウェブブラウザ間のボイスチャット、ビデオチャット、ファイル共有が可能になる。WebRTCはApple、Google、Microsoft、Mozilla、Operaがサポートしており、World Wide Web Consortium(W3C)およびInternet Engineering Task Force(IETF)で標準化が進行中である

・TCP ではなく UDPが採用されている、プロトコルではなく技術
・通信はデフォルトで暗号化(DTLS (データグラム向け TLS))されている
・非常に低遅延(サーバ経由でも200-300ミリ秒程度の遅延)
・大規模配信が苦手
・音声や映像は RTP
・音声は Opus, 映像は VP8 , VP9, H.264など
 (iOS や Android は H.264 はハードウェアアクセラレータが有効になる)
・配信専用のツールが一切不要で、ブラウザからすぐに配信ができる
・対応ブラウザは Firefox , chrome , Safariといった主要ブラウザ
・webrtc.org によってオープンソースでlibwebrtc が公開されている

WebRTCについては voluntasさんの記事がとても勉強になります。

WebRTC コトハジメ
https://gist.github.com/voluntas/67e5a26915751226fdcf

リアルタイム動画配信コトハジメ
※ライブ動画配信と、リアルタイム動画配信の2つに分けての説明がわかりやすかったです
https://gist.github.com/voluntas/076fee77f30a0ca7a9b9

WebRTC の優位性
https://gist.github.com/voluntas/0715fc2ea27a49c2afd2ae80624ba3d2

HLS(HTTP Live Streaming)

・Appleが開発したStreaming Protocol
・一定間隔の「MPEG-2 TS」として細切れにし、暗号化し、小さな連続したファイルを作る
・M3U8形式の「プレイリスト」にファイルの再生順や、暗号化の鍵、コンテンツのバリエーションなどを記載している
・映像は H.264 、音声は AAC 、 MP3 、 AC-3またはEC-3
・配信は HTTP 、故に特定のプロトコルを遮断するネットワークでも、Webブラウジングができるなら、HLS形式の動画の閲覧が可能
・遅延がある
・HTTP(HTTPS) のため CDN の利用により大規模配信も可能
アダプティブビットレートにより視聴環境(デバイスや回線速度など)に合わせて、可能な限り品質高くスムースな再生ができる
・ちなみにiOSへ配信をする場合にはHLSでないとAppleの審査が通らない

従来のストリーミング、HTTPダウンロード、HLSの違いは↓のサイトがわかりやすいと思います。

MPEG-DASH

Youtube Live

YouTubeが2018年3月20日からセットアップが簡単で、エンコーダーを通さずにWebカメラから直接、ライブのストリーミングを開始できるサービスを開始しています。

カメラ配信者側はWebRTCを使うことでブラウザ単体で配信することができ、視聴者側へはMPEG-DASHまたはHLS(HTTP Live Streaming)で配信されています。

ImageFlux Live Streaming

ピクシブとさくらインターネットが2019年2月にリリースした、高品質なライブ配信を手軽に実現するリアルタイム動画変換サービス。
WebRTC と HLS を採用しています。

ImageFlux Live Streaming
https://www.sakura.ad.jp/services/imageflux/livestreaming/

リリース前のUser Meetup #2 でテクノロジーについて公開しています。

その他メモ

・UVC(USB Video Class)UVCカメラからの映像を WebRTC に流せる

ふう、お腹いっぱいです。

この記事が気に入ったらサポートをしてみませんか?