Разработих приложение за Windows, което заснема видео от външно устройство с помощта на DirectShow. Разделителната способност на изображението е 640x480, а видеоклиповете, записани без компресия, имат много огромни размери (приблизително 27MB в секунда).
Целта ми е да намаля този размер колкото е възможно повече, така че търся енкодер, който ще ми позволи да компресирам видеото в реално време. Може да е H.264, MPEG-2 или нещо друго. Трябва да ми позволи да запазя видеото на диск и би било най-добре, ако мога също така да го предавам в реално време през мрежа (Wi-Fi, така че размерът трябва да бъде около 1 MB в секунда или по-малко). Значителната загуба на качество би била неприемлива.
Разбрах, че получаването на подходящ DirectShow филтър за тази задача е много трудно. Може да се предположи, че клиентската машина е сравнително модерна (бърз 2-ядрен процесор) и може да използва CUDA/OpenCL. Има няколко приложения, които позволяват кодиране на видео с помощта на CUDA и предлагат добра производителност, но не намерих подходящ DirectShow филтър или API, който може да се използва за разработване на такъв. NVIDIA nvcuvenc.dll изглежда има частен API, така че не мога да го използвам директно. Всички базирани на процесора енкодери, които открих, са твърде бавни за моите изисквания, но може би съм пропуснал някои.
Може ли някой да ми препоръча решение, т.е. енкодер (платен или безплатен, който може да се използва в приложение със затворен код), който може да постигне добра производителност, независимо дали използва CPU/CUDA/OpenCL или DirectCompute? Или може би трябва да използвам външен хардуерен видео енкодер?
С Най-Добри Пожелания,
луд язовец