Streaming obrazu do serwera flash

0

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.

0

Nie bardzo rozumie co ty chcesz zrobić ale na pewno kroczysz w złym kierunki. Z tego co widze to chcesz przy pomocy delphi rozsyłać wideo przy uzyciu red5 do clientów. Jednym słowem Fail ale jak już koniecznie chcesz to poczytaj o specyfikacji protokołu RMTP http://www.adobe.com/devnet/rtmp/ którego używa Red5.

A teraz pare słów o udostepnianiu stremingu video, audio w red5:
W Red5 NIE MA czegoś takiego jak niby dodajesz wideo i ono się rozsyła do clientów. Ogólnie działa to tak że dodajesz wideo pod jakąś nazwą czy to z poziomu clienta czy serwera. A Client aby go odtworzyć musi podać "nazwę" tego streamu. Jeśli koniecznie chcesz przesyłać poszczególne obrazki do serwera to uzyj do tego flex'a i po prostu skompiluj jako aplikacje typu desktop. na pewno jest to szybsze i łatwiejsze niż delphi. Jeśli nie chcesz no to pozostaje ci grzebanie w specyfikacji i oprogramowywanie własnego protokołu, w co wątpie że ci się uda i wątpie że znajdziesz gotowy komponent do tego. Bo ledwo pół roku temu ta specyfikacja została otwarta, do tego dochodzi jeszcze zabawa z kodowaniem...

0

Dziękuję za odpowiedź, wiele wyjaśniła :). Tak myślałem, że idę w złym kierunku korzystając w tym wypadku z Delphi. Zrobię tak, jak powiedziałeś - skorzystam z Flexa :). Pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1