ビデオストリーミング技術の紹介

> 経営する企業のブログページで掲載したオリジナル記事 ("[ビデオストリーミング技術の紹介](https://www.liveinstantly.jp/resources/blog/video-streaming-introduction/
)") の転載です。

## ビデオストリーミングの歴史

インターネットの普及に伴い、様々なシナリオで色々なビジネスに、デジタルビデオがあたりまえのように利用されていますが、デジタルビデオ技術はこれまでに様々な歴史を紡いできています。

2000年代から様々なビデオストリーミング技術が各社で開発され、色々な技術が世の中に溢れていきました。独自のプロトコルで独自のサーバー・クライアント技術を使ったストリーミング技術が開発され、それぞれの技術に精通する必要があり大変な時期でした。これらの技術では、再生するビデオやオーディオの品質はクライアントとサーバー間の通信で制御することもできましたが、ルーター製品やネットワークアドレス変換 (NAT) などのネットワーク環境によって、通信ができないなどの制限もありました。

と同時に、加速度的に普及する HTTP 技術とビデオストリーミングの親和性のために、2000年代後半に、HTTP ベースのアダプティブストリーミングのビデオ配信技術が各社で開発されました。ストリーミングの世界は、アダプティブストリーミングにより、これまでのビデオストリーミング技術がアップデートされました。単純な HTTP ダウンロードでビデオをファイルを再生する際には、たとえビデオをダウンロードしながら再生できたとしても、ビデオのダウンロード速度（ネットワークのバンド幅）とビデオの品質の関係が問題になってきます。

> つまり、ビデオの品質（ビデオの1秒間のデータ容量）がダウンロード速度（1秒間にダウンロードできる容量）よりも遅い（大きい）場合は、ビデオの再生が追いつかず、ビデオが途中で止まってしまうということになります。

この問題を解決しようとするのが、アダプティブストリーミングという技術です。

アダプティブストリーミングでは、ビデオを複数のセグメントに分割し、分割したビデオごとにダウンロードして再生することを基本としました。1つのビデオのセグメントは、例えば、2~10秒という長さのビデオで、これらの分割したビデオセグメント群を様々な品質（ビットレート）と解像度でそれぞれ準備することで、ビデオを再生するプレイヤーは、ビデオを配信する Web サーバーとの通信の速度や状態によって、どの品質と解像度のビデオセグメントを再生するか選ぶことができるようになります。

> この技術によって、再生するクライアントは、接続しているネットワークのバンド幅に合わせて、再生するビデオの品質をスイッチしながら再生することができ、途中でビデオが止まることがなく再生することができるようになります。

![Adaptive Streaming 技術の概要](https://shigeyf.dev/posts/_streaming/video-streaming-introduction/video-tech-adaptive-streaming-ja.jpg)

また、HTTP ベースのストリーミングであるため、HTTP キャッシングが可能な CDN (コンテンツ デリバリ ネットワーク) を使って、ストリーミングサーバーの負荷を最小限にしながら、大規模なエンドユーザー向けにビデオストリーミングを配信することができます。

## アダプティブストリーミング

アダプティブストリーミングとして、当時、3つのストリーミング技術が開発され、それぞれの技術では、ライブ、ビデオオンデマンドのどちらのビデオ配信シナリオをサポートし、専用のクライアントプレイヤーがそれぞれ用意されました。

* Adobe HTTP Dynamic Streaming (HDS)
* Apple HTTP Live Streaming (HLS)
* Microsoft Smooth Streaming

当時の HTML 技術には、&lt;video&gt; タグや &lt;audio&gt; タグは定義されておらず、リッチメディアと呼ばれるビデオなどのメディアは、ブラウザーのプラグインを使って実装されたプレイヤーで再生されていました。このため、多くのユーザーに向けて配信するためには、コンテンツの配信側は、それぞれのプラグインに対応する3つのストリーミング方式に対応する必要がありました。

モバイルデバイスの普及、マルチデバイス化とともに、ビデオストリーミング技術の標準化やクライアントの標準化が課題となり、様々な企業がビデオストリーミングの技術の発展に寄与してきました。

ビデオストリーミング技術の標準化においては、MPEG-DASH (Dynamic Adaptive Streaming over HTTP) は、2012 年に最初に国際標準として制定されたアダプティブストリーミング技術で、Microsoft や Adobe は、これまで培った技術と経験をベースに、この MPEG-DASH の技術の開発に貢献しました。また、Akamai, Ericsson, Microsoft, Netflix, Qualcomm, Samsung が設立メンバーとして設立した [DASH Industry Forum](https://dashif.org/)という団体において、標準化された MPEG-DASH 技術に関するマーケットで実際の互換性問題の解決や推奨事項のガイドライン化などを行いながら、技術の普及につとめています。

また、Apple の HLS は、開発当初の2009年から IETF (Internet Engineering Task Force) に RFC ドラフトとして HLS 技術を提出し、最終的に、[2017年に RFC8216 として発表されました](https://mailarchive.ietf.org/arch/msg/ietf-announce/WYDfL1x3FOwz7T6YojPqSnluQWo/)。

クライアントの標準化については、HTML5 に &lt;video&gt; タグ / &lt;audio&gt; タグを導入してプラグインなしでビデオ再生を可能にするだけでなく、セグメント化されたビデオによるアダプティブ ストリーミング技術をサポートするための Media Source Extension (MSE) という技術が、HTML5 のメディア拡張として、Google/Microsoft/Netflix で開発されました。これにより、MPEG-DASH 方式のビデオ再生が JavaScript で実装されたプレイヤーで実現できるようになりました。

## ビデオストリーミング技術の現在

現在では、MPEG-DASH と HLS の2つの技術がアダプティブストリーミング技術として、多くのサービスやアプリケーションで利用されています。

* [ISO/IEC 23009-1](https://www.iso.org/standard/83314.html) - MEPG-DASH (Dynamic Adaptive Streaming over HTTP)
* [IETF RFC 8216](https://www.rfc-editor.org/rfc/rfc8216) HTTP Live Streaming (HLS)

これらのストリーミング技術の再生には、PC (Windows/macOS) では、HTML5 のメディア拡張機能を使った JavaScript のプレイヤーによりブラウザ上で再生することができますが、モバイルデバイスは、Android, iOS のオペレーティングシステムを中心に開発されており、これらのオペレーティングシステムに標準搭載されている OS API・プラットフォーム等を使ったプレイヤーを開発することで再生することができます。

ブラウザ環境向けの JavaScript ベースのプレイヤーとしては、以下のオープンソースのプレイヤーが市場では多く利用されています。

* [dash.js](https://github.com/Dash-Industry-Forum/dash.js/)
* [video.js](https://github.com/videojs/)
* [hls.js](https://github.com/video-dev/hls.js/)

Apple の OS では [AVPlayer](https://developer.apple.com/documentation/avfoundation/avplayer) と呼ばれるプラットフォームを使って開発されていることが多く、HLS のビデオストリームを再生することができます。

Android の OS では Google が開発しているオープンソースの [ExoPlayer](https://exoplayer.dev/) のプレイヤープラットフォームが使われていることが多く、HLS と MPEG-DASH の両方のビデオストリームを再生することができます。

当社が取り扱う THEOplayer の商用プレイヤー SDK は、同様にアプローチで上記に示したプレイヤーの基本機能をベースに、様々な追加の高度な機能を加え、開発が容易な SDK となっています。

## ストリーミングプラットフォーム

上述の通り、ビデオストリーミング技術は、依然として、2つの方式が市場では利用されており、ビデオストリーミングを行うプラットフォームでは一般的に両方の技術方式をサポートする必要がありますが、1つのコンテンツのストリーム入力に対して、リアルタイムで動的に 2つの方式の生成し出力する機能が、いくつかのストリーミングプラットフォームに備わっています。

この動的なストリーム生成は、「動的パッケージング (Just-in-Time Packaging)」と一般的に呼ばれていますが、ライブストリーム、および、オンデマンドストリームの両方に適用できるため、シンプルなワークフローのストリーミング アーキテクチャを構築することができます。

![Wowza Streaming Engine](https://shigeyf.dev/posts/_streaming/video-streaming-introduction/video-tech-wowza-streaming.jpg)

Wowza Media Systems 社の製品も上記に示したストリーミング プラットフォームのひとつで、様々な入力方式のコンテンツをサポートし、MPEG-DASH および HLS のストリームの動的パッケージングを行い、入力されたコンテンツのストリーミング配信をすることができます。

## 最後に

この記事では、ストリーミング技術の歴史と取り巻く技術を簡単にご紹介しました。

デジタルビデオ・オーディオ、および、ストリーミングの技術は年々進化しており、それらの技術やそれを支える製品・ソリューションのキャッチアップが、ビデオストリーミングを使ったシステムやサービスの構築にあたっては重要になっています。それらの技術の仕組みや背景を正しくキャッチアップしながら、様々な新しいソリューションに触れることをお勧めします。