Конференция "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]
    Кажется мои сообщения больше не пропускают.
 
Конференция "Media" » Видеопоток с IP Web камеры [D7, WinXP]
Есть новые Нет новых   [118671   +60][b:0][p:0.001]