-
Здравствуйте, мастера. Помогите разобраться с вопросом видеозахвата с 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;
-
А вы уверены, что камера может выдавать изображение как-то кроме jpeg?
-
Да уверен. TWebBrowser это умеет делать. Проблема только в том, что вместе с видео, в него передается еще интерфейс управления камерой. Отделить видео от всего остального в TWebBrowserе, тоже проблематично, для меня, во всяком случае. Для камеры Trendnet это делается так видео - (mjpeg) /cgi/mjpg/mjpg.cgi Картинка - (snapshot) /cgi/jpg/image.cgi
-
-
Плохиш. А что нибудь конкретное можешь посоветовать?
-
После того как отличия найдëшь и объяснить сможешь.
-
Хорошо. Так с камеры (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 браузер.
-
> но хотелось бы сразу видео, как это делает любой IE браузер.
Т.е. сделать как браузер - это не для крютых пацанчиков?
-
О решение - сделайте браузер! :) а лучше просто включите мозг и либо объясните нормально, что вам сервер присылает, либо, если всё так как я думаю, просто разберитесь с html кодом.
-
А я думал, здесь все крютые. Я так понимаю ты не знаешь как это делать.
-
Так как я не думаю, что человек, что-то уяснит или попытается узнать, кроме как выпрашивая решение. mjpeg это просто поток jpeg, а в вашем случае скорее всего это просто два разных скрипта, в одном изображение получается один раз /cgi/jpg/image.cgi, во втором это изображение постоянно считывается и обновляется /cgi/mjpg/mjpg.cgi (по отдельности считывается кадр и обновляется на странице). Выяснить это крайне просто - посмотреть html код который выдаётся браузеру. Если всё так как я думаю, то никакого видео потока нет - есть только текущий кадр и скрипт который обновляет картинку на страничке. Резюмируя. Скорее всего вам придётся-таки читать покадрово и формировать avi, или что за видеопоток вы хотели потом иметь, самостоятельно!
-
Не думал, чО здесь это напишу, но аффтар мудак!
-
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. Возможно эта задача только для крютых пацанчиков?
-
Если сами разобраться не можете, вы хоть нам код html приведите.
-
Спасибо, что не отказали. Но исходный код страницы довольно большой. Сюда можно большие размеры?
-
Не входит весь. на почту можно?
-
Лучше куда-нибудь где он будет общедоступным. У mail.ru например есть возможность выкладывать файлы до 100 мб без регистрации.
-
Разбил на 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>
-
вот эти файлы могут понадобиться. пока ничего дельного не вижу <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>
-
Кажется мои сообщения больше не пропускают.
-
попробуйте поискать в скриптах setTimeout
-
или setInterval
-
Показывай вот эти функции
function time_go()
-
Отправляю частями, т.к. все не пропускает
function time_go()
function start()
return;
}
var obja;
var blinkobj;
var blinktxt;
function swapCSS(flag,obj,texton,textoff)
else
-
Не вставляется код. Видно какие-то ограничения есть. Положил весь код вот сюда pomogi-mne1@yandex.ru пароль 11111111 .Если не трудно посмотрите,
-
Хм, вообще-то я спрашивал текст функций time_init и start_date_show.
-
Где их можно найти?
-
Подозреваю, что в одном из файлов, список которых приведён в [18].
-
Таких файлов в моей системе нет. Когда я первый раз попытался подключиться браузером к камере, установилась Java. Возможно все эти скрипты находятся в DLL-ках. Их там много в каталоге?
-
<!--"CONVERTED_APPLET"-->
<!-- HTML CONVERTER -->
<object
classid = "clsid:CAFEEFAC-0015-0000-0012-ABCDEFFEDCBA"
codebase = "http: 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: <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: mode ="0" / \
scriptable = false
pluginspage = "http: <noembed>
</noembed>
</embed>
</comment>
</object>
<!--"END_CONVERTED_APPLET"-->
ultracam.jar - вот то, что вы ищете. Берите и идите на форум по java.
-
> 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 ©
На всякие JAVA, JavaScript и прочее - забей, это все изврат и медленно.
-
> CrytoGen (26.01.11 08:02) [10]
> Если всё так как я думаю, то никакого видео потока нет - > есть только текущий кадр и скрипт который обновляет картинку > на страничке.
Есть там поток и в данной конкретной модели тоже есть.
-
-
-
-
I'm not easily imrpsesed but you've done it with that posting.
|