-
DVM, огромное Вам спасибо за полезные советы! Специалист ТАКОГО уровня в тяжкую и голодную годину без персонального бутерброда с красной икрой уж точно не останется!
Но собственную шишку нужно набивать самостоятельно, отрицательный опыт - это тоже опыт, хотя бы для того, чтобы в будущем знать, как не надо делать, и потому желательно все плюсы и минусы увидеть своими глазами.
Поэтому, прикинув мышь к носу, я для начала решил избрать следующую последовательность действий: 1. Запрашиваю от камеры 1 кадр видеопотока по HTTP; 2. Копирую его в буфер. 3. Мультикастю буфер процедурой SendBuffer MCast-сервера на групповой адрес 224.0.0.1, порт 10500. 4. Даю задержку на 100 мс. 5. Перехожу на шаг 1.
Какой-то поток от меня начинает исходить, я вижу его трафик в окошке DUMeter-а.
Теперь очередной идиотский вопрос: как мне этот поток принять и отобразить? Если в строке адреса Internet Explorer-а я ввожу udp://224.0.0.1:10500 то неизменно получаю "The page cannot be displayed". Если пытаюсь поймать поток ВидеоГраббером, устанавливая его свойство IpCameraUrl на тот же групповой адрес и порт, то тоже не получаю никакой картинки. :-(
Кстати, Вам приходилось иметь дело с компонентом TVideoGrabber (www.datastead.com)? Можете сказать про него что-нибудь хорошего или плохого?
-
> ввожу > udp://224.0.0.1:10500 > получаю "The page cannot be displayed".
Браузер понятия не имеет что делать с поступающими оттуда данными, ибо udp не является протоколом прикладногго уровня.
VideoGrabber тоже понятия не имеет, но пытается интерпретировать их в соответствии известными ему прикладными потоковыми протоколами. Соответствия не обнаруживает, потому и не рисует картинку.
-
> Сергей М. © (22.10.09 11:52) [41] > > Браузер понятия не имеет что делать с поступающими оттуда данными, ибо udp не является протоколом прикладногго уровня.
Похоже, что так. :-(
Так чего делать-то, как жить дальше? Есть какой-нибудь способ отобразить смультикасченные данные?
-
Для этого каст-сервер и каст-клиент должны взаимодействовать по единому известному обоим прикладному потоковому протоколу. А что у тебя за протокол используется - ты и сам поди не знаешь)
-
Для передачи потокового видео используются ряд сетевых протоколов, из которых важнейшими являются протокол RTSP и протокол IGMP.
RTSP (Real-Time Streaming Protocol) - это протокол, с возможностью контролируемой передачи видео-потока в интернете. Протокол обеспечивает пересылку информации в виде пакетов между сервером и клиентом. При этом получатель может одновременно воспроизводить первый пакет данных, декодировать второй и получать третий.
Протокол из этой же группы RTP (Real-time transport protocol) определяет и компенсирует потерянные пакеты, обеспечивает безопасность передачи контента и распознавание информации. Вместе с RTP работает протокол RTCP (Real-Time Control Protocol). Он отвечает за проверку идентичности отправленных и полученных пакетов, идентифицирует отправителя и контролирует загруженность сети.
Для присоединения к сети или выхода из группы рассылки используется стандартный протокол IGMP (Internet Group Membership Protocol).
-
> ABolnykh © (22.10.09 11:36) [40]
> DVM, огромное Вам спасибо за полезные советы!
Не за что.
> Кстати, Вам приходилось иметь дело с компонентом TVideoGrabber
Давным давно, когда он был вроде бесплатный и с исходниками даже чуть-чуть я его изучал, в частности смотрел как там был сделан детектор движения (точнее активности, не знаю остался ли он там), мне не понравилось, ибо было медленно и на этом мое с ним знакомство закончилось.
> Так чего делать-то, как жить дальше?
Если хочешь транслировать через UDP, да еще мультикастом, то тебе придется либо изобретать свой протокол, либо обратить свой взор на связку RTSP/RTP/RTCP.
А чтобы смотреть это дело через браузер, надо для браузера писать либо JavaApplet, либо FlashPlayer, либо QuickTime, либо ActiveX компонент (только для IE) или Silverlight компонент, который будет принимать поток в нужном формате. Сам браузер ясное дело не умеет.
Из браузеров только FireFox умеет принимать и показывать MJPEG over HTTP без всяких дополнений.
Я тебе потому и советую безо всяких мультикастов и UDP для начала обойтись. Это проще в реализации как на сервере так и на клиенте.
-
> ABolnykh ©
Ты научился получать отдельные кадры. Теперь научи TIDHTTPServer отдавать эти отдельные кадры по запросу, не надо пока формировать MJPEG поток. И все уже будет работоспособно более-менее. И смотреть тогда можно в браузере с пом например такого кода:
<html>
<head>
<title>JavaScript</title>
<meta http-equiv=Content-Type content="text/html;charset=windows-1251">
<script language="javascript" type="text/javascript">
var ch=1;
errorimg = 0;
function LoadImage()
function ErrorImage() else
}
function DoIt()
</script>
</head>
<body onload="DoIt()">
<center>
<h2>Просмотр видео (JavaScript)</h2>
<img src="http: </center>
</body>
</html>
Получится подобие видео.
-
В коде выше /jpeg.cgi это виртуальный путь, по которому вебсервер должен понять что от него хотят картинку, а параметр channel - определяет с какой камеры картинку.
|