Delphi > Obecné

Čím přijmout video-stream z IP kamery? (nekonečný HTTP GET)

(1/5) > >>

Morrison:
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)?

SaLIk:
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

pepak:

--- Citace: Morrison  27-06-2012, 13:57:58 ---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)?
--- Konce citace ---
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.

mirus:
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.

frankee:
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

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi