Активация поддержки видео в h264 на Firefox 49 на Windows XP

З.Ы. Кому лень читать сначала, читайте с конца.


Почему Firefox никогда не поддерживал видео в h264 на Windows XP, или экскурс в историю.

Сначала Mozilla отказывалась поддерживать проприетарный и защищённый патентами формат h264, продвигая использование открытых кодеков, потом, когда стало понятно, что без поддержки h264 в современном вебе никуда, реализовала её при при помощи компонента Windows Media Foundation, отсутствующего в Windows XP. Когда Cisco предоставила открытые и лицензионно чистые кодеки OpenH264, было слишком поздно — никто не хотел переписывать рабочий код, использующий WMF, ради ОС, поддержка производителем которой была окончена, и внедрение OpenH264 ограничили видео по WebRTC.


Но многие (в том числе и я) всё ещё используют эту ОС по разным причинам, и не стоит им отказывать в просмотре видео в h264 в самом лучшем (по моему скромному мнению) браузере Firefox.


Помощь, откуда не ждали

После обновления на Firefox 48 я внезапно для себя обнаружил, что видео в h264 прекрасно работает.

Небольшое расследование привело меня к тому, что это стало возможно благодаря плагину Adobe Primetime, ориентированному на воспроизведение DRM видео.


На скриншоте ниже, полученном при помощи Process Explorer, видно, что процесс plugin-container, появившийся после загрузки страницы с видео, использует файл eme-adobe.dll из профиля текущего пользователя.

Активация поддержки видео в h264 на Firefox 49 на Windows XP Windows XP, Xp forever, H264, Mozilla, Firefox, Сложно, Habr, Длиннопост

Зайдя в настройку плагинов Firefox, я нашёл там Adobe Primetime, отключение которого приводило к тому, что FF переставал воспроизводить h264, что доказывало, что именно он виновник этого торжества.

Но радость моя была не долгой.


Всё опять сломали

При очередном обновлении до Firefox 49 я с грустью обнаружил, что h264 опять не играется. Я не нашёл Adobe Primetime в списке плагинов, я не нашёл его файлов в профиле, а попытка их подсунуть ни к чему не привела.


В поисках по интернету я наткнулся на обсуждение предложения по скрытию Adobe Primetime на ОС ниже Vista. Оттуда я узнал, что этот плагин официально не поддерживает Windows XP, и на некоторых конфигурациях наблюдались проблемы со стабильностью. Но у меня же проблем не было!


В багтрекере была ссылка на «исправление» проблемы отображения плагина Primetime на XP. Опираясь на код из него, я сделал исправление, которое откатывает вредный эффект данных изменений.


Исправление

Обновление: более простой и корректный способ указан в P.S, файлы править не нужно. Предыдущий вариант исправления остаётся в исторических целях.

Необходимо разархивировать файл omni.ja из корневой директории браузера, найти там файл /jsloader/resource/gre/modules/GMPUtils.jsm, открыть в любом шестнадцатеричном редакторе, и заменить там байты


6973506C6174666F726D416E6456657273696F6E41744C656173740700000077696E0300000036

на

6973506C6174666F726D416E6456657273696F6E41744C656173740700000077696E0300000035


Тем самым мы включим работу плагина на ядре NT 5.0 и выше, вместо NT 6.0. После исправления необходимо упаковать файлы обратно в omni.ja. Архивация с обычными параметрами тут не подойдёт, нужно использовать консоль:


zip -qr9XD omni.ja *


После замены им оригинала всё опять заработало.


Замечу, что необходимо так же активировать поддержку воспроизведения видео при помощи плагинов, в about:config необходимо media.gmp.decoder.enabled выставить в true:


У меня эта настройка была давно включена, в надежде на работу h264 через OpenH264. После этого можно наслаждаться видео в h264 на любых сайтах, в том числе YouTube, Vimeo, сервисах онлайн-трансляций и т.д.

Активация поддержки видео в h264 на Firefox 49 на Windows XP Windows XP, Xp forever, H264, Mozilla, Firefox, Сложно, Habr, Длиннопост

Я создал запрос в Bugzilla на возврат поддержки плагина Primetime на Windows XP, но что-то мне подсказывает, что это закончится ничем.

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


Послесловие

Для тех, кому лень возиться с HEX- редакторами и архиватором, прикладываю ссылку на каталог на Яндекс.диске, куда я буду сбрасывать свои исправленные файлы omni.ja после обновлений. Пока там лежит один файл из актуальной версии.


Замечание для параноиков:

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

Получившийся у вас файл omni.ja при бинарном сравнении может отличатся от моего даже на одной версии FF, так как используются разные архиваторы, его версии и параметры сжатия по умолчанию.


Но есть решение и проще

На Bugzilla подсказали более простой и корректный способ активации плагина. Достаточно создать в about:config настройку media.gmp-eme-adobe.forceSupported  и выставить её в true. Так же необходимо выставить в true уже существующий параметр media.gmp.decoder.enabled, и проверить на всякий случай параметры media.gmp-eme-adobe.visible и media.gmp-eme-adobe.enabled, они активированы по умолчанию, но мало ли. Это позволяет активировать плагин без бинарных патчей файла.