Обновление Windows 10 «поломало» миллионы HD веб-камер

3454c2efbf69486cbb432c605c9d4ec4.jpg
Logitech C920 — одна из веб-камер, которые начинают глючить после установки обновления Windows 10 Anniversary Update

На форуме техподдержки Windows многочисленные пользователи сообщают о проблемах с веб-камерой после установки последнего обновления Anniversary Update (Windows 10 version 1607, OS Build 14393.10 'anniversary). После установки апдейта веб-камеры больше не могут передавать видео, закодированное в MJPEG или H.264, а работают только в режиме передачи несжатого видео YUV.

Начинают глючить Skype в режиме HD-видео, Open Broadcaster Software (OBS), различный софт для видеонаблюдения (CCTV) и др. Проблема подтверждена для множества моделей USB веб-камер, в том числе для очень популярных Logitech C920 и C930e.
Обновление Anniversary Update вышло 2 августа 2016 года и порадовало множеством новых функций, в том числе возможностью использовать удобную консоль Bash в Windows-окружении.

К сожалению, при всех своих плюсах, обновление Anniversary Update имеет один существенный недостаток — оно выводит из строя веб-камеру.

Судя по ответам сотрудников технической поддержки и обсуждению в ветке форума, компания Microsoft специально ограничила режим работы приложений в Windows 10, чтобы решить проблемы с производительностью при доступе приложения к веб-камере и процессам кодирования MJPEG или H.264. Дело в том, что традиционно в Windows только одному приложению разрешён доступ к видеопотоку с веб-камеры. Если вы, например, начали звонок в Skype, то другие приложения уже не могут получить доступ к веб-камере. Чтобы оптимизировать разделение доступа, в обновлении Windows 10 v. 1607 компания Microsoft добавила новый компонент под названием Windows Camera Frame Server, который обрабатывает видеопотоки с веб-камер. Теперь приложения не подключаются напрямую к веб-камере, а подключаются к фрейм-серверу Windows Camera Frame Server. Он поддерживает несколько подключений одновременно и раздаёт видеопоток с камеры нескольким подключенным приложениям. Это должно было решить проблему «эксклюзивного» использования веб-камеры одной программой. И, кстати, эту проблему разработчики Windows должны были решить давным-давно, но решили только сейчас. Точнее, попытались решить.

В результате такой «оптимизации», при попытке кодировать видеопоток в MJPEG или H.264 с веб-камеры теперь устройство отключается через некоторое время. Например, HD-видеозвонок в Skype зависает примерно через минуту после начала, или же зависает сразу после начала.

Аудиозвонки работают нормально. Как и раньше, здесь нет проблемы с одновременным доступом нескольких программ к веб-камере. Также нет проблем при подключении веб-камеры через USB 3, а не USB 2.

Веб-камеры, подключенные по USB 2, вынуждены кодировать видео в MJPEG или H.264, потому что пропускной способности USB 2 в 480 Мбит/с недостаточно для передачи несжатого видео с разрешением 1920×1080 на 30 кадрах/с. Поэтому кодирование в MJPEG или H.264 является стандартной опцией почти всех современных веб-камер.

По какой-то причине фрейм-сервер Windows 10 v. 1607 поддерживает только несжатый видеопоток. Вероятно, это сделано из-за проблем с производительностью в Windows 10, когда несколько приложений одновременно начинают осуществлять преобразование MJPEG-to-YUV или H.264-to-YUV. То есть теоретически более эффективно осуществлять такое преобразование однократно перед тем, как сервер раздаёт видеопоток приложениям. Такая схема не работает, если программа ожидает получение именно сжатого видеопотока MJPEG или H.264. В этом случае программа не может нормально работать.

Например, Skype прогрессивно улучшает качество видеосвязи по возможности, если позволяет пропускная способность и процессор не перегружен. Так, видеозвонок может начаться с более низким качеством (без сжатия видео, например, 640×480 YUV), но через некоторое время Skype решит, что ресурсы позволяют улучшить качество — и переключится на 720p или 1080p. Это может произойти через несколько секунд после начала видеозвонка или через минуту. На старых версиях Windows такое переключение происходило безболезненно и незаметно, а вот с установленным Anniversary Update переключение не работает — видео зависает на несколько секунд, а потом связь прерывается.

Многие пользователи могут подумать, что «глюки» веб-камеры можно решить обновлением драйверов, они ищут новые драйверы на сайтах производителей. Но на самом деле проблема не в драйверах, а в самой операционной системе.

На форуме техподдержки некоторые возмущённые корпоративные пользователи говорят, что функция видеозвонков критически важна для их сотрудников. Она постоянно используется в работе. С такими проблемами им не остаётся ничего иного, кроме как запретить сотрудникам устанавливать обновление Anniversary Update или вообще запретить устанавливать Windows 10 и поменять операционную систему на OS X, где нет проблем с видеосвязью.

Инженер Mike M из подразделения Windows Camera сказал, что все комментарии в треде фиксируются, а исправление для этого бага поставлено в очередь для разработчиков и, возможно, будет выпущено с сентябрьским обновлением Windows 10. Возможно, сначала во фрейм-сервер добавят только обработку MJPEG, потому что с ней легче справиться, а исправление для H.264 выйдет позже. Обещанный патч — это хорошая новость. Плохая новость в том, что до сентября нет официального обходного способа, чтобы включить нормальную обработку видеопотоков MJPEG и H.264 (неофициальный способ см. ниже).

Ещё одна плохая новость в том, что начиная с версии Anniversary Update компания Microsoft сократила разрешённый срок отката обновления со стандартных 30 дней до 10 дней, так что большинство пользователей застряли на этом апдейте. Странно, что компания Microsoft даже официально не сообщала о сокращении срока разрешённого отката до 10 дней, ничего подобного не сообщается в разделе обновления ОС.

db0c6e0e77534059818b370ac19616c0.png

Так что обладатели Windows 10 только на 11-й день после обновления узнают постфактум о том, что откатить обновление больше нельзя.

Об обновлении стека обработки видеопотока с веб-камер компания Microsoft тоже ничего не сообщала, когда выкатывала обновление. Поэтому никто не предполагал, что могут возникнуть какие-то проблемы. Как известно, Microsoft не выпускает подробные release notes и не рассказывает обо всех изменениях, сделанных в ОС, ограничиваясь только маркетинговыми пресс-релизами с кратким описанием новых замечательных функций.

Это сильно отличает Windows от операционных систем с открытым исходным кодом, где для каждой новой версии ядра подробно описаны абсолютно все сделанные изменения в ядре и даже можно посмотреть исходный код каждого патча. Там такие проблемы невозможны в принципе.

Теперь о неофициальном способе отключения нового фрейм-сервера в Windows 10. Один из пользователей говорит, что ему удалось всё-таки заставить Skype нормально работать без проблем с веб-камерой с помощью редактирования реестра. Можете тоже попробовать такой способ.

В разделе HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows Media Foundation\Platform необходимо создать DWORD-параметр «EnableFrameServerMode» и установить его значение в »0», после этого перезапустить Skype. (Пожалуйста, сообщите в комментариях, если этот способ помог решить проблему.)

2d5ff0280d2b47338a9cb191c54d6cb1.jpg

125f7bfa516a46f787421d2a64feffae.jpg

Указанный выше ключ действует для 32-битных приложений на 64-битной Windows. Для 64-битных приложений на 64-битной Windows такой же параметр в реестре с таким же значением следует создать в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Media Foundation\Platform.

Остаётся надеяться, что никто из пострадавших пользователей не успел купить себе новую веб-камеру, потому что старая «глючит».

© Geektimes