Получить поток и сохранить как файл JPEG (изображение) с IP-камеры с помощью ffmpeg - PullRequest
3 голосов
/ 12 октября 2011

Как я могу получить поток с Ip-камеры, используя RTP, поток - MPEG4, у меня есть адрес и порт многоадресной рассылки, и у меня есть IP-адрес и номер порта ip-камеры.
И я не могу достичь через http forexample (http://ip/jpeg) И я не могу достичь потока с помощью VLC Player. Forexample (rtp: // ipadressofcam: port) и ( rtp: // multicastaddress: port )
Так что же это за команда ffmpeg?
У меня ОС Windows, сейчас я пишу код только на C #.
Но продюсер создал свой собственный ocx, который используется для просмотра камеры, этот плагин может работать на .netно я не хочу использовать его, потому что он не имеет большой функциональности, я имею в виду, что вы не можете получить текущее изображение или снимок камеры, поэтому я должен сделать это сам.

Ответы [ 4 ]

2 голосов
/ 15 февраля 2012

Итак, вы хотите получать видеопоток с камеры и конвертировать отдельный кадр в файл 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.

В конце концов вам необходимо охватить эти шаги (не обязательно напрямую, вы бы предпочли использовать сторонние библиотеки, в том числе упомянутые в других ответах) из вашего приложения и создать конвейер, который объединяет приемы из сети и транскодирование.

2 голосов
/ 07 ноября 2011

Вы уверены, что поток не защищен паролем?

Попытайтесь понять, почему ваша камера отклоняет запросы VLC.И вот как это сделать: установите Wireshark, запустите его и установите фильтр для адреса камеры, например: ip.addr == camera_ip (xxxx.xxxx.xxxx.xxxx).Затем попробуйте подключиться к VLC и посмотрите, какие сообщения были обменены.Если вы видите DROP, UNAUTH или что-то, что говорит вам использовать passwd, представьте его.(VLC сначала попытается установить соединение, используя процедуру, не прошедшую проверку подлинности, и в случае сбоя запросит пароль.)

Wireshark даст вам подсказки, если причина сбоя будет чем-то другим.имейте в виду, что если VLC не может получить к нему доступ, шанс найти какой-либо другой способ сделать это почти равен нулю.Если только вы не гуру видео.

Надеюсь, это поможет!

2 голосов
/ 12 октября 2011

Вы можете использовать VLC для такой вещи, и это элемент управления ActiveX, который также доступен для .NET, просто нужно установить VLC Media Player, и вы можете установить его управление на панели инструментов VS

http://forum.videolan.org/viewtopic.php?f=32&t=54969

UPDATE

Если вы готовы заплатить за этот материал, вы можете использовать http://www.mainconcept.com/products/sdks/video.html этого продукта компании для продвижения с декодированием и кодированием, где вы можете найти огромную библиотеку.

0 голосов
/ 10 ноября 2011

Так что до сих пор я видел, как VLC не может открыть его, но если мы создадим файл .sdp и воспроизведем его с помощью ffplay, появится только черный экран.

vlc -vvv dshow:// --sout-keep --sout-all --sout=#rtp{dst=multicastaddress,port=portNo,sdp=file:///C:/test/my.sdp}

Конечно, это не чистое решение, но надежды немного.

Но вот такое решение может быть абсолютным;
Там нет никакого способа использовать только C #, чтобы достичь того, что я намерен. Есть несколько компонентов библиотеки c ++, которые я могу использовать, но я могу использовать его вместе с Managed c ++ для написания служб взаимодействия и использовать эти библиотеки в моем коде на c #. Вот что мне нужно:

1-Мне нужна библиотека RTP, http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib или live555, но live555 имеет определенные ограничения.
Библиотека 2-RTP - это транспорт для потока MPEG4, который я извлекаю из моего кодера. Но мне нужны способы управления потоком, они предоставляются WSDL производителя.
3-После этого мне нужен декодер; Libavcodec, я могу использовать libavcodec для преобразования Iframe в изображение JPEG в .net.

...