HLSが何度もバッファリングする原因と、今日使える対処チェックリスト

目次

  1. まず原因を3系統に切り分ける
  2. 手っ取り早い対策は画質の固定
  3. 配信元に原因があるサイン
  4. 403とCORSでつまずくケース
  5. プレイヤー側で緩和する方法
  6. 今日使えるチェックリスト

まず原因を3系統に切り分ける

再生が止まる原因は、大まかに「自分の回線」「配信元の設備」「設定・制限」の3系統に分かれます。切り分けの一番簡単な方法は、同じURLを別のネットワーク(モバイル回線、別のWi-Fiなど)で開いてみることです。別環境で滑らかに再生されるなら回線側、そこでも止まるなら配信元か制限の問題です。ここを先に確定させれば、あとの対策は半分に絞られます。

手っ取り早い対策は画質の固定

HLSのABRは通常メリットですが、帯域が境界線上をふらつく環境では、高画質⇄低画質の切替が連発してかえって止まりやすくなります。プレイヤーの設定で画質を一つ下のレベルに手動固定し、様子を見てください。多くのカクつきはこれだけで収まります。映像ソースが1080p固定の高ビットレート配信なら、720pへの一段下げで必要帯域は半分近くまで下がります。

配信元に原因があるサイン

次の症状が重なる場合は、配信側の問題の可能性が高いです。

配信者側なら、セグメント長を見直すのが定石です。例えばFFmpegでパッケージングする場合、-hls_timeを短めにするとABRの反応とバッファ回復が速くなります。

ffmpeg -re -i input.mp4 -c:v libx264 -b:v 1500k -c:a aac \
  -hls_time 4 -hls_list_size 0 playlist.m3u8

403とCORSでつまずくケース

セグメントの取得自体が失敗している場合は、技術的な帯域不足ではなく制限です。403が返るならホットリンク防止やReferer制限、コンソールにCORSの警告が出るならAccess-Control-Allow-Originの不在を疑ってください。ブラウザで動くプレイヤーはこの制約を超えられないため、認証付きのURLや許可済みのソースに差し替えるのが正攻法です。

プレイヤー側で緩和する方法

視聴環境側でできる工夫もあります。ブラウザなら余計なタブや同期アプリを閉じて帯域を空け、VPN利用中は経路を変えてみる。デスクトッププレイヤーならネットワークキャッシュを1〜3秒程度に広げることで、瞬間的な遅延を吸収できます。自前の実装では、ABRの判定を保守的にしてバッファ秒数を厚めに取る構成が定番です。

今日使えるチェックリスト

  1. 別ネットワークで同じURLを再生し、回線か配信元かを確定させる。
  2. 画質を一段下げて固定し、ABRの往復切替を止める。
  3. ダウンロードやクラウド同期など、帯域を食う処理を止める。
  4. 403やCORSのエラーが出ていないか、コンソールで確認する。
  5. 改善しなければ、オフライン視聴用に変換して保存する選択もあり。M3U8→MP4変換ツールが使えます。

詳しい切り分け手順はチュートリアルのほかの記事も参考にしてください。