ストリーミング通信プロトコル
HTTPライブストリーミング(HLSとも呼ばれる)は、Apple社が開発し、2009年にリリースされたHTTPベースのアダプティブビットレートストリーミング通信プロトコルです。このプロトコルは、メディアプレーヤー、ウェブブラウザ、モバイルデバイス、ストリーミングメディアサーバーなどで広くサポートされています。2022年現在、毎年実施されるビデオ業界調査では、HLSが最も人気のあるストリーミング形式であることが一貫して示されています。[2][アップデート]
HLSは、ストリーム全体を複数の小さなHTTPベースのファイルダウンロードに分割し、各ファイルダウンロードが、潜在的に無制限のトランスポートストリーム全体から1つの短いチャンクをダウンロードするという点で、MPEG-DASHに似ています。異なるビットレートでエンコードされた利用可能なストリームのリストは、拡張M3Uプレイリストを使用してクライアントに送信されます。[3]
HTTPライブストリーミングは、標準HTTPトランザクションに基づいているため、 RTPなどのUDPベースのプロトコルとは異なり、標準HTTPトラフィックを通過させるあらゆるファイアウォールやプロキシサーバーを通過できます。これにより、従来のHTTPサーバーからコンテンツを提供したり、広く利用可能なHTTPベースのコンテンツ配信ネットワークを介して配信したりすることも可能になります。[4] [5] [6]この標準規格には、標準的な暗号化メカニズム[7]とHTTPSを使用した安全な鍵配布も含まれており、これらを組み合わせることでシンプルなDRMシステムが実現されます。プロトコルの最新バージョンでは、トリックモードの早送り・巻き戻しや字幕の統合も提供されています。
AppleはHTTPライブストリーミングをインターネットドラフト(個別提出)として文書化しました。これは、RFC( Request for Comments )として公開するプロセスの第一段階です。2015年12月現在、この文書の著者はRFC Independent Stream Editor(ISE)に対し、 IETFのコンセンサスプロセス外で情報提供目的(非標準)のRFCとして公開するよう要請しています。 [8]
2017年8月には、プロトコルのバージョン7を記述したRFC 8216が公開されました。[9]
建築
HTTPライブストリーミングは、HTTPライブストリーミング(HLS)をサポートする従来のウェブサーバーを使用してオーディオビジュアルコンテンツを配信します。コンテンツを適切なフォーマット(コーデック)に調整し、ネットワーク経由でリアルタイムに送信するには、 OBSなどの特定のソフトウェアが必要です。サービスのアーキテクチャは以下で構成されます。
- サーバ
- 入力ビデオフローを配信に適した形式でコード化・カプセル化します。その後、複数のファイルに分割して配信準備を整えます。入力プロセスでは、ビデオはエンコードおよび分割され、ビデオフラグメントとインデックスファイルが生成されます。
- 卸売業者
- 標準の Web サーバーによって形成され、クライアントからの要求を受け入れ、ストリーミングに必要なすべてのリソース (.m3u8 プレイリスト ファイルと .ts セグメント ファイル) を配信します。
- クライアント
- すべてのファイルとリソースをリクエストしてダウンロードし、それらを組み立てて、ユーザーに連続した動画として表示します。クライアントソフトウェアは、まずURL経由でインデックスファイルをダウンロードし、次に利用可能な複数のメディアファイルをダウンロードします。再生ソフトウェアは、シーケンスを組み立てて、ユーザーに連続して表示できるようにします。
特徴
HTTPライブストリーミングは、信頼性の低いネットワーク状況でも、ユーザーに見える再生の遅延を発生させることなく、プレーヤーが適応できるメカニズムを提供します。例えば、信頼性の低い無線ネットワークでは、HLSを利用することでプレーヤーは低品質のビデオを使用できるため、帯域幅の使用量を削減できます。HLSビデオは、同じビデオを複数のサーバーで再生することで高可用性を実現できます。これにより、サーバーの1つに障害が発生した場合でも、プレーヤーはシームレスに切り替えることができます。
適応性
プレーヤーがネットワーク帯域幅に適応できるように、元のビデオは複数の異なる品質レベルでエンコードされます。サーバーは、これらのエンコード(バリアントストリーム)のインデックス(マスタープレイリスト)を提供します。プレーヤーは再生中にこれらのバリアントストリームを選択でき、ネットワーク状況の変化に応じてシームレスに切り替えることができます。
断片化されたMP4の使用
Appleは2016年のWWDCで、フラグメントMP4 (fMP4)ファイル用のバイト範囲アドレス指定機能の搭載を発表しました[11] 。これにより、 MPEG-2トランスポートストリームに多重化することなく、HLS経由でコンテンツを再生できるようになります。業界では、これをHLSとMPEG-DASHの互換性に向けた一歩と捉えました[12] [13]。
低遅延HLS
Low Latency の名前と対応する頭字語を持つ、無関係な HLS 拡張機能が 2 つ存在します。
- AppleがWWDC2019で発表したApple Low Latency HLS(ALHLS)[14]
- コミュニティLHLS(LHLS)はAppleの発表より前に存在し、よりシンプルであるとされている[15]
このセクションの残りの部分では、AppleのALHLSについて説明します。ALHLSは、ライブストリームの再生を開始する時間を短縮し、ライブストリーミングイベント中にその時間を維持することで、HLS経由でストリーミングする際のグラスツーグラスの遅延を削減します。MPEG-CMAFのfMP4と同様に、部分的なメディアセグメントファイルをミックスに追加することで機能します。CMAFとは異なり、ALHLSは部分的なMPEG-2 TSトランスポートファイルもサポートしています。部分的なメディアセグメントは、標準セグメント(例:6秒)を1秒未満(例:200ミリ秒)の等しいセグメントに分割したものです。標準の最初のセグメントは、一連の部分的なセグメントに置き換えられます。後続のセグメントは標準サイズです。[16]
セグメントをプレイリストと一緒にプッシュするにはHTTP/2が必要であり、繰り返しHTTP/TCP接続を確立するためのオーバーヘッドを削減します。
その他の機能は次のとおりです:
- プレイリスト デルタ更新: プレイリスト間で変更された内容のみを送信します。これは通常、単一の MTU に収まるため、大規模な DVR ウィンドウの場合、かなり大きくなる可能性があるプレイリストをより効率的に読み込むことができます。
- プレイリストの再読み込みのブロック: ライブ メディア プレイリストを要求するときに、最初のセグメントも準備できるまで待機し、両方を同時に返します (追加の HTTP/TCP 要求を節約)
- レンディションレポート: 他のメディアレンディションにメタデータを追加して、ABR間の切り替えを高速化します。
- 新しいタグが追加されました: EXT-X-SERVER-CONTROL / EXT-X-PART / EXT-X-SKIP / EXT-X-RENDITION-REPORT
- URL QUERY_STRING ?_HLSコールバックが追加されました
Appleは新しいツールも追加しました。tsrecompressorは、オーディオとビデオの連続した低遅延ストリームを生成・エンコードします。mediastreamsegmenterツールの低遅延バージョンが利用可能になりました。これはHLSセグメンターで、tsrecompressorからUDP/MPEG-TSストリームを受け取り、上記の新しいタグを含むメディアプレイリストを生成します。
低遅延HLSのサポートは、tvOS 13ベータ版とiOS & iPadOS 14で利用できます。[17]
2020年4月30日、AppleはメインHLS仕様の第2版に低遅延仕様を追加しました。[18]
ダイナミック広告挿入
HLSでは、SCTE-35仕様に基づくスプライス情報を使用することで、動的な広告挿入がサポートされています。SCTE-35スプライスメッセージは、EXT-X-DATERANGEタグを使用してメディアプレイリストファイルに挿入されます。各SCTE-35 splice_info_section()は、SCTE35-CMD属性を持つEXT-X-DATERANGEタグで表されます。splice_insert()コマンドによって通知されるSCTE-35スプライスアウト/インペアは、同じID属性を持つ1つ以上のEXT-X-DATERANGEタグで表されます。SCTE-35スプライスアウトコマンドにはSCTE35-OUT属性が、スプライスインコマンドにはSCTE35-IN属性が必要です。
SCTE35-OUT属性とSCTE35-IN属性を含む2つのEXT-X-DATERANGEタグの間には、メディアセグメントURIのシーケンスが存在する場合があります。これらのメディアセグメントは通常、ローカル広告またはカスタマイズされた広告に置き換えることができる広告プログラムを表します。広告の置き換えでは、メディアファイルの置き換えは不要で、プレイリスト内のURIを別の広告プログラムを指すように変更するだけで済みます。広告の置き換えは、オリジンサーバーまたはクライアントのメディア再生デバイスで実行できます。
サーバーの実装
HTTP ライブ ストリーミングをサポートする注目すべきサーバー実装には次のようなものがあります。
使用法
- GoogleはAndroid 3.0(Honeycomb)でHTTPライブストリーミングのサポートを追加しました。 [25]
- HPはwebOS 3.0.5でHTTPライブストリーミングのサポートを追加しました。[26]
- マイクロソフトは2015年にWindows 10のEdgeHTMLレンダリングエンジンにHTTPライブストリーミングのサポートを追加しました。[27]
- マイクロソフトはIIS Media Services 4.0にHTTPライブストリーミングのサポートを追加しました。[28]
- Yospace は、Yospace HLS Player および Flash SDK バージョン 1.0 に HTTP ライブ ストリーミングのサポートを追加しました。[引用が必要]
- Sling MediaはSlingboxとSlingPlayerアプリにHTTPライブストリーミングのサポートを追加しました。 [29]
- 2014/15年にBBCはライブインターネットラジオとオンデマンドオーディオサービス向けにHLS-AACストリームを導入し、iPlayerラジオクライアントでこれらのストリームをサポートしています。[30]
- TwitchはHTTPライブストリーミング(HLS)を使用してライブストリーミングを送信し、多くの同時視聴者にスケーリングします。また、複数のバリエーション(例:1080p、720pなど)もサポートしています。[31]
サポートされているプレーヤーとサーバー
HTTP ライブ ストリーミングは、次のオペレーティング システムでネイティブにサポートされています。
Windows 10 は、Chromium ベースのBlinkブラウザエンジンに移行する前は、Microsoft Edge(現在は Edge Legacy と呼ばれています)で使用されていた独自のブラウザエンジンである EdgeHTMLでHTTP ライブストリーミングをネイティブサポートしていました。Edge Legacy は、Windows 10 バージョン 2004 まで含まれていました。バージョン 20H2 で Edge Chromium に置き換えられました。Windows 11と同時に、Microsoft は HLS をネイティブにサポートする更新されたメディアプレーヤーをリリースしました。
クライアント
サーバー
ライブエンコーダー
VODエンコーダー
参照
参考文献
- ^ Pantos, R.; May, W. (2017). 「プレイリスト」. HTTPライブストリーミング. IETF . p. 9. sec. 4. doi : 10.17487/RFC8216 . ISSN 2070-1721. RFC 8216. 2020年1月15日閲覧。
- ^ Lederer, Stefan. 「2022年ビデオ開発者レポート」(PDF) . Bitmovin . 2023年10月25日閲覧。
- ^ Jordan, Larry (2013年6月10日). 「HTTPライブストリーミングの基礎」. Larry's Blog . Larry Jordan & Associates . 2013年6月18日閲覧。
- ^ 「MPEG-DASH vs. Apple HLS vs. Smooth Streaming vs. Adobe HDS」Bitmovin . 2015年3月29日.
- ^ Chen, Songqing; Shen, Bo; Tan, Wai-tian; Wee, Susie; Zhang, Xiaodong (2006-07-09). 「Webサーバー経由のインターネットストリーミングの事例」. 2006 IEEE International Conference on Multimedia and Expo . pp. 2145– 2148. doi :10.1109/ICME.2006.262660. eISSN 1945-788X. ISBN 9781424403677. ISSN 1945-7871. S2CID 9202042.
- ^ Songqing Chen; Bo Shen; Wee, S.; Xiaodong Zhang (2007-07-23). 「SProxy: インターネットストリーミングをサポートするキャッシュインフラストラクチャ」. IEEE Transactions on Multimedia . 9 (5): 1062– 1072. Bibcode :2007ITMm....9.1062C. CiteSeerX 10.1.1.74.4838 . doi :10.1109/TMM.2007.898943. ISSN 1520-9210. S2CID 870854.
- ^ Pantos, R. (2011年9月30日). 「HTTPライブストリーミング」. インターネットエンジニアリングタスクフォース. 2013年6月18日閲覧。
- ^ 「draft-pantos-http-live-streamingの履歴」 。 2017年4月17日閲覧。
ストリームが「なし」から「ISE」に変更されました。
- ^ Pantos, Roger; May, William (2017年8月). HTTPライブストリーミング. doi : 10.17487/RFC8216 . RFC 8216. 2017年9月5日閲覧。
- ^ Roger, Pantos; William, May. 「HTTPライブストリーミング」. tools.ietf.org . 2017年1月23日閲覧。
- ^ HTTP ライブストリーミングの新機能。Apple Developer。
- ^ Siglin, Tim (2016年6月16日). 「HLSがフラグメント化されたMP4をサポートし、DASHとの互換性を実現」StreamingMedia.com .
- ^ Grandl, Reinhard (2016年6月15日). 「WWDC16: HLSはFragmented MP4をサポートし、MPEG-DASHとの互換性も確保!」Bitmovin.com .
- ^ 低遅延HLS。Apple Developer。
- ^ 「コミュニティが低遅延ライブストリーミングを提供してくれた。そしてAppleがそれを奪った」2019年6月14日。 2019年6月17日閲覧。
- ^ 「Apple開発者向けドキュメント」。developer.apple.com 。 2022年8月10日閲覧。
- ^ Speelmans, Pieter-Jan (2020年12月9日). 「Low-Latency Everywhere: How to implement LL-HLS across platforms」Theo . 2021年3月11日閲覧。
- ^ Pantos, Roger (2020年4月30日). 「HTTP Live Streaming 2nd Edition」. IETF . 2020年4月30日閲覧。
- ^ Guney, Yunus Emre (2024年8月29日). 「ストリーミングを向上:Ant Media ServerによるLL-HLSマジック - Ant Media Server」. antmedia.io . 2024年12月6日閲覧。
- ^ 「ビデオCDN | ビデオストリーミング | ストリーム配信 | Fastly」。www.fastly.com . 2020年10月1日閲覧。
- ^ 「エンコーディングガイド」。Limelight Orchestrate Video Support。Limelight Networks。2013年8月1日時点のオリジナルよりアーカイブ。2013年11月14日閲覧。
- ^ 「モジュール ngx_http_hls_module」. nginx.org .
- ^ "hls-server". npm. 2018年2月12日.
- ^ "Storm Streaming". Storm Streaming . 2021年7月30日閲覧。
出力デバイス: HLS、MPEG-DASH、WebSocket、RTMP
- ^ 「Android 3.0 プラットフォームのハイライト」。Android Developers。2011年1月28日時点のオリジナルよりアーカイブ。
- ^ “webOS 3.0.5 Updates”. 2012年1月22日時点のオリジナルよりアーカイブ。
- ^ 「簡素化されたアダプティブビデオストリーミング:Windows 10でのHLSとDASHのサポートを発表」。Internet Explorerチームブログ。2015年1月29日。
- ^ ab Siglin, Tim (2010年11月1日). 「First Look: Microsoft IIS Media Services 4」. StreamingMedia.com . 2011年7月30日閲覧。
- ^ Chan, David (2010年11月26日). 「iPadアプリレビュー:SlingPlayer」. Blogcritics . 2014年4月15日時点のオリジナルよりアーカイブ。2014年4月14日閲覧。
- ^ スコット、アンドリュー(2015年2月27日)「Audio Factory:概要」インターネットブログ、BBC。
オンデマンドアセットはAAC HLSのみとなります。…現在もメーカーと協議中ですが、多くのメーカーが数週間から数ヶ月以内に、320 kb/sのHLS AACストリーム全57種類をユーザーに提供できると確信しています。
- ^ Shen, Yueshi (2017). 「ライブビデオのトランスマックス/トランスコーディング:FFmpeg vs TwitchTranscoder、パート1」
- ^ 「サポートされているメディア形式」。Android Developers。
- ^ 「HTTP ライブ ストリーミング (HLS) | 使用できますか...HTML5、CSS3 などのテーブルをサポートします」。caniuse.com。
- ^ 「Android版Firefox 50.0、新機能、アップデート、修正点をすべて見る」Mozilla。
- ^ Giles, Ralph; Smole, Martin (2017年11月28日). 「Firefox での AV1 ビデオの DASH 再生」. Mozilla Hacks – ウェブ開発者ブログ.
- ^ 「Android版Firefoxベータ59.0beta、新機能、アップデート、修正点をすべてご覧ください」Mozilla。
- ^ Slivka, Eric (2010年11月15日). 「iTunes 10.1で『iTunes Live Stream』サービスのヒントが見つかる」. MacRumors .
- ^ "#2943 (クライアントとしてのHTTPライブストリーミングのサポート)". VLCバグトラッカー. 2009年7月9日.
- ^ 「VLCプレーヤーでHLSストリーミングビデオを再生する - The VideoLAN Forums」。forum.videolan.org。
- ^ 「Windows 8 - HTTP ライブストリーミング」。www.3ivx.com。
- ^ 「3ivx - Xbox Live 開発者パートナー プログラム - コンポーネント プロバイダー」。www.3ivx.com。
- ^ NV、THEO Technologies。「HTML5ビデオプレーヤー - THEOplayer」。www.theoplayer.com。
- ^ Player、Radiant Media。「バージョン履歴 - Radiant Media Player」www.radiantmediaplayer.com。
- ^ 「dailymotion – Medium」. Medium .
- ^ “hls.js デモページ”. 2015年11月20日時点のオリジナルよりアーカイブ。
- ^ "Orange-OpenSource/hasplayer.js". GitHub .
- ^ 「Spark」. Spark .
- ^ "google/shaka-player". GitHub .
- ^ 「Shaka Player デモ」. shaka-player-demo.appspot.com .
- ^ 「Fluid Player - HTML5 ビデオ プレーヤー」。www.fluidplayer.com。
- ^ 「Fluid Player ドキュメント」. docs.fluidplayer.com .
- ^ "fluid-player/fluid-player". GitHub .
- ^ 「QMPlay2 - Qt Media Player 2」。2023年10月22日 – GitHub経由。
- ^ "marakew/AvProxy". GitHub .
- ^ Ozer, Jan (2015). 「レビュー:Bitmovinのクラウドビデオエンコーディングサービス、Bitcodin」www.StreamingMediaGlobal.com .
- ^ 「HLSビデオの配信 - Brightcove Learning」。support.brightcove.com。
- ^ Guney, Yunus Emre (2024年8月29日). 「ストリーミングを向上:Ant Media ServerによるLL-HLSマジック - Ant Media Server」. antmedia.io . 2024年12月6日閲覧。
- ^ 「MediaGoom。必須のウェブストリーミング」。