#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.