Play Flash Video (FLV) from Stream
FlashPlayerControl
can play Flash Video (FLV) from external files, URLs, or directly from a TStream
.
When loading FLV content, no temporary files are created—playback runs directly from memory.
This also allows encrypted videos to be embedded as resources in your application, ensuring the FLV is never saved or extracted to disk.
Flash Movie Setup
To play FLV from a stream, create a Flash movie that loads a video from a private URL (e.g., http://FLV/FlashVideo.flv
).
Example ActionScript code:
var netConn:NetConnection = new NetConnection();
netConn.connect(null);
var netStream:NetStream = new NetStream(netConn);
my_video.attachVideo(netStream);
netStream.setBufferTime(0);
netStream.play("http://FLV/FlashVideo.flv");
When Flash requests http://FLV/FlashVideo.flv
, FlashPlayerControl
intercepts the request and provides the video content.
Handling Resource Requests
Use the global procedure SetGlobalOnLoadExternalResourceHandler to supply FLV data when Flash requests it.
Delphi Example
type
TMainForm = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure OnGlobalLoadExternalResource(const URL: WideString; Stream: TStream);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
SetGlobalOnLoadExternalResourceHandler(OnGlobalLoadExternalResource);
end;
procedure TMainForm.OnGlobalLoadExternalResource(const URL: WideString; Stream: TStream);
var
ResourceStream: TResourceStream;
begin
if URL = 'http://FLV/FlashVideo.flv' then
begin
ResourceStream := TResourceStream.Create(0, 'FlashVideo', 'FLV');
ResourceStream.SaveToStream(Stream);
ResourceStream.Free;
end;
end;
C++Builder Example
class TMainForm : public TForm
{
__published:
void __fastcall FormCreate(TObject *Sender);
private:
void __fastcall OnGlobalLoadExternalResource(const WideString URL, Classes::TStream* Stream);
};
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
SetGlobalOnLoadExternalResourceHandler(OnGlobalLoadExternalResource);
}
void __fastcall TMainForm::OnGlobalLoadExternalResource(const WideString URL, Classes::TStream* Stream)
{
if (URL == WideString("http://FLV/FlashVideo.flv"))
{
TResourceStream* ResourceStream = new TResourceStream(0, "FlashVideo", "FLV");
ResourceStream->SaveToStream(Stream);
delete ResourceStream;
}
}