Получить поток и сохранить как файл jpeg (изображения) с IP-камеры с помощью ffmpeg

#c# #ffmpeg #rtp #mpeg-4

#c# #ffmpeg #rtp #mpeg-4

Вопрос:

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

Комментарии:

1. codeproject.com/KB/audio-video/cameraviewer.aspx

2. вы можете загрузить код и посмотреть на него.

3. are you sure about @ ? can you show me reference Вы пробовали это? Я не заинтересован в доказательстве этого. Выполните свой собственный поиск.

4. Вот еще один источник форумов. whirlpool.net.au/archive/911984 . Просто найдите rtp://@ . Таким образом, вам не нужно пробовать все символы на клавиатуре.

5. Что такое марка модель камеры? Некоторые IP-камеры имеют возможность потоковой передачи в формате m-jpeg или выгрузки файлов jpg через регулярные промежутки времени.

Ответ №1:

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

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

Wireshark даст вам подсказки, если причина сбоя в чем-то другом.

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

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

Комментарии:

1. спасибо за ответ, мне все равно, откроет ли его vlc, я просто хочу управлять этим потоком с помощью c #, вот и все. но еще раз спасибо за информацию

Ответ №2:

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

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

Обновить

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

Комментарии:

1. ну, я не знаю, чем это должно быть связано со сжатием, контейнером или кодеком, потому что я уверен, что VLC может, и я это протестировал.. ОЧЕНЬ МНОГО!!

2. @mekici как вы думаете, почему VLC не может его открыть, проблема с протоколом, проблема с контейнером или проблема с кодеком, если вы можете отправить нам образец, я могу предоставить вам несколько инструментов, которые вы можете использовать!

3. @mekici если вы можете записать часть этого видео, я могу проанализировать его для вас!

4. как я могу это сделать? вы имеете в виду запись в формате .avi или?

5. @mekici можем ли мы продолжить это в чате?

Ответ №3:

Итак, вы хотите получать видеопоток с камеры и конвертировать отдельный кадр в файл JPEG. Это звучит хорошо и на самом деле звучит естественно: почему бы и нет? по сети отправляется видеопоток, и нам не нужно много, просто выбрать отдельный кадр.

Исходный поток — MPEG-4 (часть 2), а желаемая целевая кодировка — JPEG. Это разбивает задачу на части получения видеопотока в формате MPEG-4, декодирования его в несжатые изображения и кодирования в формате JPEG. Давайте пройдемся по ним от последнего назад.

JPEG — популярная кодировка, и существуют различные кодеки с различным интерфейсом, способные сжиматься в JPEG. Опции включают GDI API, библиотеку IJG JPEG libjpeg, библиотеки JPEG и кодеки для видео с DirectShow и другими интерфейсами.

Декодер MPEG-4 является сложным компонентом, однако, к счастью, хорошо стандартизирован и доступен в разных интерфейсах и из нескольких источников. В частности, видеодекодер MPEG-4 Part 2 поставляется как DMO (а также через) с Windows 7. Декодер также доступен в качестве фильтра DirectShow в ffdshow, Intel Media SDK.

Вернемся к первому шагу, вам нужно получить доступ к потоку MPEG-4 из сети. Прежде всего, вы указали, что камера доступна по адресу UDP с несколькими ссылками. Это заставляет вас открыть сокет и поместить его в группу с несколькими кастами, чтобы начать получать данные RTP. Данные, которые вы получите, еще не являются чистым MPEG-4 и отформатированы в соответствии с форматом полезной нагрузки RTP для аудио / визуальных потоков MPEG-4, и по мере получения потока сообщений RTP вам нужно будет быть готовым к получению неупорядоченных фрагментов, потерям пакетов и т. Д. Предполагается, что вы получаете то, что можете получить, проверяете заголовки RTP и делаете все возможное для восстановления канала MPEG-4.

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

Ответ №4:

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

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

Конечно, это не чистое решение, но есть небольшая надежда.

Но устаревшее решение может быть таким;
Нет способа использовать только c # для достижения того, что я намереваюсь. Существует несколько компонентов библиотеки c , которые я могу использовать, но я могу использовать его вместе с управляемым c для написания служб взаимодействия и использования этих dll в моем коде 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.