Autor Téma: Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)  (Přečteno 6318 krát)

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 291
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4
Zdravím vespolek!
Potřebuji ve své aplikaci přijímat video z IP kamery. O video si požádám zaslaním GET požadavku kameře, ale problém je v tom, že to "video" je vlastně nekonečný sled JPeGů. A já nevím, jak se vypořádat s tou "nekonečností"... Když použiju IdHTTP z Indy, tak neustále roste velikost přijaté odpovědi - a s tím samozřejmě i spotřeba paměti celé mé aplikace. Opravdu netuším, jak by to dopadlo třeba po několika  dnech nepřetržitého stahování z kamery, což je u mě reálná situace. Potřeboval bych spíš jen nějaký "průtokový" :) buffer s omezenou velikostí. Nebylo by řešením mého problému třeba napsat si vlastního potomka TStream a stahovat to do něj (protože IdHTTP má i verzi procedury Get() s parametrem TStream)?
« Poslední změna: 27-06-2012, 14:01:43 od Morrison »
nil

Offline SaLIk

  • Mladík
  • **
  • Příspěvků: 71
  • Karma: 1
    • Verze Delphi: 2010, 10 (Seattle)
    • salikovi.cz
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #1 kdy: 27-06-2012, 18:34:22 »
zkus použít VLC player a jeho activex rozhraní .. nevýhoda je, že je potřeba na počítač nainstalovat VLC player.

info zde: http://wiki.videolan.org/ActiveX/Delphi

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1498
  • Karma: 37
    • Pepak.net
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #2 kdy: 27-06-2012, 18:54:35 »
Zdravím vespolek!
Potřebuji ve své aplikaci přijímat video z IP kamery. O video si požádám zaslaním GET požadavku kameře, ale problém je v tom, že to "video" je vlastně nekonečný sled JPeGů. A já nevím, jak se vypořádat s tou "nekonečností"... Když použiju IdHTTP z Indy, tak neustále roste velikost přijaté odpovědi - a s tím samozřejmě i spotřeba paměti celé mé aplikace. Opravdu netuším, jak by to dopadlo třeba po několika  dnech nepřetržitého stahování z kamery, což je u mě reálná situace. Potřeboval bych spíš jen nějaký "průtokový" :) buffer s omezenou velikostí. Nebylo by řešením mého problému třeba napsat si vlastního potomka TStream a stahovat to do něj (protože IdHTTP má i verzi procedury Get() s parametrem TStream)?
Bylo by to řešením, ale otázka je, jestli opravdu funkčním. Spíš bych řekl, že ne (že IdHTTP stejně bude někde interně předpokládat, že je request konečný, načte si to do nějaké své mezipaměti a pak to přesune do streamu).

Kdybych měl něco takového psát, tak vezmu Synapsi (konkrétně httpsend.THttpSend) a upravím httpsend.THTTPSend.ReadUnknown, httpsend.THTTPSend.ReadIdentity nebo httpsend.THTTPSend.ReadChunked (musíš ověřit, tipnul bych si, že v tvém případě to první) tak, aby to místo zápisu do streamu zavolalo nějakou tvoji událost s daty.

Offline mirus

  • Mladík
  • **
  • Příspěvků: 62
  • Karma: 12
    • Verze Delphi: Delphi 10.2
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #3 kdy: 27-06-2012, 20:58:58 »
Zdar,
pro inspiraci muzes juknout na http://code.blitzaffe.com/pages/delphi/files/mjpeg_decoder_58-41 je tam MJPEGDecoder. Tohle prijima MJPEG stream ve vlakne jako a zpracovava pomoci TMessage. Pri ctyrech IP kamerach aplikace skoro zamrzne diky tomuto reseni. Asi by to chtelo resit ten buffer trosku jinak.

Offline frankee

  • Příspěvků: 16
  • Karma: 3
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #4 kdy: 28-06-2012, 07:17:16 »
přesně toto jsem řešil před rokem,
nakonec jsem zrobil novou komponentu ktera spusti svoje prijmaci vlakno v synapsi  a obrazek se meni sam. (pres critical section)

Te nove komponente nastavis pak jenom IP kamery a auz to jede...

pokud bys ten kod chtel, muzu ti ho poslat ale napred se musim zeptat zakaznika,

Frankee

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1145
  • Karma: 43
    • Verze Delphi: 7, 2010
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #5 kdy: 28-06-2012, 08:24:10 »
Indy dokazi pracovat s jakymkoliv streamem,
delal jsem si vlastniho potomka streamu, ktery bere jen cast souboru pri posilani, a bez problemu

melo by to jit i pro stahovani - stahujes stahujes a pri dosazeni urcite velikosti treba vycistis MemoryStream ;)
(otazka 2 radku)

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 291
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #6 kdy: 28-06-2012, 09:14:12 »
Moc všem děkuji za Vaše příspěvky, nečekal jsem, že toho přijde tolik.
Stáhl jsem pro úplnost i tu Synapsi a od rána se v tom hrabu a ohmatávám cestičku svého poznání ;)
Zkusím nejdřív asi Indy+custom Stream, to by pro mě mohlo být v tuhle chvíli asi nejjednodušší (Synapse je pro mě zcela nová). Dám pak vědět, jak jsem dopadl.

SaLiK : bohužel jak instalace přehrávače, tak i forma ActiveX komponenty mi moc nevyhovují, ale přesto díky!
frankee : díky za nabídku, ale je to pro mě tak trochu "výzva" to rozchodit, takže to zatím zkusím sám...možná ale, že budu nakonec ještě "prstíčkem hrabat" jestli bys mi to neposlal :D
<z> : tohle se mi zdá nejnadějnější, ale trochu se bojím toho, že IdHTTP má ve svojí .Response svůj interní .ContentStream ... No ale doufám, že když je zadán externí stream, tento vnitřní se nepoužije.
nil

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1145
  • Karma: 43
    • Verze Delphi: 7, 2010
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #7 kdy: 28-06-2012, 12:55:06 »
nepouzije, pro stahovani jsem si delal taky svuj stream,
kdyz jsem to potreboval upravit (kombinaci TMemoryStream a TFileStream) a bez problemu ;)

Offline SaLIk

  • Mladík
  • **
  • Příspěvků: 71
  • Karma: 1
    • Verze Delphi: 2010, 10 (Seattle)
    • salikovi.cz
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #8 kdy: 28-06-2012, 19:12:50 »
přesně toto jsem řešil před rokem,
nakonec jsem zrobil novou komponentu ktera spusti svoje prijmaci vlakno v synapsi  a obrazek se meni sam. (pres critical section)

Te nove komponente nastavis pak jenom IP kamery a auz to jede...

pokud bys ten kod chtel, muzu ti ho poslat ale napred se musim zeptat zakaznika,

Frankee

zajimalo by mě: čím si pak stream zobrazoval? jakou komponenout? .. jestli to můžeš povědět  ;) .. díky

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1145
  • Karma: 43
    • Verze Delphi: 7, 2010
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #9 kdy: 28-06-2012, 21:53:34 »
vetsinou se obrazek nacita do TImage ;)

Offline SaLIk

  • Mladík
  • **
  • Příspěvků: 71
  • Karma: 1
    • Verze Delphi: 2010, 10 (Seattle)
    • salikovi.cz
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #10 kdy: 28-06-2012, 22:10:06 »
to jo :) .. ale jak "udělat" video .. načítání jpegů do TImage 25x za sekundu asi nebude moc vhodné řešení

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 291
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #11 kdy: 28-06-2012, 22:38:17 »
SaLiK : proč myslíš, že TImage obnovování 25x za sekundu nezvládne? Btw to se spíš obávám o "průtočnost na hlavní", pardon na síti - když počítám jeden obrázek 640x480 kolem 50kB, tak by 25fps docela slušně ukouslo z průchodnosti (100Mb síť je bohužel ještě leckde standard).
nil

Offline SaLIk

  • Mladík
  • **
  • Příspěvků: 71
  • Karma: 1
    • Verze Delphi: 2010, 10 (Seattle)
    • salikovi.cz
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #12 kdy: 28-06-2012, 23:02:56 »
TImage to určitě zvládne .. tak bych to např. udělal já .. ale připadá mi to jako "sedlácké" řešení a proto by mě zajímalo, jak se to má správně dělat  ;)

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2657
  • Karma: 103
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #13 kdy: 28-06-2012, 23:45:45 »
Tohle znáš? http://graphics32.org/wiki/Main/Graphics32

Hodně lidí to používá pro práci s grafikou:
* Flexible supersampling implementation for maximum sampling quality;
* Flicker-free image displaying components with optimized double buffering via advanced MicroTiles based repaint optimizer;
Embarcadero MVP - Czech republic

Offline SaLIk

  • Mladík
  • **
  • Příspěvků: 71
  • Karma: 1
    • Verze Delphi: 2010, 10 (Seattle)
    • salikovi.cz
Re:Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)
« Odpověď #14 kdy: 29-06-2012, 00:16:23 »
omrknu to .. díky za tip