Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ubacivanje video fajlova u bazu podataka

[es] :: Pascal / Delphi / Kylix :: Ubacivanje video fajlova u bazu podataka

[ Pregleda: 3809 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

XGhost

Član broj: 33279
Poruke: 331
62.113.8.*



+1 Profil

icon Ubacivanje video fajlova u bazu podataka09.04.2009. u 15:03 - pre 182 meseci
Jel mogu (i kako ) u bazu podataka ubaciti i cuvati video fajlove npr avi i sl format
po mogucnosti u firebird ili paradox bazu podataka, te da ih pozivam i pregledam
sa komponentom MediaPlayer.
Proceduru sa koristenjem video fajlova sa hd ili medija znam ali mi je bitno da ih mogu ubaciti
u bazu podataka ili da ih zastitim na drugi nacin od koristenja izvan moje aplikacije
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.dial-up.dsl.siol.net.



+14 Profil

icon Re: Ubacivanje video fajlova u bazu podataka09.04.2009. u 18:38 - pre 182 meseci
Koriscenjem tzv. BLOB polja (binary large object) mozes da strpas u bazu bilo kakav binarni sadrzaj. Na MSSQL serveru odgovarajuci tip podatka je image, na Postgres-u je bytea (byte array) sa FB/IB-om nisam nikad radio mada pretpostavljam da ima nesto slicno (Google kaze BLOB SUBTYPE 0).

Ako nemas napravljen svoj streaming prvo snimis BLOB podatke u privremeni fajl, zatim ga pustas sa MediaPlayer komponentom. Problem sa BLOB-ovima, pogotovo za velika fajlove (video), je da moras da procitas ceo record iz baze pre nego sto mozes da pustis fajl, jer je SELECT atomicna blocking operacija. Ali posto si napisao da bi koristio MediaPlayer komponentu onda u svakom slucaju moras da prvo dovuces ceo fajl iz baze, snimis u temp datoteku i tek onda pustis. Zastiti video sa takvim pristupom ne mozes nikako, jer ce uvek (napredniji) korisnik moci da jednostavno iskopira temp fajl dok se pusta u player-u. Ne mozes ni da zakljucas fajl sa npr. ShareDenyRead jer onda ni MediaPlayer kao samostalni COM objekt nece moci da ga pusti.

Drugi, daleko bolji i tezi nacin je video streaming. Kod video streaming-a ne zapisujes ceo fajl u jedan record u bazi, nego rascepkas video na komade od npr. 128k i svaki komad zapises u svoj record. Cim se prvi komad dovuce iz baze mozes odmah da pustis video, ostali komadi se u pozadini skidaju dok video traje. U tom slucaju mozes da primenis svoj omiljeni algoritam za enkripciju, posle dovlacenja komada iz baze a pre punjenja play bafera, mada ako korisnik nema direktan dostup do baze onda ti enkripcija ni ne treba. Engine koji obezbedjuje potrebni video streaming je npr. DirectShow, jer pretpostavljam da neces "rucno" da radis dekodiranje videa. Programiranje takvog engine-a nije nimalo lak zadatak jer je DShow jedan on najkomplikovnijih API-ja koji postoji pogotovo iz ne-C jezika kao sto je Delphi, sustinski morao bi da napises svoj filter, izgradis graph i drzis palceve da ne eksplodira sve kad pustis. Do sada nisam nasao nijedan DShow program ili primer koji radi iole stabilno.
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

XGhost

Član broj: 33279
Poruke: 331
62.113.8.*



+1 Profil

icon Re: Ubacivanje video fajlova u bazu podataka09.04.2009. u 18:55 - pre 182 meseci
Zahvaljujem na detaljnom odgovoru.
Pokusao sam eksperimente sa blob poljima medjutim sve je zavrsavalo neuspjesno, jel
postoji nacin za reprodukciju flash datoteka koje bi snimao tj stavljao na forme.
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.dial-up.dsl.siol.net.



+14 Profil

icon Re: Ubacivanje video fajlova u bazu podataka09.04.2009. u 20:23 - pre 182 meseci
>Pokusao sam eksperimente sa blob poljima medjutim sve je zavrsavalo neuspjesno
Evo ti primer koriscenja BLOB polja za upis i citanje arbitrarne datoteke.
Code:

var
  St: TFileStream;
  ChunkSize, ByteCount, BuffSize: Integer;
  Buff: String;
begin
  ChunkSize := 16384;  
...
  // Pisanje datoteke u BLOB polje
  St := TFileStream.Create('C:\input.dat', fmOpenRead);
  try
    SetLength(Buff, St.Size);
    try
      BuffSize := 0;
      repeat
        ByteCount := St.Read(Buff[BuffSize + 1], ChunkSize);
        Inc(BuffSize, ByteCount);
      until ByteCount = 0;
      ADOQuery1.Edit;
      ADOQuery1.FieldByName('BlobField').AsString := Buff;
      ADOQuery1.Post;
    finally
      SetLength(Buff, 0);
    end;
  finally
    St.Free;
  end;
 ...
  // Citanje datoteke iz BLOB polja
  Buff := ADOQuery1.FieldByName('BlobField').AsString;
  ByteCount := 0;
  St := TFileStream.Create('C:\output.dat', fmCreate or fmOpenWrite);
  try
    while ByteCount < Length(Buff) do
      if ByteCount + ChunkSize <= Length(Buff) then
        Inc(ByteCount, St.Write(Buff[ByteCount + 1], ChunkSize))
      else
        Inc(ByteCount, St.Write(Buff[ByteCount + 1], Length(Buff) - ByteCount))
  finally
    St.Free;
  end;
end;


>jel postoji nacin za reprodukciju flash datoteka koje bi snimao tj stavljao na forme
Postoji, importuj ActiveX kontrolu Shockwave Flash. Ako je nema potrazi na Google-u "Flash ActiveX" i instaliraj


Edit:
Uhh... moze i daleko jednostavnije :)
Code:

TBlobField(ADOQuery1.FieldByName('BlobField')).LoadFromFile('C:\input.dat');
TBlobField(ADOQuery1.FieldByName('BlobField')).SaveToFile('C:\output.dat');

Samo je trebalo castovati u TBlobField...


[Ovu poruku je menjao Boris B. dana 09.04.2009. u 21:43 GMT+1]
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

XGhost

Član broj: 33279
Poruke: 331
62.113.8.*



+1 Profil

icon Re: Ubacivanje video fajlova u bazu podataka09.04.2009. u 22:14 - pre 182 meseci
Zahvaljujem, sad mi slijedi eksperimentiranje
 
Odgovor na temu

priki

Član broj: 24732
Poruke: 700
*.datalab.si.

ICQ: 174153511


+26 Profil

icon Re: Ubacivanje video fajlova u bazu podataka10.04.2009. u 10:55 - pre 182 meseci
Citat:
Boris B.: ...Na MSSQL serveru odgovarajuci tip podatka je image, na Postgres-u je bytea (byte array) sa FB/IB-om nisam nikad radio mada pretpostavljam da ima nesto slicno (Google kaze BLOB SUBTYPE 0).
.


image tip podataka u MSSQL-u treba izbegavati
izbacuju ih u sledecim verzijama MS SQL servera

http://msdn.microsoft.com/en-us/library/ms187993.aspx

druga stvar, bazu ces uzasno usporiti ako budes "trpao" video fajlove unutra
mislim da ti je mnogo bolje rešenje da ih snimaš na disk, file system, ili da dostupaš do njih preko linkova




 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Ubacivanje video fajlova u bazu podataka

[ Pregleda: 3809 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.