멀티미디어 어플리케이션 성능문제...

declspec의 이미지

안녕하세요

요즘 원격제어를 위해서

화면을 네트워크를 통해서 실시간으로

전송해주는 어플리케이션을 개발중인데요

윈도우 API 로 화면캡춰를 비트맵으로 한다음에

32비트 해상도 화면을 8비트로 변환시키고

나름 RLE 알고리즘을 적용시켜서 비트맵 데이터량을 10% 이하로 압축시키고

그리고 화면을 격자로 잘게 쪼개서 변화가 생기는 부분만을

선택적으로 전송한다음

수신자는 이것을 다시 조립해서 다시 원본 비트맵(8비트) 를 생성하고

화면에 BitBlt 로 뿌리는 방식으로

만들었는데요...

어느정도 완성이 되서 테스트를 했는데

동서울 - 남서울 정도의 거리에서 테스트를 해보니

네트워크 대역폭을 한 10~20KB/s 정도 사용했습니다

그리고 네이트온 원격제어도 해봤는데 마찬가지로 이것도 10~20KB/S 정도를 사용하더군요

그런데 성능차이가 네이트온 원격제어가 한 50배는 좋은것 같습니다 -_-;

네이트온 원격제어의 경우 원격으로 상대방 화면을 보면서 제어하는데

거의 실시간 수준의 느낌으로 아무 불편함이 없고 화면 품질도 꾀 좋은반면

제가 만든 어플리케이션으로 제어를 하면

굉장히 답답합니다;; 뭐 창하나 열면 보이는데 몇초는 걸립니다

네이트온 원격제어의 경우 1초 이내에 반응이 오는데...

물론 네이트온 원격제어의 경우 원격제어 솔루션 전문회사의 제품을 쓰는거니

그거랑 같은 성능은 못내겠지만 최소한 절반 수준은 따라갈수 있으리라 생각했는데

10분의 1에도 못미치네요

어떤 부분때문에 가장 성능에 치명적인 차이가 날까요? ㅠㅠ

화면 압축률의 차이인지(이부분은 그렇게 큰차이는 없을것 같습니다)

아니면 윈도우 API 로 화면 캡춰를 하고 조립하고 BitBlt 하는게 느려서 그런건지...

비밀스런 알고리즘이 따로있는지 모르겠네요

조언 부탁드립니다~

PS. 수정합니다. 알고보니 스니퍼로 네트워크를 분석할때 RawSocket 을 선택했더니
실제랑 다르게 패킷이 캡춰되더군요 ㅠㅠ
Pcap 으로 다시 측정해보니
제가 개발한 어플리케이션은 평균적으로 수백KB/S 의 대역폭을 소모하네요 ㅠㅠ
그런데 네트워크 채널이 수백 KB/S 를 제공해 주고 있는데도 속도가 매우 느립니다
이건 결국 단말이 발생시키는 트래픽이 너무 커서 네트워크에서 병목현상이 일어나서
느려지는게 아니라 양쪽 단말이 이미지 데이터를 처리하는 속도가 너무 느려서
일어나는 현상이겠죠?

어떻게해야 이걸 빠르게 할수 있을까요? ㅠㅠ

jachin의 이미지

갑자기 뜬금없이 MPEG 공부냐고 말씀하시겠지만,
MPEG 동영상은 본래 각각의 이미지 프레임 컷에서,
변화된 이미지 값만을 추출하여 압축하는 원리로 만듭니다.

화면 전체 이미지를 전달하게 하셨죠?
색상 변환과 RLE를 적용한다 하더라도,
매 시간별 스크린샷을 떠서 보낸다고 하면
네트워크 대역도 대역이지만,
시스템 연산량도 계속 높아져서
컴퓨터 성능이 저하됩니다.

시스템 이벤트가 일어날 때에만,
(가령 마우스가 움직인다거나, 키보드 이벤트가 있을 때에만)
이전 스크린샷과 다른 부분만 추출하고 압축하여 보내면 됩니다.
스크린샷 버퍼도 적용하시구요...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.