간단한 화상챗 프로그램을 만들었습니다.
우선 TVideo와 Indy 를 사용하였습니다.
화상패킷이 만들어지는
TVideo 콜백 안에서하는일은
lpvhdr.lpData->bmp 변환->jpg 변환-> jpg 압축->메모리스트림 담기->
메모리스트림->서버와 클라이이언트간의 지정된 Record Set 패킷안에 담기->Indy 날림
화상패킷을 받아들이는 Indy Client 에선
지정된 RecordSet 을 jpg로 변환 Image 콤포넌트에 뿌림
이런식으로 일을 처리하게끔해놓았습니다.
대충 눈에 티가안날정도로 jpg를 압축하니 한패킷당 4000 바이트 이내가 나오는데
질문1) 화상에 무리가가지않고 더이상 줄이는 방법은 없는지요?
그리고 콜백함수내에 매번 패킷을 보내는게아니라 5번에 한번씩보내도록 해놓았는데
이또한 Cpu점유율이 높진않았지만 무시할수준은 아닙니다.
질문 2) 위와같은 방법으로 말고 다른방법으로 Cpu 점유율은 낮출순 없는지요?
lpvhdr.lpData->bmp->jpg->jpg 압축->Memory Stream->패킷에담기
꽤많은 가공과정을 거칩니다 위와같이하니 화상패킷용량자체는 1/10 수준으로 줄었지만
이또한 개선과정이 필요할듯합니다
질문 3) 가공과정을 줄이고또한 용량또한 줄일방법은 없는지요?
나름대로 고생해서 만들었지만 선뜻 다른사람에게 써보라고하기엔
너무 부끄럽습니다.
개선과정이있으면 여지없이 지적해주십시요
ps) 화상패킷을 틀린부분만 날리는 방법이있다고했는데 TVideo로는 어디로가야할지모르겠습니다.
jpg자체가 압축알고리듬을 사용하므로 한번더 압축하더라도 큰 효과가없을 것 같군요 (jpg를 zip으로 압축해보면 큰 차이가 없습니다.)
그냥 bmp -압축stream-> 클라이언트에서 bmp복원 보여주기 하는 것으로 충분할 것 같군요