CGJU
查工具网
2026年7月5日 · 読了時間 3 分

HLS.jsとは

HLS.jsはオープンソースのJavaScriptライブラリで、HLS(HTTP Live Streaming)クライアントを実装したものです。MSE(Media Source Extensions)に対応したブラウザ上でHLSストリーミングを再生できるようになります。Dailymotionによって開発・保守されており、現在最も普及しているWeb向けHLS再生ソリューションの1つです。

HLSをネイティブでサポートするSafariとは異なり、Chrome、Firefox、Edgeなどのブラウザは標準ではHLSフォーマットに対応していません。HLS.jsのようなJavaScriptライブラリを使用して再生機能を実装する必要があります。

HLS.jsの主な特徴

  • 適応ビットレート再生:ネットワーク帯域に応じて自動的に画質を切り替え
  • VODとライブ配信の両方に対応:オンデマンドとライブ配信の両方のストリーミングに対応
  • AES-128暗号化に対応:AES-128で暗号化されたHLSコンテンツも再生可能
  • 字幕に対応:WebVTTとCEA-608/708の字幕フォーマットをサポート
  • 多言語音声トラック:複数の言語の音声トラックを切り替え可能
  • フォールトトレラント機構:ネットワークの変動時に自動でリトライ・復旧

HLS.jsの動作原理

HLS.jsの動作原理は、以下のいくつかのコアステップに分けられます:

1. M3U8プレイリストの読み込みと解析

HLS.jsはまずHTTPリクエストでM3U8プレイリストファイルを取得し、その内容を解析します。解析する内容は以下の通りです:

  • マスタープレイリスト(Master Playlist):ビットレートの異なる複数のサブプレイリストを含む
  • メディアプレイリスト(Media Playlist):具体的なTSセグメントのアドレスと長さを含む
  • 暗号化情報:コンテンツが暗号化されている場合、暗号化方式と鍵のアドレスを解析

2. セグメントの読み込みとバッファ管理

プレイリストの解析後、HLS.jsは再生順に従ってTSセグメントを順次ダウンロードし、MediaSourceのSourceBufferにデータを追加していきます。同時にバッファキューを管理し、再生の連続性を確保します。

3. 適応ビットレート切り替え

HLS.jsはネットワーク帯域とバッファの状態をリアルタイムで監視し、あらかじめ設定されたアルゴリズムに基づいて最適なビットレートの動画ストリームに自動的に切り替えます。これにより、再生の滑らかさと画質のバランスを保ちます。

クイックスタート:基本コード例

ここでは最もシンプルなHLS.jsの使用例を紹介します。数行のコードでWebページ上でHLS動画ストリームを再生できるようになります。

HLS.jsの導入

最も簡単な方法は、CDNからHLS.jsを直接読み込むことです:

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>

HTML構造

ページにvideo要素を追加します:

<video id="video" controls playsinline></video>

JavaScriptによる初期化

以下のコードでHLS.jsを初期化し、動画を読み込みます:

const video = document.getElementById('video');
const videoUrl = 'https://example.com/stream.m3u8';

if (Hls.isSupported()) {
    const hls = new Hls();
    hls.loadSource(videoUrl);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED, function() {
        video.play();
    });
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
    video.src = videoUrl;
    video.addEventListener('loadedmetadata', function() {
        video.play();
    });
}

よく使う設定オプション

HLS.jsには豊富な設定オプションが用意されており、実際のニーズに応じて調整できます:

1. 低遅延モードを有効にする

ライブ配信シーンに適しており、再生遅延を効果的に削減できます:

const hls = new Hls({
    lowLatencyMode: true,
    liveSyncDurationCount: 3
});

2. 初期画質を設定する

デフォルトで再生する画質レベルを指定します:

const hls = new Hls({
    startLevel: 2, // 3番目の画質レベルから開始
    autoStartLoad: true
});

3. 最大バッファ長を設定する

バッファサイズを調整して、メモリ使用量と再生の安定性のバランスを取ります:

const hls = new Hls({
    maxBufferLength: 30, // 最大バッファ30秒
    maxMaxBufferLength: 60 // 最大バッファ60秒
});

事件监听与错误处理

HLS.js 提供了完善的事件系统,可以监听各种状态变化と错误:

よく使う事件

  • MANIFEST_PARSED:M3U8 再生列表解析完成
  • LEVEL_SWITCHED:清晰度级别发生切换
  • BUFFER_APPENDED:数据已追加到缓冲区
  • ERROR:发生错误
  • FRAG_LOADED:分片加载完成

错误处理示例

hls.on(Hls.Events.ERROR, function(event, data) {
    if (data.fatal) {
        switch (data.type) {
            case Hls.ErrorTypes.NETWORK_ERROR:
                console.log('网络错误,尝试恢复...');
                hls.startLoad();
                break;
            case Hls.ErrorTypes.MEDIA_ERROR:
                console.log('媒体错误,尝试恢复...');
                hls.recoverMediaError();
                break;
            default:
                console.log('无法恢复的错误');
                hls.destroy();
                break;
        }
    }
});

HLS.js 的优デメリット

优点

  • 开源無料:基于 Apache-2.0 プロトコル开源,可以無料商用
  • 社区活跃:由 Dailymotion 维护,GitHub 上有大量贡献者
  • 機能完善:対応 HLS 的大部分特性,包括自适应ビットレート、暗号化、字幕等
  • パフォーマンス优秀:使用 Web Worker 处理数据解析,不阻塞主线程
  • 互換性性好:対応所有対応 MSE 的现代ブラウザ

デメリット

  • 不対応原生 HLS ブラウザ:Safari 等原生対応 HLS 的ブラウザ不需要使用 HLS.js
  • 需要 MSE 対応:部分老旧ブラウザまたは移动端ブラウザ可能不対応 MSE
  • 学习成本:要精通所有配置と API 需要一定的学习成本

最佳实践建议

1. 正确的销毁时机

在页面卸载または切换動画时,记得调用 destroy 方法释放资源:

window.addEventListener('beforeunload', function() {
    if (hls) {
        hls.destroy();
    }
});

2. 处理 CORS 跨域问题

确保 M3U8 と TS 文件的サーバー配置了正确的 CORS 头,否则 HLS.js 无法加载资源。需要允许以下响应头:

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Credentials

3. 合理设置初始品質

为了提升用户体验,建议根据用户的网络环境设置合理的初始清晰度,または者让用户手动选择。

4. 监听错误并优雅降级

生产环境中一定要监听 ERROR 事件,并在必要时进行错误恢复または降级处理,给用户友好的提示。

まとめ

HLS.js 是一个機能强大、社区活跃的开源 HLS 再生库,是在网页中实现 HLS ストリーミング再生的首选ソリューション。通过本文的紹介,相信你已经对 HLS.js 的基本使用有了全面的了解。

手軽に HLS 再生機能,可以直接使用当サイトの M3U8 オンラインプレーヤー,无需编写任何代码即可在ブラウザ中再生 HLS 動画流。

関連記事

その他の役立つ記事とツール

想立即体验HLS再生?

使用当サイトの無料M3U8オンラインプレーヤー,无需编写代码,直接在ブラウザ中再生HLS動画流

今すぐ体験 ➡