Q&A

  • TVideo에서 어떻에 소켓으로 전송을.. !??
안녕하세요..

어제에 이어 또 올리는 군여.. 오늘은 약간(?) 아니..

많이 다른 문제로..



TVideo 컴포넌트를 이용하면 쉽사리 화상을 얻을 수 있어서

좋더라구요..



근데.. 이걸 소켓으로 전송을 하고자 한다면 어떤 방식으로 해야 할지요..

TVideo에서 스트리밍 같은걸로 지원을 해주는지...



아니면.. 일반적으로 쓰는.. 화면을 한장 한장 켑쳐 해서 보내야 하는지..

궁금하군요..



지금 자료 뒤져 보면서 보고는 있는데.. 힘드네요.. --;;



이분야는 처음으로 한번 접근 해보는데.. 소켓으로 넘겨 줄려면 어떤 방법으로

해야 할지 모르겠습니다...



이미 시도 해보신 분들이 아마 경험 하시지 않으셨을까 싶으네영...



흑흑.... 그럼.. 좀 있다 뵙죠...



감사함돠.. 읽어 주셔서리..

3  COMMENTS
  • Profile
    김진호 2001.06.16 04:40
    Ziker wrote:

    > 안녕하세요..

    > 어제에 이어 또 올리는 군여.. 오늘은 약간(?) 아니..

    > 많이 다른 문제로..

    >

    > TVideo 컴포넌트를 이용하면 쉽사리 화상을 얻을 수 있어서

    > 좋더라구요..

    >

    > 근데.. 이걸 소켓으로 전송을 하고자 한다면 어떤 방식으로 해야 할지요..

    > TVideo에서 스트리밍 같은걸로 지원을 해주는지...

    >

    > 아니면.. 일반적으로 쓰는.. 화면을 한장 한장 켑쳐 해서 보내야 하는지..

    > 궁금하군요..

    >

    > 지금 자료 뒤져 보면서 보고는 있는데.. 힘드네요.. --;;

    >

    > 이분야는 처음으로 한번 접근 해보는데.. 소켓으로 넘겨 줄려면 어떤 방법으로

    > 해야 할지 모르겠습니다...

    >

    > 이미 시도 해보신 분들이 아마 경험 하시지 않으셨을까 싶으네영...

    >

    > 흑흑.... 그럼.. 좀 있다 뵙죠...

    >

    > 감사함돠.. 읽어 주셔서리..



    저두 그걸 써 봤는데...정말 끝내주더 라구요..

    전 이렇게 했습니다.

    참고로 이경문님인가여?

    그분이 만드신걸 거울 삼아 공부해서 만들었습니다.



    Jpg : TJpegImage;

    Form1: TForm1;

    Stream : TMemoryStream;

    Jpg : TJpegImage;

    FBitmapInfo: TBitmapInfo;

    Acm : TACMWaveFormat;



    procedure TForm1.VideoCapVideoStream(sender: TObject; lpVhdr: PVIDEOHDR);

    var List : TList;

    Count : integer;

    Stream : TmemoryStream;

    Bmp : TBitmap;

    begin

    Stream := TMemoryStream.Create;

    Bmp := TBitmap.Create;



    if Application.Terminated then exit;

    form1.Canvas.Lock;

    FrameToBitmap(Bmp, lpVHdr^.lpData, FBitmapInfo);

    Jpg.Assign(Bmp);

    Jpg.CompressionQuality := 80;

    Jpg.Compress;

    Jpg.SaveToStream(Stream);

    Form1.Canvas.Unlock;

    List := IdTCPServer1.Threads.LockList;

    try

    for Count := 0 to List.Count -1 do

    try

    TIdPeerThread(List.Items[Count]).Connection.WriteInteger(Stream.Size);

    TIdPeerThread(List.Items[Count]).Connection.WriteStream(Stream);

    except

    TIdPeerThread(List.Items[Count]).Stop;

    end;

    finally

    IdTCPServer1.Threads.UnlockList;

    end;

    Stream.Free;

    Bmp.Free;

    end;



    그럼..

  • Profile
    Ziker 2001.06.16 07:43
    답변 감사 드립니다...



    위와 비슷한 방법으로.. 아래와 같이 코딩을 햇습니다.

    근데 돌려 보면.. 'JPEG Error #41' 이라고 뜹니다.. 분명

    문제는 없어 보이는데 말입니다...

    제가 잘못 코딩을 한건지....... 이거 때문에 죽겠군요..

    쉽게 생각을 했떠니만.. 어렵네요.. 휴..



    T.T 다시.. 읽어 주셔서 감사함돠...



    보낼"때 ======================================================

    procedure TForm1.Button1Click(Sender: TObject);

    var

    Stream: TMemoryStream;

    Jpeg : TJpegImage;

    TempSize: Integer;

    begin

    Jpeg := TJpegImage.Create;

    Stream := TMemoryStream.Create;



    Jpeg.LoadFromFile('d:a.jpg');

    Jpeg.SaveToStream(Stream);

    Stream.Position := 0;

    TempSize := SizeOf(Stream);

    ClientSocket1.Socket.SendBuf(Stream,TempSize);

    Jpeg.Free;

    Stream.Free;

    end;









    받을"때 ======================================================









    procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);

    var

    Stream: TMemoryStream;

    Jpeg : TJpegImage;

    TempSize: Integer;



    begin

    Stream:= TMemoryStream.Create;

    Jpeg := TJpegImage.Create;



    TempSize := Socket.ReceiveLength;

    Socket.ReceiveBuf(Stream,TempSize);



    Jpeg.LoadFromStream(Stream);

    Image1.Picture.Assign(Jpeg);



    Jpeg.Free;

    Stream.Free;

    end;







  • Profile
    김진호 2001.06.16 09:23
    Ziker wrote:

    > 답변 감사 드립니다...

    >

    > 위와 비슷한 방법으로.. 아래와 같이 코딩을 햇습니다.

    > 근데 돌려 보면.. 'JPEG Error #41' 이라고 뜹니다.. 분명

    > 문제는 없어 보이는데 말입니다...

    > 제가 잘못 코딩을 한건지....... 이거 때문에 죽겠군요..

    > 쉽게 생각을 했떠니만.. 어렵네요.. 휴..

    >

    > T.T 다시.. 읽어 주셔서 감사함돠...

    >

    > 보낼"때 ======================================================

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > Stream: TMemoryStream;

    > Jpeg : TJpegImage;

    > TempSize: Integer;

    > begin

    > Jpeg := TJpegImage.Create;

    > Stream := TMemoryStream.Create;

    >

    > Jpeg.LoadFromFile('d:a.jpg');

    > Jpeg.SaveToStream(Stream);

    > Stream.Position := 0;

    > TempSize := SizeOf(Stream);

    > ClientSocket1.Socket.SendBuf(Stream,TempSize);

    > Jpeg.Free;

    > Stream.Free;

    > end;

    >

    >

    >

    >

    > 받을"때 ======================================================

    >

    >

    >

    >

    > procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);

    > var

    > Stream: TMemoryStream;

    > Jpeg : TJpegImage;

    > TempSize: Integer;

    >

    > begin

    > Stream:= TMemoryStream.Create;

    > Jpeg := TJpegImage.Create;

    >

    > TempSize := Socket.ReceiveLength;

    > Socket.ReceiveBuf(Stream,TempSize);

    >

    > Jpeg.LoadFromStream(Stream);

    > Image1.Picture.Assign(Jpeg);

    >

    > Jpeg.Free;

    > Stream.Free;

    > end;



    이부분이 잘못 됐네여..

    Jpeg.SaveToStream(Stream);

    Stream.Position := 0;

    TempSize := SizeOf(Stream);

    ClientSocket1.Socket.SendBuf(Stream,Stream.Size);



    SizeOf(Stream); => 는단지 메모리 스트림에 크기울뿐,JPG이미지의 크기는 아닙니다.

    따라서 버퍼에 저장되어 있는 순구 크기는 Stream.Size 가 맞져.



    근데 위 코딩에서 이해가 안가는게..바루 메모리 스트림에서읽러두 될덴데..

    Streamg.LoadFromFile('d:a.jpg');

    Stream.Position := 0;