YouTubeは日々広告ブロッカーへの対策を実施しています。新たに、広告をブロックしているユーザーに対して、動画の再生開始時に意図的に遅延を発生させる手法が採用されていることがわかっています。

YouTube’s new anti-adblock measures

https://iter.ca/post/yt-adblock/



YouTubeがランダムなユーザーにテストしているのが「フェイクバッファリング」という手法です。これは、動画の最初のバッファリング(プリロード)が長く続くように見せかける手法です。

このバッファリングは動画冒頭に挿入される広告の再生時間の80%に相当する時間だけ継続します。広告ブロッカーを導入していないユーザーであれば広告を再生している間にバッファリングが終わりますが、広告ブロッカーを導入しているユーザーは広告の代わりにバッファリングの影響を受けることになります。このため、広告ブロッカーを導入しているユーザーだけ「動画の読み込みがしばらく終わらない」と感じるようになります。



技術的には、YouTubeは「InnerTube」という内部APIを使って動画データを取得しますが、このとき実際の動画は「GVS(Google Video Services)」から配信され、動画に加えて遅延命令を受け取っていると説明できます。

当初、YouTubeはGVSにクエリパラメーターを指定して動画の範囲を指定し、GVSはその範囲の動画コンテンツを返すことで動画をストリーミングしていました。しかし、後にYouTubeはSABR(Server Adaptive Bit Rate)というシステムを導入し、この方法を改善しました。SABRがサポートする機能の1つに、サーバーがクライアントに遅延命令を送信し、動画/音声データを送信する代わりに一定時間待ってから再試行するよう指示するものがあります。これにより、フェイクバッファリングが発生しているそうです。

InnerTubeは、最初の動画リクエスト(コンテンツではなく広告用)に対して、広告の再生時間の80%の遅延命令を出しています。例えば、広告が15秒の場合、広告をブロックすると12秒の遅延が発生します。6秒のスキップ不可広告と15秒のスキップ不可広告が同時に表示される場合、遅延は16.8秒になります。

ただし、こうした遅延は広告ブロッカーにフィルターを適用することで一部回避できます。uBlock Originのデフォルトフィルターリストには、開発者のSmitty氏が開発したフェイクバッファリング回避用のフィルターが含まれています。