| |
| 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;
|
|
| Hits/month |
2,500,000+ |
Downloads (Since May 2000) |
7,393,709 |
| Total Files |
6,023 |
| Forum msgs |
7,670 |
| Articles/FAQs |
70+/900+ |
Top Selling Software at Amazon
|