Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.05.27;
Скачать: CL | DM;

Вниз

Чем разделить видеопоток?   Найти похожие ветки 

 
ABolnykh ©   (2009-10-22 11:36) [40]

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)? Можете сказать про него что-нибудь хорошего или плохого?


 
Сергей М. ©   (2009-10-22 11:52) [41]


> ввожу
> udp://224.0.0.1:10500
> получаю "The page cannot be displayed".


Браузер понятия не имеет что делать с поступающими оттуда данными, ибо udp не является протоколом прикладногго уровня.

VideoGrabber тоже понятия не имеет, но пытается интерпретировать их в соответствии известными ему прикладными потоковыми протоколами. Соответствия не обнаруживает, потому и не рисует картинку.


 
ABolnykh ©   (2009-10-22 12:44) [42]


> Сергей М. ©   (22.10.09 11:52) [41]
>
> Браузер понятия не имеет что делать с поступающими оттуда данными, ибо udp не является протоколом прикладногго уровня.

Похоже, что так. :-(

Так чего делать-то, как жить дальше? Есть какой-нибудь способ отобразить смультикасченные данные?


 
Сергей М. ©   (2009-10-22 12:49) [43]

Для этого каст-сервер и каст-клиент должны взаимодействовать по единому известному обоим прикладному потоковому протоколу.
А что у тебя за протокол используется  - ты и сам поди не знаешь)


 
Сергей М. ©   (2009-10-22 12:58) [44]

Для передачи потокового видео используются ряд сетевых протоколов, из которых важнейшими являются протокол RTSP и протокол IGMP.

RTSP (Real-Time Streaming Protocol) - это протокол, с возможностью контролируемой передачи видео-потока в интернете. Протокол обеспечивает пересылку информации в виде пакетов между сервером и клиентом. При этом получатель может одновременно воспроизводить первый пакет данных, декодировать второй и получать третий.

Протокол из этой же группы RTP (Real-time transport protocol) определяет и компенсирует потерянные пакеты, обеспечивает безопасность передачи контента и распознавание информации. Вместе с RTP работает протокол RTCP (Real-Time Control Protocol). Он отвечает за проверку идентичности отправленных и полученных пакетов, идентифицирует отправителя и контролирует загруженность сети.

Для присоединения к сети или выхода из группы рассылки используется стандартный протокол IGMP (Internet Group Membership Protocol).


 
DVM ©   (2009-10-22 13:09) [45]


> ABolnykh ©   (22.10.09 11:36) [40]


> DVM, огромное Вам спасибо за полезные советы!

Не за что.


> Кстати, Вам приходилось иметь дело с компонентом TVideoGrabber

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


> Так чего делать-то, как жить дальше?

Если хочешь транслировать через UDP, да еще мультикастом, то тебе придется либо изобретать свой протокол, либо обратить свой взор на связку RTSP/RTP/RTCP.

А чтобы смотреть это дело через браузер, надо для браузера писать либо JavaApplet, либо FlashPlayer, либо QuickTime, либо ActiveX компонент (только для IE) или Silverlight компонент, который будет принимать поток в нужном формате. Сам браузер ясное дело не умеет.

Из браузеров только FireFox умеет принимать и показывать  MJPEG over HTTP без всяких дополнений.

Я тебе потому и советую безо всяких мультикастов и UDP для начала обойтись. Это проще в реализации как на сервере так и на клиенте.


 
DVM ©   (2009-10-22 13:21) [46]


> 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() {
       uniq = Math.random();
       document.images.webcam1.src = "http://127.0.0.1:80/jpeg.cgi?channel=" + ch + "&uniq=" + uniq;
       document.images.webcam1.onload = DoIt;
     }

     function ErrorImage() {
       errorimg++;
       if (errorimg > 3) {
         document.images.webcam1.onload = "";
         document.images.webcam1.onerror = "";
         document.images.webcam1.src = "http://127.0.0.1:80/images/failure.gif";
       } else {
         uniq = Math.random();
       document.images.webcam1.src = "http://127.0.0.1:80/jpeg.cgi?channel=" + ch + "&uniq=" + uniq;
       }
     }
 
     function DoIt()
     {
       errorimg = 0;
       window.setTimeout("LoadImage();", 40);
     }
 
   </script>  

 </head>
 <body onload="DoIt()">
   <center>
   <h2>Просмотр видео (JavaScript)</h2>
   <img src="http://127.0.0.1:80/images/failure.gif" class="webcam1_class" id="webcam1" />
   </center>
 </body>
</html>



Получится подобие видео.


 
DVM ©   (2009-10-22 13:23) [47]

В коде выше /jpeg.cgi это виртуальный путь, по которому вебсервер должен понять что от него хотят картинку, а параметр channel - определяет с какой камеры картинку.



Страницы: 1 2 вся ветка

Текущий архив: 2012.05.27;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.015 c
15-1326651004
Petr V. Abramov
2012-01-15 22:10
2012.05.27
вопрос полиглотам :)


2-1327043868
Chuck Bass
2012-01-20 11:17
2012.05.27
Указать позицию для записи таблицы БД


3-1275680538
AlpenLeo
2010-06-04 23:42
2012.05.27
добавление даты в поле таблицы


2-1327074466
jacksotnik
2012-01-20 19:47
2012.05.27
Ширина колонки


6-1254828340
ABolnykh
2009-10-06 15:25
2012.05.27
Чем разделить видеопоток?