procedure Tvchatroomfrm.MycSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
Receivejpg : TJpegImage;
begin
Receivejpg := TJpegImage.Create;
Socket.ReceiveBuf(Receivejpg,sizeof(socket.ReceiveLength));
image1.Picture.Graphic := Receivejpg;
Receivejpg.free;
end;
procedure Tvchatroomfrm.MyScreenFrameCallback(sender: TObject; lpVhdr: PVIDEOHDR);
var
vv : TBitmapInfo;
nSize,nLoop : Integer;
Sendjpg : TJpegImage;
begin
if MysSocket.Socket.ActiveConnections > 0 then begin
if ((iIncFrame mod iPtnFrame) = 0) Then Begin
vv := MyScreen.BitMapInfo; // 중요함...
FrameToBitmap(bitmap, lpvhdr.lpData, vv);
Sendjpg := TJpegImage.Create;
Sendjpg.Assign(bitmap);
for nLoop := 0 to MysSocket.Socket.ActiveConnections - 1do begin
MysSocket.Socket.Connections[nLoop].SendBuf(Sendjpg,sizeof(Sendjpg));
Sendjpg.free;
end;
End;
end;
inc(iIncFrame);
end;
MyScreenFrameCallback-> Tvideo 이벤트인데요
화상캠이 캡춰될때마다 이메소드가 실행되는데 소스에서보시면아시겟지만
캡춰해서 비트맵으로만들고 이걸 jpg로만들어서 전송을 합니다.
이걸 클라이언트소켓이 Readbuf해서 jpg를 이미지보여주는 콤포넌트에
넣어주는데 에러가나네요.
보내주는소켓에서 보내주는패킷으로 다른 이미지콤포넌트에다가
보면 제대로 jpg가 나오는데 이상하네요
문제점을 아시는분은 강한 태클부탁드립니다.
[...]
한마디로 엄청난 벌레를 만들었네요.
SendBuf(Sendjpg,sizeof(Sendjpg));
이 문장은 말이 않됩니다.
에러는 않 나지만 치명적인 벌레 입니다.
백날 보내봐야 데이타는 가지 않습니다
sizeof(Sendjpg) 를 실제 보세요 몇 바이트 인지.
Sendjpg.SaveToStream(Stream);
SendBuffer( Stream.Memory ,Stream.Size );
물론 SendStream(...) 도 되겠죠.
이렇게 해야 실제 그림이 보내 집니다.
당근 받는것도 역순으로 해야 됩니다.