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

経営する企業のブログページで掲載したオリジナル記事 ("ビデオストリーミング技術の紹介") の転載です。 ビデオストリーミングの歴史 インターネットの普及に伴い、様々なシナリオで色々なビジネスに、デジタルビデオがあたりまえのように利用されていますが、デジタルビデオ技術はこれまでに様々な歴史を紡いできています。 2000年代から様々なビデオストリーミング技術が各社で開発され、色々な技術が世の中に溢れていきました。独自のプロトコルで独自のサーバー・クライアント技術を使ったストリーミング技術が開発され、それぞれの技術に精通する必要があり大変な時期でした。これらの技術では、再生するビデオやオーディオの品質はクライアントとサーバー間の通信で制御することもできましたが、ルーター製品やネットワークアドレス変換 (NAT) などのネットワーク環境によって、通信ができないなどの制限もありました。 と同時に、加速度的に普及する HTTP 技術とビデオストリーミングの親和性のために、2000年代後半に、HTTP ベースのアダプティブストリーミングのビデオ配信技術が各社で開発されました。ストリーミングの世界は、アダプティブストリーミングにより、これまでのビデオストリーミング技術がアップデートされました。単純な HTTP ダウンロードでビデオをファイルを再生する際には、たとえビデオをダウンロードしながら再生できたとしても、ビデオのダウンロード速度(ネットワークのバンド幅)とビデオの品質の関係が問題になってきます。 つまり、ビデオの品質(ビデオの1秒間のデータ容量)がダウンロード速度(1秒間にダウンロードできる容量)よりも遅い(大きい)場合は、ビデオの再生が追いつかず、ビデオが途中で止まってしまうということになります。 この問題を解決しようとするのが、アダプティブストリーミングという技術です。 アダプティブストリーミングでは、ビデオを複数のセグメントに分割し、分割したビデオごとにダウンロードして再生することを基本としました。1つのビデオのセグメントは、例えば、2~10秒という長さのビデオで、これらの分割したビデオセグメント群を様々な品質(ビットレート)と解像度でそれぞれ準備することで、ビデオを再生するプレイヤーは、ビデオを配信する Web サーバーとの通信の速度や状態によって、どの品質と解像度のビデオセグメントを再生するか選ぶことができるようになります。 この技術によって、再生するクライアントは、接続しているネットワークのバンド幅に合わせて、再生するビデオの品質をスイッチしながら再生することができ、途中でビデオが止まることがなく再生することができるようになります。 また、HTTP ベースのストリーミングであるため、HTTP キャッシングが可能な CDN (コンテンツ デリバリ ネットワーク) を使って、ストリーミングサーバーの負荷を最小限にしながら、大規模なエンドユーザー向けにビデオストリーミングを配信することができます。 アダプティブストリーミング アダプティブストリーミングとして、当時、3つのストリーミング技術が開発され、それぞれの技術では、ライブ、ビデオオンデマンドのどちらのビデオ配信シナリオをサポートし、専用のクライアントプレイヤーがそれぞれ用意されました。 Adobe HTTP Dynamic Streaming (HDS) Apple HTTP Live Streaming (HLS) Microsoft Smooth Streaming 当時の HTML 技術には、<video> タグや <audio> タグは定義されておらず、リッチメディアと呼ばれるビデオなどのメディアは、ブラウザーのプラグインを使って実装されたプレイヤーで再生されていました。このため、多くのユーザーに向けて配信するためには、コンテンツの配信側は、それぞれのプラグインに対応する3つのストリーミング方式に対応する必要がありました。 モバイルデバイスの普及、マルチデバイス化とともに、ビデオストリーミング技術の標準化やクライアントの標準化が課題となり、様々な企業がビデオストリーミングの技術の発展に寄与してきました。 ビデオストリーミング技術の標準化においては、MPEG-DASH (Dynamic Adaptive Streaming over HTTP) は、2012 年に最初に国際標準として制定されたアダプティブストリーミング技術で、Microsoft や Adobe は、これまで培った技術と経験をベースに、この MPEG-DASH の技術の開発に貢献しました。また、Akamai, Ericsson, Microsoft, Netflix, Qualcomm, Samsung が設立メンバーとして設立した DASH Industry Forumという団体において、標準化された MPEG-DASH 技術に関するマーケットで実際の互換性問題の解決や推奨事項のガイドライン化などを行いながら、技術の普及につとめています。...

2022/10/24 · @shigeyf

Wowza Streaming Engine での HLS ストリーミング

はじめに この記事では、Wowza Streaming Engine での HLS 方式でのストリーミングに関する 技術的に詳細な設定・カスタマイズの方法について触れます。 HLS プレイリスト (マニフェスト) について HLS プレイリストには、EXT-X-VERSION タグと呼ばれる Apple HLS (HTTP Live Streaming) のプレイリスト互換性バージョンを示すタグが含まれています。 Wowza Streaming Engine の HTTPStreamer の既定の設定では、Apple HLS 互換性バージョン 3 のプレイリストを生成します。 #EXT-X-VERSION:3 VOD またはライブアプリケーションの Application.xml (/usr/local/WowzaStreamingEngine/conf/[アプリ名]/Application.xml) 内の 以下のパラメーターで HLS プレイリストの互換性バージョンを制御することができます。 Wowza Streaming Engine では、バージョン 3 から 6 までをサポートしています。 項目 内容 XML パス /Root/Application/HTTPStreamer プロパティ名 (Name) cupertinoExtXVersion プロパティのタイプ (Type) Integer プロパティの値 (Value) の説明 プレイリストの互換性バージョンを指定する (既定値: 3) Wowza Streaming Engine では、指定された EXT-X-VERSION (プレイリストの互換性バージョン) に基づいてプレイリスト機能を有効または無効にすることができます。...

2020/12/10 · @shigeyf

Wowza Streaming Engine での MPEG-DASH ストリーミング

はじめに この記事では、Wowza Streaming Engine での MPEG-DASH 方式でのストリーミングに関する 技術的に詳細な設定・カスタマイズの方法について触れます。 MPEG-DASH MPD マニフェストについて MPEG-DASH サーバーは、メディア プレゼンテーション記述 (MPD) マニフェスト ファイルで、 利用可能なメディア セグメント URL のリストをプレーヤーに提供します。 その後、プレイヤーは、中断のない再生を行うために、必要に応じてメディア セグメントを順次要求します。 MPD ファイル内でこのセグメント URL のリストの識別方法を定義する方式をセグメントアドレス方式とは呼び、 以下のセグメントアドレス方式があります。 セグメント リスト方式 利用可能なすべてのセグメントについて、セグメント URL の完全なリストを提供する方式です セグメント テンプレート (時刻ベース) 方式 プレイヤーがセグメント URL リストを作成できるようにするための URL テンプレートを提供する方式です セグメント URL にはセグメントごとの開始時刻が含まれます セグメント テンプレート (セグメント番号ベース) 方式 プレイヤーがセグメント URL リストを作成できるようにするための URL テンプレートを提供する方式です セグメント URL にはセグメントごとのセグメントの番号 (インデックス番号など) が含まます セグメント ベース (BaseURL) 方式 すべてのセグメントが単一の URL (BaseURL) で識別されるセグメント分割を行わない方式で、セグメントがバイトレンジの HTTP リクエストを通じて取得する方式です Wowza Streaming Engine の MPEG-DASH サポートでは、セグメントベース方式以外のセグメントアドレス方式の MPD 形式をサポートしていて、 プレイヤーは以下の URL フォーマット指定で必要なマニフェスト形式を指定できます。...

2020/11/30 · @shigeyf

Wowza Streaming Engine を使ったライブストリーミング (3)

はじめに 前回の記事では FFmpeg で生成したマルチビットレートの RTMP ライブストリーム (マルチストリーム) をアップロードして、 Wowza Streaming Engine 経由でストリーミング配信を行うための設定を紹介しました。 この記事では、RTMP のシングルビットレートのライブソースを Wowza Streaming Engine に入力し、 Wowza Streaming Engine のトランスコーディング機能を使ってマルチビットレートのライブストリームを生成して、 アダプティブストリーミングのライブストリーミング配信を行うための方法を紹介します。 ライブソースのオリジンからマルチビットレートのストリームを Wowza Streaming Engine へ入力する際に十分なネットワーク帯域が確保できない場合、 一番画質のよいライブソースのみを Wowza Streaming Engine へ入力し、Wowza Streaming Engine でマルチビットレートの生成を行って、 アダプティブストリーミングのライブストリーミング配信を実現することができます。 作業の手順は、以下の通りです。 ライブソースストリームの入力セキュリティの設定 (省略) FFmpeg によるビデオファイルを使った RTMP ライブソースの入力 (省略) ライブトランスコーダーの設定 ライブストリーミング再生のテスト Big Buck Bunny サイト のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。 配信で利用する ビデオファイル はこちらを利用しました。 手順1: ライブソースの入力セキュリティの設定 (省略) 前回の記事で作成した設定を利用するため、ここでは省略します。 手順の詳細は、前回の記事を参照します。 手順2: ライブトランスコーダーの設定 Wowza Streaming Engine のライブトランスコーダーを設定すると、入力したライブソースのトランスコードを行うことができます。 ライブトランスコーダーを設定するには、以下の手順で行います。 ここでは既存のトランスコーダーテンプレートを利用します。 Wowza Streaming Engine Manager 管理 UI にログインし、上部メニューバーの [Application] をクリックします。...

2020/11/20 · @shigeyf

Wowza Streaming Engine を使ったライブストリーミング (2)

はじめに 前回の記事では FFmpeg で生成した RTMP ライブストリーム (シングルストリーム) をアップロードして、 Wowza Streaming Engine 経由でストリーミング配信を行うための設定を紹介しました。 この記事では、アダプティブストリーミングのライブストリーミング配信を行うための方法を紹介します。 作業の手順は、以下の通りです。 ライブソースストリームの入力セキュリティの設定 (省略) FFmpeg によるビデオファイルを使った RTMP ライブソースの入力 SMIL ファイルの作成 ライブストリーミング再生のテスト Big Buck Bunny サイト のビデオコンテンツをサンプルとして使うストリーミングコンテンツとします。 配信で利用する ビデオファイル はこちらを利用しました。 手順1: ライブソースの入力セキュリティの設定 (省略) 前回の記事で作成した設定を利用するため、ここでは省略します。 手順の詳細は、前回の記事を参照します。 手順2: FFmpeg によるビデオファイルを使ったライブソースの入力 以下のコマンドを実行し、ビデオファイルとスクリプトファイルをダウンロードします。 スクリプトファイルは Gist で公開しているシェルスクリプト を利用します。 cd ~/ mkdir videos cd videos curl -O https://download.blender.org/demo/movies/BBB/bbb_sunflower_1080p_30fps_normal.mp4 curl -LO https://gist.github.com/liveinstantly/7969cc44d14e96c98434cf4e8744a15f/raw/88d2a83c77e01ff32262db04f739e5755efbd6a5/ffmpeg_filelive_abr_transcode.sh chmod +x ffmpeg_filelive_abr_transcode.sh curl -O https://wowzademostorage1.blob.core.windows.net/transcoding/liveencode_spec_sample.txt 以下のコマンドを実行して、ビデオのトランスコードとライブソースの入力を行います。 このスクリプトでは、ビデオファイルから複数のビットレートのライブストリームを生成し、Wowza Streaming Engine に入力します。 生成する複数のライブストリームの詳細は liveencode_spec_sample.txt ファイルで定義します。...

2020/11/10 · @shigeyf