Я разработал приложение для Windows, которое захватывает видео с внешнего устройства с помощью DirectShow. Разрешение изображения составляет 640x480, а видео, сохраненные без сжатия, имеют очень большие размеры (около 27 МБ в секунду).
Моя цель — максимально уменьшить этот размер, поэтому я ищу кодировщик, который позволит мне сжимать видео в реальном времени. Это может быть H.264, MPEG-2 или что-то еще. Это должно позволять мне сохранять видео на диск, и было бы лучше, если бы я также мог транслировать его в режиме реального времени по сети (Wi-Fi, поэтому размер должен быть около 1 МБ в секунду или меньше). Значительная потеря качества была бы недопустимой.
Я обнаружил, что получить подходящий фильтр DirectShow для этой задачи очень сложно. Можно предположить, что клиентская машина достаточно современная (быстрый 2-ядерный процессор) и может использовать CUDA/OpenCL. Есть несколько приложений, которые позволяют кодировать видео с помощью CUDA и предлагают хорошую производительность, однако я не нашел подходящего фильтра DirectShow или API, который можно было бы использовать для его разработки. NVIDIA nvcuvenc.dll, похоже, имеет частный API, поэтому я не могу использовать его напрямую. Любые кодировщики на основе процессора, которые я нашел, слишком медленны для моих требований, но, возможно, я пропустил некоторые из них.
Может ли кто-нибудь порекомендовать мне решение, то есть кодировщик (платный или бесплатный, который можно использовать в приложении с закрытым исходным кодом), который может обеспечить хорошую производительность, независимо от того, использует ли он CPU/CUDA/OpenCL или DirectCompute? Или, может быть, мне следует использовать какой-то внешний аппаратный видеокодер?
С наилучшими пожеланиями,
сумасшедший барсук