Safari Technology Preview 251: MediaRecorder не теряет кадр при busy writer. Локальная диагностика: ведомость «frame id → draw time → encoded timestamp → decoded presence»; одно обратимое воздействие, независимый контроль, privacy-stop и пакет для разработчика без реальных данных.
Узкий пользовательский вопрос
Запрос «как проверить потерю кадра MediaRecorder когда writer input временно не готов в Safari Technology Preview 251» отвечает на одну самостоятельную боль: локальная запись получает одиночный разрыв кадров именно в момент краткой неготовности writer input. Узкий ожидаемый ответ здесь не равен обещанию исправления на любом сайте: нужно различить статус reproduced, not reproduced, unsupported, environment-blocked и unknown на одном фиксированном стенде. Главный соседний эффект, который обязан быть отделён, — неровный генератор canvas, ошибочно принятый за потерю внутри recorder. Поэтому до любого действия записывают наблюдение словами, а не диагнозом, и заранее задают успешный исход: декодированный файл сохраняет последовательность номеров либо явно показывает место пропуска без вывода о причине до сравнения контроля. Если результат не повторяется после rollback, первая попытка не считается доказательством.
Доказательная опора Release 251
Официальные Release Notes WebKit датированы 26 августа 2026 года и относят пункт к Safari Technology Preview 251: исправлено отбрасывание кадра MediaRecorder каждый раз, когда writer input сообщает о неготовности. Прямая первичная запись — 318778@main. Эта пара источников подтверждает наличие и техническую границу change item, но не подтверждает частоту жалоб, поисковый спрос, результат на конкретном устройстве, перенос в stable Safari или причину любого внешне похожего сбоя. Публичная ветка о релизе служит только свежим community lead; её комментарии и поисковый сниппет не используются как evidence. Вывод статьи ограничен указанной функцией и локальным воспроизведением.
Fixture без лишних данных
Безопасный fixture: синтетический canvas-поток с номером кадра и таймером, записываемый локально без камеры, микрофона и пользовательского содержимого. До canary фиксируются номер нарисованного кадра, media timestamp, размер chunk, decode timestamp и список пропусков. Каждое поле получает expected, observed, время и отметку валидности, а итоговый рабочий артефакт — ведомость «frame id → draw time → encoded timestamp → decoded presence». Стенд использует только синтетические данные: не сохраняются IP, cookie, токены, Authorization, полные приватные URL, реальные логи, имена профилей, локальные пути и пользовательское содержимое. Если обязательное наблюдение нельзя снять без таких данных, проверку прекращают. Нельзя заменять отсутствующее значение догадкой или добавлять вторую мутацию ради красивого результата.
С чем сравнивать результат
Контроль строится независимо от основной гипотезы: параллельный массив номеров кадров из requestAnimationFrame, не зависящий от файла MediaRecorder. Он должен быть готов до воздействия и отличаться только проверяемым механизмом. Если контроль тоже меняется, результат main-fixture получает статус invalid, потому что возможны общая среда, renderer, cache или тестовая обвязка. Отдельно проверяется риск «неровный генератор canvas, ошибочно принятый за потерю внутри recorder»: его признак записывают рядом с основным, не смешивая строки. Такой дизайн не доказывает массовость, зато позволяет опровергнуть слишком широкое объяснение и не отправлять команде ложноположительный баг-репорт.
Изоляция одной переменной
Единственное воздействие: записать один короткий фиксированный поток при контролируемой нагрузке, затем повторить без нагрузки. Сначала снимается baseline, затем выполняется только это действие, после заранее выбранного settle-события записываются номер нарисованного кадра, media timestamp, размер chunk, decode timestamp и список пропусков, после чего выполняется полный rollback и повтор baseline. Успех узкой проверки означает: декодированный файл сохраняет последовательность номеров либо явно показывает место пропуска без вывода о причине до сравнения контроля. Никаких изменений production, чужих страниц, реальных аккаунтов или сетевой маршрутизации процедура не требует. Если rollback не возвращает исходное состояние, прогон помечается invalid даже при убедительном скриншоте; следующий эксперимент начинают только после чистого восстановления.
Когда принимать результат, а когда остановиться
Решение оформляется через ведомость «frame id → draw time → encoded timestamp → decoded presence». PASS допустим только когда выполнено условие «декодированный файл сохраняет последовательность номеров либо явно показывает место пропуска без вывода о причине до сравнения контроля» и независимый контроль остаётся валиден. NOT REPRODUCED означает лишь отсутствие симптома на этом fixture, а не отсутствие проблемы у всех. Stop-line: остановиться, если источник использует реальные медиа, частота canvas не зафиксирована или декодер сам пропускает кадры. Для handoff достаточно версии TP 251, минимального кода, обезличенных значений «номер нарисованного кадра, media timestamp, размер chunk, decode timestamp и список пропусков», результатов контроля, статуса rollback и ссылки на 318778@main. Материал не обещает индексацию, позиции, универсальную поддержку, стабильный релиз или автоматическое исправление проекта.
Материал подготовлен редакцией VOne с помощью ИИ; дата, WebKit Release 251, primary commit 318778@main, техническая граница, контроль, обратимость, privacy-stop и роль community lead постатейно проверены 29 августа 2026 года.
Источники и проверка
- WebKit — Release Notes for Safari Technology Preview 251 проверено 2026-08-29
- WebKit commit 318778@main проверено 2026-08-29
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.