Проблемы с псевдонимом / качеством в аппаратном кодировщике Media Foundation H264, особенно для текста (наложение и размытие текста) - PullRequest
6 голосов
/ 05 августа 2020

Я работал над потоковой передачей видео в реальном времени с использованием аппаратного ускорения кодирования и декодирования h.264, и мне удалось заставить его работать, используя Windows Media Foundation.

Я сжал кадры из формата RGB в NV12 с использованием видеопроцессора d3d11 и закодированные в h.264 с использованием аппаратного MFT.

Единственная проблема, с которой я сейчас столкнулся, заключается в том, что после декодирования и рендеринга видео на экране появляются эффекты наложения спектров и ореол вместе с текстом.

На изображениях внизу показана моя проблема.

Кадр перед кодированием

Original Image

Frame after encoding and decoding

Decoded Image

After some research, I came across H.264 / AV C 444 , в котором Microsoft решила эту проблему, представив полноэкранный режим AV C 444 с RDP 10.

В режиме AV C 444 мы можем получить текст с качеством 4: 4: 4 с Аппаратные кодеры / декодеры 4: 2: 0 за счет значительного повышения пропускной способности кадров.

Представляем режим AV C 444 Основная проблема использования AVC / H.264 в качестве единственного кода c в сценарии удаленного рабочего стола ios - это Текст показывает эффект ореола с типичными реализациями AVC / H.264. Это вызвано процессом преобразования цвета, который происходит как часть сжатия, при котором отбрасывается некоторая информация о цветности, представленная в формате 4: 2: 0. Для человеческого глаза отсутствие информации о цветности не так очевидно для видеоконтента, однако в сценарии удаленного рабочего стола ios, где в основном используется текст, это заметно, и пользователи будут воспринимать это как размытое. Стандарт AVC / H.264 определяет возможность использования формата 4: 4: 4, который не теряет цветность во время преобразования, однако обычно он не является частью большинства реализаций аппаратного кодера и декодера AVC / H.264 и, таким образом, обеспечивает вызов. Чтобы показать разницу между 4: 4: 4 и 4: 2: 0, посмотрите следующее изображение, на котором легко заметны различия:

AV C 444

Я попытался добиться того же в Media Foundation, но пока не смог найти какой-либо ресурс для его взлома.

Я выяснил, что преобразование цвета в NV12 является причиной этой проблемы и Я пытался решить эту проблему, я также пробовал YUV 444, но не смог найти аппаратный MFT, который его поддерживает. Мне не удалось закодировать любой другой цветовой формат, кроме NV12, с использованием аппаратной MFT

Есть ли способ решить эту проблему? Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 05 августа 2020
  1. Вы можете использовать код, оптимизированный для захвата экрана c: https://docs.microsoft.com/en-us/windows/win32/medfound/usingthewindowsmediavideo9screencodec

  2. NVIDIA поддерживает оборудование 4: 4: 4 поддерживается широкий спектр карт: https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

  3. Масштабируйте экран от 1920x1080 до 3840x2160, конвертируйте в NV12 (4: 2: 0), сжимайте в H. 264 и сделайте обратное на приемнике. При повышении разрешения и последующем преобразовании 4: 2: 0 должно сохраняться полное цветовое разрешение. Звучит расточительно, но если это делается на оборудовании, все должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...