Delphi32.com - Home!
| Home/News | Downloads | Forums | D32 Magazine | Resources | Info and Facts |  
 
 Storing/Playing an .AVI file in a database


How can I store an AVI file in a database and then play AVI files?   

    AVI files can be stored in BLOB (binary large object) fields. The easiest way to play an AVI file stored in a BLOB is to write the BLOB data to a temporary file, then let the mulimedia player play the file. The following example demonstrates how to store an AVI file to a BLOB field, and also play the AVI file from the BLOB field. Example:

    var
      FileName : string;
    {This function gets a temporary file name form the system}
    function GetTemporaryFileName : string;
    {$IFNDEF WIN32}
      const MAX_PATH =  44;
    {$ENDIF}
    var
     {$IFDEF WIN32}
      lpPathBuffer : PChar;
     {$ENDIF}
      lpbuffer : PChar;
    begin
     {Get the file name buffer}
      GetMem(lpBuffer, MAX_PATH);
     {$IFDEF WIN32}
     {Get the temp path buffer}
      GetMem(lpPathBuffer, MAX_PATH);
     {Get the temp path}
      GetTempPath(MAX_PATH, lpPathBuffer);
     {Get the temp file name}
      GetTempFileName(lpPathBuffer,
                      'tmp',
                      0,
                      lpBuffer);
     {Free the temp path buffer}
      FreeMem(lpPathBuffer, MAX_PATH);
     {$ELSE}
     {Get the temp file name}
      GetTempFileName(GetTempDrive('C'),
                      'tmp',
                      0,
                      lpBuffer);
     {$ENDIF}
     {Create a pascal string containg}
     {the  temp file name and return it}
      result := StrPas(lpBuffer);
     {Free the file name buffer}
      FreeMem(lpBuffer, MAX_PATH);
    end;
    {Read a AVI file into a blob field}
    procedure TForm .Button Click(Sender: TObject);
    var
      FileStream: TFileStream; {to load the avi file}
      BlobStream: TBlobStream; {to save to the blob}
    begin
     {Allow the button to repaint}
      Application.ProcessMessages;
     {Turn off the buttons}
      Button .Enabled := false;
      Button2.Enabled := false;
     {Assign the avi file name to read}
      FileStream := TFileStream.Create(
        'C:\PROGRA~ \BORLAND\DELPHI~ \DEMOS\COOLSTUF\COOL.AVI',
        fmOpenRead);
      Table .Edit;
     {Create a BlobStream for the TField Table AVI}
      BlobStream := TBlobStream.Create(Table AVI, bmReadWrite);
     {Seek to the Beginning of the stream}
      BlobStream.Seek(0, soFromBeginning);
     {Delete any data that may be there}
      BlobStream.Truncate;
     {Copy from the FileStream to the BlobStream}
      BlobStream.CopyFrom(FileStream, FileStream.Size);
     {Free the streams}
      FileStream.Free;
      BlobStream.Free;
     {Post the record}
      Table .Post;
     {Enable the buttons}
      Button .Enabled := true;
      Button2.Enabled := true;
    end;
    {Read an avi stored in a blob, and play it}
    procedure TForm .Button2Click(Sender: TObject);
    var
      FileStream: TFileStream; {a temp file}
      BlobStream: TBlobStream; {the AVI Blob}
    begin
     {Create a blob stream for the AVI blob}
      BlobStream := TBlobStream.Create(Table AVI, bmRead);
      if BlobStream.Size = 0 then begin
       BlobStream.Free;
       Exit;
      end;
     {Close the media player}
      MediaPlayer .Close;
     {Reset the file name}
      MediaPlayer .FileName := '';
     {Refresh the play window}
      MediaPlayer .Display := Panel ;
      Panel .Refresh;
     {if we have a temp file then erase it}
      if FileName <> '' then
        DeleteFile(FileName);
     {Get a temp file name}
      FileName := GetTemporaryFileName;
     {Create a temp file stream}
      FileStream := TFileStream.Create(FileName,
                                       fmCreate or fmOpenWrite);
     {Copy the blob to the temp file}
      FileStream.CopyFrom(BlobStream, BlobStream.Size);
     {Free the streams}
      FileStream.Free;
      BlobStream.Free;
     {Setup the Media player to play the AVI file}
      MediaPlayer .FileName := filename;
      MediaPlayer .DeviceType := dtAviVideo;
      MediaPlayer .Open;
      MediaPlayer .Play;
    end;
    procedure TForm .FormDestroy(Sender: TObject);
    begin
     {Unassign the temp file from the media player}
      MediaPlayer .Close;
      MediaPlayer .FileName := '';
     {Erase the temp file}
      if FileName <> '' then
        DeleteFile(FileName);
    end;
    

     



  << Previous Faq     Complete List     Next Faq >>  



 
 Hits/month  2,500,000+ 
 Downloads
 (Since May 2000)
 7,393,709 
 Total Files  6,023 
 Forum msgs  7,670 
 Articles/FAQs  70+/900+ 
Kylix
Tips n Tricks
FAQs
Knowledge Base
Bug Listings
Articles
Books
Newsgroups
Links
Submissions
Testimonials
Advertising
Contact Us
About Us
Search Amazon:
Top Selling Software at Amazon

| Home/News | Downloads | Forums | Resources | Info and Facts | Testimonials |
  Site Search:
 


Comments/Problems: Webmaster@delphi32.com
Copyright © 1998-2006, Delphi32.com. All rights reserved.
Terms of Use