Witam,
Muszę stworzyć aplikację, która będzie przesyłała strumieniem screencast do serwera red5. Na chwilę obecną mam taki kawałek kodu:
var
Size: Integer;
Ms : TMemoryStream;
Buf: Array[0..15359] of Byte;
JPG: TJpegImage;
Bitmap: TBitmap;
Can: TCanvas;
begin
Application.ProcessMessages;
TCPClient.Active:=true;
TCPClient.Connect;
stop:=false;
Bitmap:=TBitmap.Create;
Bitmap.PixelFormat:=pf24bit;
Bitmap.Width := Screen.Width;
Bitmap.Height := Screen.Height;
Can := TCanvas.Create;
repeat
Application.ProcessMessages;
sleep(100);
Can.Handle := GetWindowDC(GetDesktopWindow);
Bitmap.Canvas.CopyRect(Rect(0, 0, Screen.Width, Screen.Height), Can, Rect(0, 0, Screen.Width, Screen.Height));
Ms := TMemoryStream.Create;
JPG:= TJpegImage.Create;
JPG:= ConvToJpg(Bitmap);
try
JPG.SaveToStream(Ms);
with TCPClient do
begin
Size := Ms.Size;
Ms.Position := 0;
SendBuf(Size, SizeOf(Size));
while Ms.Position <> Ms.Size do
begin
Sleep(5);
Application.ProcessMessages;
Size := Ms.Read(Buf, SizeOf(Buf));
SendBuf(Buf, Size);
end;
end;
finally
Ms.Free;
end;
until stop;
JPG.Free;
Bitmap.Free;
.. jednak nie wiem, czy tędy droga, ponieważ nie udaje mi się odebrać tego strumienia przez aplikację napisaną we Flashu. Inna sprawa - czy wysłany strumień posiada taką samą nazwę jak w aplikacji? Komponent TCPClient ma ustawiony host: rtmp://localhost/oflaDemo.