|
일반적인 방법으로 화상 통신을 구현하고 있습니다.
서버측에서 영상을 캡쳐를 하고 JPEG로 만들어서 클라이언트로 날려줍니다.
지금은 만드는 과정이라 연속영상이 아니라 버튼을 누르면 한 프레임씩
캡쳐하도록하였는데 서버에서 데이터를 날려주기 전에 영상을 저장하고 (a.jpg)
클라이언트에서 받은 프레임을 파일로 저장해서(b.jpg) 비교를 하고 있습니다.
버튼을 누를때마다 클라이언트의 화면이 변하지 않더라구요
그래서 찾아보니까 전송된 이미지가 계속 누적되고 있습니다.
b.jpg 용량이 프레임수 만큼 계속 누적이 됩니다. (25k + 24k + 25k ...... )
아무래도 TMemoryStream을 사용하면서 포인터가 계속 증가하는것 같습니다.
그렇다고 " rstream->Position = 0; " 를 아무곳에나 넣어주니깐 에러가 나더라구요
아래는 클라이언트 소켓에서 데이터를 읽고 디스플레이 하는 부분입니다.
void __fastcall TForm1::ClientSocket1Read(TObject *Sender, TCustomWinSocket *Socket)
{
TJPEGImage *jpg1 = new TJPEGImage();
int len=Socket->ReceiveLength();
Socket->ReceiveBuf(temp,len);
rstream->Write(temp,len);
rstream->Position = 0;
jpg1->LoadFromStream(rstream);
Edit2->Text=rstream->Position;
jpg1->SaveToFile("b.jpg");
PaintBox322->Canvas->Draw(0,0,jpg1);
}
//---------------------------------------------------------------------------
첫 프레임만 동작하고 두번째부터는 화면이 갱신되지 않습니다.
스트림에 포인터 문제인것 같습니다. 수정좀 부탁드리겠습니다.
|