На прошлой неделе некоторые пользователи заметили, что YouTube ограничивает скорость загрузки видео на стороне сервера в качестве контрмеры против блокировщиков рекламы. Как только блокировщик активируется, скорость передачи видеопотока резко падает — зачастую до такой степени, что просмотр становится невозможным.

Впоследствии YouTube отображает предупреждение о проблемах с воспроизведением, которое при детальном рассмотрении указывает на то, что использование блокировщика рекламы может нарушать нормальное воспроизведение видео.

Хотя изначально это было лишь предположением, разработчик @LOOPS опубликовал анализ, подтверждающий, что YouTube действительно экспериментирует с техникой «фиктивной буферизации».

Этот метод сейчас используется в формате A/B-тестирования (*) для сбора откликов от разных групп пользователей, а значит, искусственную задержку замечают не все.

*

Пользователей случайным образом делят на группы. Одной из них показывают версию с «фиктивной буферизацией», другой — стандартную, без задержек. Затем анализируют поведение: остаются ли пользователи на платформе, отключают блокировщик рекламы, жалуются, или покидают сайт.

Фиктивная буферизация — это преднамеренный механизм задержки, разработанный YouTube. При обнаружении блокировщика рекламы — будь то расширение браузера или встроенная функция — платформа искусственно замедляет начальную загрузку видео.

Задержка при воспроизведении не обусловлена техническими затруднениями — она внедрена на уровне платформы. Буферизация происходит исключительно в начале ролика и, как правило, по длительности составляет около 80% от стандартного рекламного блока..

Например, если реклама должна была длиться 15 секунд, задержка составит примерно 12 секунд. В тех случаях, когда 6- и 15-секундные рекламные ролики суммируются, задержка может увеличиться до 16,8 секунды. Это — сознательно реализованная мера сдерживания, нацеленная на пользователей, блокирующих рекламу.

YouTube использует внутренний API и инфраструктуру GVS (Google Video Streaming) для реализации фиктивной буферизации. Когда пользователь запускает видео, серверная часть YouTube передаёт ссылку на видеопоток с инструкциями о задержке, из-за которых плеер делает паузу перед началом воспроизведения.

Удивительно, но в рамках A/B-тестирования Google не делает различий между пользователями с блокировщиками рекламы и без них — с искусственной паузой может столкнуться любой, кто попал в тестовую группу. Однако для тех, кто не блокирует рекламу, она минимальна и практически незаметна. А вот у пользователей с активным блокировщиком задержка значительно длиннее и заметно ухудшает качество просмотра.

Важно отметить, что распространяемые в сети слухи о том, будто YouTube намеренно увеличивает нагрузку на процессор с целью повредить оборудование пользователей, не имеют под собой никаких оснований. Фиктивная буферизация реализуется на уровне плеера и не требует дополнительной нагрузки на ЦП.

Техническое сообщество обнаружило способы обхода фиктивной буферизации без необходимости отключать блокировщик рекламы. Устранив искусственную задержку можно с помощью изменения определённых параметров в плеере YouTube.

Одним из самых эффективных решений стало изменение параметра isInlinePlaybackNoAd, который необходимо установить в значение true. Этот параметр используется во внутреннем API YouTube (InnerTube API) и был обнаружен специалистами при анализе фронтенд-скриптов и сетевых протоколов платформы. 

В частности, блокировщики рекламы, такие как uBlock Origin, позволяют задавать пользовательские правила фильтрации, которые динамически изменяют исходящие JSON-запросы от клиента, добавляя параметр isInlinePlaybackNoAd: true. Это предотвращает загрузку рекламы и, как следствие, устраняет фиктивную буферизацию.

Однако этот метод применим только при так называемой «горячей навигации» — когда пользователь переходит от одного видео к другому внутри интерфейса YouTube. Если же ролик открывается по внешней ссылке, данные воспроизведения формируются на стороне сервера при загрузке страницы и не поддаются изменению со стороны клиента.

YouTube начал внедрять механизм блокировки скриптов, который делает определённые глобальные объекты недоступными для записи, тем самым мешая блокировщикам рекламы перехватывать и изменять данные запросов. Обычно этот скрипт внедряется в верхнюю часть HTML-документа (в блок <head>) и выполняется первым при загрузке страницы.

Пользователи Firefox могут обходить этот механизм с помощью HTML-фильтров, тогда как в браузерах на базе Chromium это затруднено из-за ограничений архитектуры API расширений. В результате техническое сообщество продолжает искать альтернативные способы обхода новых ограничений со стороны YouTube.

Материалы: Securityonline.info (Ddos)