Конференция "Media" » Видеопоток с IP Web камеры [D7, WinXP]
 
  • EPaul (23.01.11 10:32) [0]
    Здравствуйте, мастера. Помогите разобраться с вопросом видеозахвата с IP Web камеры. Хотелось бы, чтобы видео выводилось на моей форме, как в TWebBrowser, с возможностью записи. Один добрый человек, помог мне с кодом захвата картинки с камеры. Отлично работает. Хотелось бы также получить видеопоток. Нашел кучу компонентов и кода на эту тему, но все они работают с Web камерами установленными на компе, и ничего не смог найти которые могут работать с IP камерами. Очень надеюсь на помощь. Вот код позволяющий получать картинки с IP камеры.

    procedure TForm1.Button1Click(Sender: TObject);
    var
    memorystream: TMemoryStream;
    jpeg: TJPEGImage;
    begin
    memorystream:=TMemoryStream.Create;
    jpeg:=TJPEGImage.Create;
    try
    IdHTTP1.Get('http://www.ionitcom.ru/images/cam_static_pl_len.jpg', memorystream);
    memorystream.Position:=0;
    jpeg.LoadFromStream(memorystream);
    Image1.Picture.Assign(jpeg);
    finally
    jpeg.Free;
    memorystream.Free;
    end;
    end;
  • CrytoGen (23.01.11 11:57) [1]
    А вы уверены, что камера может выдавать изображение как-то кроме jpeg?
  • EPaul (23.01.11 21:13) [2]
    Да уверен. TWebBrowser это умеет делать. Проблема только в том, что вместе с видео, в него передается еще интерфейс управления камерой. Отделить видео от всего остального в TWebBrowserе, тоже проблематично, для меня, во всяком случае. Для камеры Trendnet это делается так видео - (mjpeg)  /cgi/mjpg/mjpg.cgi    Картинка - (snapshot) /cgi/jpg/image.cgi
  • Плохиш © (25.01.11 16:26) [3]

    > IdHTTP1.Get('http://www.ionitcom.ru/images/cam_static_pl_len.
    > jpg', memorystream);
    >


    > Для камеры Trendnet это делается так видео - (mjpeg)  /cgi/mjpg/mjpg.
    > cgi    Картинка - (snapshot) /cgi/jpg/image.cgi

    Игра "Найди отличия"...
  • EPoul (25.01.11 20:49) [4]
    Плохиш. А что нибудь конкретное можешь посоветовать?
  • Плохиш © (25.01.11 23:19) [5]
    После того как отличия найдëшь и объяснить сможешь.
  • EPaul (25.01.11 23:32) [6]
    Хорошо.  Так с камеры (Trendnet) в поток, а потом в Image, забирается картинка: IdHTTP1.Get('http://192.168.100.100//cgi/jpg/image.cgi', memorystream);
    memorystream.Position:=0;
    jpeg.LoadFromStream(memorystream);
    Image1.Picture.Assign(jpeg);
    Можно конечно собирать картинки, и делать AVI, но хотелось бы сразу видео, как это делает любой IE браузер.
  • Плохиш © (26.01.11 01:05) [7]

    > но хотелось бы сразу видео, как это делает любой IE браузер.

    Т.е. сделать как   браузер - это не для крютых пацанчиков?
  • CrytoGen (26.01.11 07:52) [8]
    О решение - сделайте браузер! :) а лучше просто включите мозг и либо объясните нормально, что вам сервер присылает, либо, если всё так как я думаю, просто разберитесь с html кодом.
  • EPaul (26.01.11 07:57) [9]
    А я думал, здесь все крютые. Я так понимаю ты не знаешь как это делать.
  • CrytoGen (26.01.11 08:02) [10]
    Так как я не думаю, что человек, что-то уяснит или попытается узнать, кроме как выпрашивая решение.
    mjpeg это просто поток jpeg, а в вашем случае скорее всего это просто два разных скрипта, в одном изображение получается один раз  /cgi/jpg/image.cgi, во втором это изображение постоянно считывается и обновляется /cgi/mjpg/mjpg.cgi (по отдельности считывается кадр и обновляется на странице). Выяснить это крайне просто - посмотреть html код который выдаётся браузеру. Если всё так как я думаю, то никакого видео потока нет - есть только текущий кадр и скрипт который обновляет картинку на страничке.
    Резюмируя. Скорее всего вам придётся-таки читать покадрово и формировать avi, или что за видеопоток вы хотели потом иметь, самостоятельно!
  • CrytoGen (26.01.11 08:03) [11]
    Не думал, чО здесь это напишу, но аффтар мудак!
  • EPaul (26.01.11 08:15) [12]
    CrytoGen. Если обращаться к серверу с браузера или из своей формы с помощью TWebBrowser, так -  http://192.168.100.100, то сервер присылает страничку, в которой есть как меню настроек камеры, так и видео Online. Мне нужно получать только видео. Если обращаться с помощью IdHTTP так -  IdHTTP1.Get('http://192.168.100.100//cgi/jpg/image.cgi, то в своей форме я получаю текущюю картинку. Для камеры Trendnet, на каком то ресурсе я нашол вот это   (mjpeg)  /cgi/mjpg/mjpg,  (snapshot) /cgi/jpg/image.cgi, т.е. можно получать как картинки - jpg, так и видео. Так вот используя пример, тот что я приводил в начале, картинка с камеры снимается нормально. Это- (snapshot) /cgi/jpg/image.cgi я понял как использовать. Но как использовать вот это -  (mjpeg)  /cgi/mjpg/mjpg. Возможно эта задача только для крютых пацанчиков?
  • CrytoGen (26.01.11 08:25) [13]
    Если сами разобраться не можете, вы хоть нам код html приведите.
  • EPaul (26.01.11 08:33) [14]
    Спасибо, что не отказали. Но исходный код страницы довольно большой. Сюда можно большие размеры?
  • EPaul (26.01.11 08:36) [15]
    Не входит весь. на почту можно?
  • CrytoGen (26.01.11 09:32) [16]
    Лучше куда-нибудь где он будет общедоступным. У mail.ru например есть возможность выкладывать файлы до 100 мб без регистрации.
  • EPoul (28.01.11 17:14) [17]
    Разбил на 2 части
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title> Network Camera</title>
    <link href="web.css" rel="stylesheet" type="text/css">
    <link href="style.css" rel="stylesheet" type="text/css">
    <script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_preloadImages() { //v3.0
     var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
       var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
       if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
    }
    function MM_swapImgRestore() { //v3.0
     var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
    }
    function MM_findObj(n, d) { //v4.01
     var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
       d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
     if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
     for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
     if(!x && d.getElementById) x=d.getElementById(n); return x;
    }
    function MM_swapImage() { //v3.0
     var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
      if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
    }
    //-->
    </script>
    <script language="JavaScript" type="text/javascript" src="itemname.js"></script>
    <script language="JavaScript" type="text/javascript" src="msg.js"></script>
    <script language="JavaScript" type="text/javascript" src="cookies.js"></script>
    <script language="JavaScript" type="text/javascript" src="warn.js"></script>
    <script language="JavaScript" type="text/javascript" src="date.js"></script>
    <script language="JavaScript" type="text/JavaScript">
    var profile=2;
    var group="USER";
    var nightmode = "";
    var msgtrigOK = new Array(item_name[_TRIGGER_OUT],item_name[_TRIGGER_OUT]);
    //var v=1;
    //var a=0;
    function time_go(){
    time_init(document.getElementById("datebar").innerHTML);
    start_date_show(document.getElementById("datebar"));
    }
    function start(){
    document.getElementById("location").appendChild(document.createTextNode(item_nam e[_LOCATION]));
    document.getElementById("nightmode").appendChild(document.createTextNode(item_na me[_NIGHTMODE]));
    if(group != "guest")
    {document.getElementById("nighttd").style.display = "none";}
    return;
    }
    var obja;
    var blinkobj;
    var blinktxt;
    function swapCSS(flag,obj,texton,textoff){
    if(flag)
    {
     obja = obj.firstChild;
     obj.removeChild(obja);
     obj.innerHTML = texton
     obj.className = "t12 ButtonSmall";
    }
    else
    {
     obj.className =  "bglblue";
     obja = document.createElement("a");
     obja.className = "a";
     //obja.innerText = textoff;
     obja.appendChild(document.createTextNode(textoff));
     obja.href = "javascript:;";
     obj.innerHTML = "";
     obj.appendChild(obja);
    }
    }
    </script>
    <style type="text/css">
    <!--
    .style5 {
    color: #339900;
    font-size: 9px;}
    .style6 {
    background-color:#E6E6CA;
    font-size: 9px;
    }
    .style8 {
    color: #FFFFFF;
    background-color:#75CA19;
    }
    .style9 {font-size: 12px}
    .style10 { background-color:#E6E6CA;}
    .style11 {
    color: #322222;
    background-color:#E6E6CA;
    }
    -->
    </style>
    </head>

    <body onLoad="time_go();start();">
    <table width="800" border="0" cellpadding="0" cellspacing="0">
    <tr>
     <td width="21"><img src="images/c1_tl.gif" width="21"></td>
     <td width="758" background="images/bg1_t.gif"><img src="images/top_1.gif" width="390"></td>
     <td width="21"><img src="images/c1_tr.gif" width="21"></td>

    </tr>
    <tr>
        <td valign="top" background="images/bg1_l.gif"><img src="images/top_2.gif" width="21" height="69"></td>
        <td background="images/bg.gif">
         <table width="100%" height="70" border="0" cellpadding="0" cellspacing="0">
          <tr>
        <td width="13%" valign="top"><img src="images/logo.gif" width="300" height="69"></td>
        <td width="87%" align="right" valign="top">
         <table width="100%" border="0" cellpadding="4" cellspacing="0">

          <tr>
           <td align="right" valign="top"><img src="images/description_TV-IP110.gif"></td>
          </tr>
          <tr>
           <td align="right" valign="top"><font color="#FFFFFF"><span id="location" name="location"></span>: <span class="t12">
               </span></font><font color="#FFFFFF"><span class="style1">
           <span id="datebar">2011/01/28 17:03:48</span>

             </span>  </font>
    </td>
          </tr>
         </table>
        </td>
          </tr>
  • CrytoGen (28.01.11 18:05) [18]
    вот эти файлы могут понадобиться. пока ничего дельного не вижу
    <script language="JavaScript" type="text/javascript" src="itemname.js"></script>
    <script language="JavaScript" type="text/javascript" src="msg.js"></script>
    <script language="JavaScript" type="text/javascript" src="cookies.js"></script>
    <script language="JavaScript" type="text/javascript" src="warn.js"></script>
    <script language="JavaScript" type="text/javascript" src="date.js"></script>
  • EPoul (28.01.11 18:28) [19]
    Кажется мои сообщения больше не пропускают.
  • CrytoGen (28.01.11 20:32) [20]
    попробуйте поискать в скриптах setTimeout
  • CrytoGen (28.01.11 20:33) [21]
    или setInterval
  • Плохиш © (29.01.11 01:36) [22]
    Показывай вот эти функции

    function time_go(){
    time_init(document.getElementById("datebar").innerHTML); start_date_show(document.getElementById("datebar")); }


  • EPoul (29.01.11 09:02) [23]
    Отправляю частями, т.к. все не пропускает

    function time_go(){
    time_init(document.getElementById("datebar").innerHTML);
    start_date_show(document.getElementById("datebar"));
    }

    function start(){
    document.getElementById("location").appendChild(document.createTextNode(item_nam e[_LOCATION]));
    document.getElementById("nightmode").appendChild(document.createTextNode(item_na me[_NIGHTMODE]));
    if(group != "guest")
    {document.getElementById("nighttd").style.display = "none";}

    return;
    }
    var obja;
    var blinkobj;
    var blinktxt;
    function swapCSS(flag,obj,texton,textoff){
    if(flag)
    {
     obja = obj.firstChild;
     obj.removeChild(obja);
     obj.innerHTML = texton
     obj.className = "t12 ButtonSmall";
    }

    else
    {
     obj.className =  "bglblue";
     obja = document.createElement("a");
     obja.className = "a";
     //obja.innerText = textoff;
     obja.appendChild(document.createTextNode(textoff));
     obja.href = "javascript:;";
     obj.innerHTML = "";
     obj.appendChild(obja);
    }



  • EPoul (29.01.11 09:58) [24]
    Не вставляется код. Видно какие-то ограничения есть. Положил весь код вот сюда   pomogi-mne1@yandex.ru   пароль 11111111  .Если не трудно посмотрите,
  • Плохиш © (29.01.11 13:02) [25]
    Хм, вообще-то я спрашивал текст функций time_init и start_date_show.
  • EPoul (29.01.11 14:21) [26]
    Где их можно найти?
  • Плохиш © (29.01.11 15:33) [27]
    Подозреваю, что в одном из файлов, список которых приведён в [18].
  • EPoul (29.01.11 16:05) [28]
    Таких файлов в моей системе нет. Когда я первый раз попытался подключиться браузером к камере, установилась Java. Возможно все эти скрипты находятся в DLL-ках. Их там много в каталоге?
  • Плохиш © (29.01.11 16:29) [29]

                  <!--"CONVERTED_APPLET"-->
         <!-- HTML CONVERTER -->
         <object
             classid = "clsid:CAFEEFAC-0015-0000-0012-ABCDEFFEDCBA"
             codebase = "http://java.sun.com/update/1.5.0/jinstall-1_5_0_12-windows-i586.cab#Version=5,0,120,4"
             WIDTH = "640" HEIGHT = "480" NAME = "ucx" >
             <PARAM NAME = CODE VALUE = "ultracam.class" >
             <PARAM NAME = ARCHIVE VALUE = "ultracam.jar" >

             <PARAM NAME = NAME VALUE = "ucx" >
             <param name = "type" value = "application/x-java-applet;jpi-version=1.5.0_12">
             <param name = "scriptable" value = "false">
             <PARAM NAME = "accountcode" VALUE="YWRtaW46YWRtaW4=" />
             <PARAM NAME = "codebase" VALUE="http://192.16.100.100:80/user" />
             <PARAM NAME = "mode" VALUE="0" />
            <comment>
          <embed
                     type = "application/x-java-applet" \
                     CODE = "ultracam.class" \
                     ARCHIVE = "ultracam.jar" \
                     NAME = "ucx" \
                     WIDTH = "640" \
                     HEIGHT = "480" \
                     accountcode ="YWRtaW46YWRtaW4=" / \
                     codebase ="http://192.168.100.100:80/user" / \
                     mode ="0" / \
              scriptable = false
              pluginspage = "http://java.sun.com/products/plugin/index.html#download">
              <noembed>
                     
                     </noembed>

          </embed>
             </comment>
         </object>
         <!--"END_CONVERTED_APPLET"-->


    ultracam.jar - вот то, что вы ищете. Берите и идите на форум по java.
  • DVM © (30.01.11 18:07) [30]

    > EPaul  

    Ты уже ознакомился с форматом передачи видео MJPEG over HTTP ?

    Пока ты этого не сделаешь, ходить и просить решения бессмысленно.
    Вот ссылка на HTTP API камер AXIS (у остальных то же самое в большинстве своем, просто у аксис лучше документировано).
    http://www.axis.com/techsup/cam_servers/dev/cam_http_api_2.php#api_blocks_image_video_mjpg_response

    Ответ камеры на запрос выглядит так:

    HTTP/1.0 200 OK\r\n
    Content-Type: multipart/x-mixed-replace;boundary=<boundary>\r\n
    \r\n
    --<boundary>\r\n
    <image>
    where the proposed <boundary> is
    myboundary
    and the returned <image> field is
    Content-Type: image/jpeg\r\n
    Content-Length: <image size>\r\n
    \r\n
    <JPEG image data>\r\n
    --<boundary>\r\n
    <image>



    Т.е в результате получим такую картину

    HTTP/1.0 200 OK\r\n
    Content-Type: multipart/x-mixed-replace;boundary=myboundary\r\n
    \r\n
    --myboundary\r\n
    Content-Type: image/jpeg\r\n
    Content-Length: 15656\r\n
    \r\n
    <JPEG image data>\r\n
    --myboundary\r\n
    Content-Type: image/jpeg\r\n
    Content-Length: 14978\r\n
    \r\n
    <JPEG image data>\r\n
    --myboundary\r\n
    Content-Type: image/jpeg\r\n
    Content-Length: 15136\r\n
    \r\n
    <JPEG image data>\r\n
    --myboundary\r\n
    .
    .
    .



    В чем проблема, получай ответ, аккумулируй, парси, выделяй JPEG-и и декодируй.

    Это не так сложно.
  • DVM © (30.01.11 18:09) [31]

    > DVM ©

    На всякие JAVA, JavaScript и прочее - забей, это все изврат и медленно.
  • DVM © (30.01.11 18:15) [32]

    > CrytoGen   (26.01.11 08:02) [10]


    > Если всё так как я думаю, то никакого видео потока нет -
    >  есть только текущий кадр и скрипт который обновляет картинку
    > на страничке.

    Есть там поток и в данной конкретной модели тоже есть.
  • babanyukv (23.11.13 02:04) [33]
    Можно еще куча новых функций добавить.
    ______________________________
    http://www.new-project.biz/
  • babanyukv (23.11.13 02:04) [34]
    Можно еще куча новых функций добавить.
    ______________________________
    http://www.new-project.biz/
  • babanyukv (23.11.13 02:04) [35]
    Можно еще куча новых функций добавить.
    ______________________________
    http://www.new-project.biz/
  • Fernandalucia (25.11.15 04:30) [36]
    I'm not easily imrpsesed but you've done it with that posting.
 
Конференция "Media" » Видеопоток с IP Web камеры [D7, WinXP]
Есть новые Нет новых   [134427   +37][b:0][p:0.006]