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