Перейти к содержимому


Перед регистрацией ознакомьтесь с темой про сертификат безопасности:
Фотография
- - - - -

Как заставить H.264 NVIDIA Video Encoder не записывать Variable Frame Rate


  • Please log in to reply
3 ответов в этой теме

#1 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1124 Сообщений:

Отправлено 05 Feb 2020 - 05:27

Решил покопаться в Microsoft Media Foundation

https://docs.microso...-foundation-sdk

И столкнулся с непонятной мне особенностью хардверного H.264 NVIDIA Video Encoder.

https://docs.microso...4-video-encoder

Если им кодировать видео, то при сильной загрузке CPU, энкодер автоматом переходит на Variable Frame Rate, что мне хотелось бы избежать.

Возможно ли в апи энкодера это как-то указать, я такой опции, ни на msdn ни в документации NVENC не нашел.

Другие энкодеры такой ерунды не делают.

 

 



#2 Alf_Zetas

Alf_Zetas

    Вставляю своих 5 копеек

  • Модераторы
  • PipPipPipPipPipPipPipPipPipPipPipPipPipPipPip
  • 10887 Сообщений:

Отправлено 05 Feb 2020 - 11:57

а с чего ты взял, что нвидиевский энкодер в формате MF?



#3 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1124 Сообщений:

Отправлено 05 Feb 2020 - 13:11

Я запускал MFTEnumEx с флагами MFT_ENUM_FLAG_HARDWARE | MFT_ENUM_FLAG_SORTANDFILTER.

https://docs.microso...mfapi-mftenumex

И на выходе получал при установленной карточки - "NVIDIA H.264 Encoder MFT".

После чего устанавливал атрибут MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS при создании sink writer.

https://docs.microso...ware-transforms

И видео начинало кодироваться с минимальной нагрузкой на CPU с помощью GPU.



#4 Malcev

Malcev

    Сенсей для друзей по NLE

  • Участники
  • PipPipPipPipPipPipPipPipPipPip
  • 1124 Сообщений:

Отправлено 07 Mar 2020 - 02:01

В общем пока я пришел к следующим выводам:

Захватывать экран можно через несколько АПИ.

1) GDI (медленно, можно захватывать перекрывающиеся окна)

2) DirectX Desktop Duplication - (очень быстро, но перекрывающиеся окна захватывать нельзя)

3) Magnification API - (пока еще не вырубили прикольную фичу - убирать окна, которые не хочется захватывать)

https://docs.microso...scalingcallback

4) Через недокументированные DwmpDxGetWindowSharedSurface из dwmapi.dll или DwmGetDxSharedSurface

http://undoc.airesof...aredSurface.php

Позволяют обойти запрет на захват созданный через setwindowdisplayaffinity ;)

https://docs.microso...displayaffinity

5) С помощью UWP Capture. Обещают новые функции:

https://blogs.window...screen-capture/

5) Полноэкранные directx приложения захватываются только с помощью инжекта длл, установки хуков и перехвата DirectX методов.

6) Чувак хакнул dwm.dll и перехватывал напрямую через него

Я попросил дать исходники, на что получил ответ:

Sorry we had to take it down because of a copyright claim from microsoft.

 


Сообщение отредактировано Malcev: 07 Mar 2020 - 02:09



0 человек читают эту тему

0 пользователей, 0 гостей, 0 скрытых пользователей



Рейтинг@Mail.ru