Итак, вы хотите получать видеопоток с камеры и конвертировать отдельный кадр в файл JPEG. Это звучит хорошо и на самом деле звучит естественно: почему бы и нет? по сети отправляется видео, и нам не нужно много, только чтобы выбрать отдельный кадр.
Исходный поток - это MPEG-4 (часть 2), а желаемое целевое кодирование - JPEG. Это разбивает задачу на части получения видеопотока MPEG-4, декодирования его в несжатые изображения и кодирования в JPEG. Давайте пройдемся по последнему назад.
JPEG является популярной кодировкой, и существуют различные кодеки с различным интерфейсом, способные сжимать в JPEG. Опции включают GDI + API , Библиотека IJG JPEG libjpeg , библиотеки JPEG и кодеки для видео с DirectShow и другими интерфейсами.
Декодер MPEG-4 является сложным компонентом, однако, к счастью, хорошо стандартизирован и доступен в различных интерфейсах и из нескольких источников. В частности, MPEG-4 Part 2 Video Decoder поставляется как DMO
(а также через) с Windows 7. Декодер также доступен в качестве фильтра DirectShow в ffdshow, Intel Media SDK.
Возвращаясь к первому шагу, вам нужно подключиться к потоку MPEG-4 из сети. Прежде всего вы указали, что камера доступна по многоадресному UDP-адресу. Это заставляет вас открывать сокет и помещать его в многоадресную группу, чтобы начать получать данные RTP. Получаемые вами данные пока не являются чисто MPEG-4 и отформатированы в соответствии с форматом полезной нагрузки RTP для аудио- и видеопотоков MPEG-4 , и по мере получения потока сообщений RTP вы должны быть готовы к получать неупорядоченные фрагменты, потери пакетов и т. д. Вы должны получать то, что можете получить, проверять заголовки RTP и делать все возможное для восстановления канала MPEG-4.
В конце концов вам необходимо охватить эти шаги (не обязательно напрямую, вы бы предпочли использовать сторонние библиотеки, в том числе упомянутые в других ответах) из вашего приложения и создать конвейер, который объединяет приемы из сети и транскодирование.