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;  
  }  
}