Главная страница | назад





Article #16181: Storing/Playing an .AVI file in a database

 Question and Answer Database
FAQ1181D.txt Storing/Playing an .AVI file in a database
Category :Database/VCL
Platform :All
Product :All 32 bit
Question:
How can I store an AVI file in a database and then play AVI
files?
Answer:
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 = 144;
{$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 TForm1.Button1Click(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}
Button1.Enabled := false;
Button2.Enabled := false;
{Assign the avi file name to read}
FileStream := TFileStream.Create(
'C:\PROGRA~1\BORLAND\DELPHI~1\DEMOS\COOLSTUF\COOL.AVI',
fmOpenRead);
Table1.Edit;
{Create a BlobStream for the TField Table1AVI}
BlobStream := TBlobStream.Create(Table1AVI, 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}
Table1.Post;
{Enable the buttons}
Button1.Enabled := true;
Button2.Enabled := true;
end;
{Read an avi stored in a blob, and play it}
procedure TForm1.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(Table1AVI, bmRead);
if BlobStream.Size = 0 then begin
BlobStream.Free;
Exit;
end;
{Close the media player}
MediaPlayer1.Close;
{Reset the file name}
MediaPlayer1.FileName := '';
{Refresh the play window}
MediaPlayer1.Display := Panel1;
Panel1.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}
MediaPlayer1.FileName := filename;
MediaPlayer1.DeviceType := dtAviVideo;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
{Unassign the temp file from the media player}
MediaPlayer1.Close;
MediaPlayer1.FileName := '';
{Erase the temp file}
if FileName <> '' then
DeleteFile(FileName);
end;
7/16/98 4:31:28 PM

Last Modified: 01-SEP-99