Search

'화상강의프로젝트'에 해당되는 글 3건

  1. 2008/08/01 화상강의 솔류션 개발 강좌 2회
  2. 2008/06/17 화상강의 프로그램을 만들기 위한 준비. (1)
  3. 2008/06/17 화상강의 솔류션 개발 강좌 1회 (2)

화상강의 솔류션 개발 강좌 2회

화상강의프로젝트 2008/08/01 01:48 Posted by <!--r'i"z&i\n+#]]x juree23
자~ 오랜만에 글을 쓰는것 같습니다. 자주 화상강의 강좌를 쓸려고 했는데, 시간이 별로 없다는 변명아닌 변명만 늘어놓게 되네요~^^;
우선 1회때 기초적인 부분을 배웠으니, 이젠 바로 실전으로 들어가 보겠습니다.
제가 요즘 화상강의 프로그래밍 책을 써볼려고 정리하는 내용을 많이 인용하겠습니다.
책 나오면 사주실분~ 손!~~~^^ㅋ
암튼~ 시작하겠습니다.
우선 어떤 프로그램을 만들것인지 설계에 대해서 이번시간엔 알아보도록 하겠습니다.

설계
<목표>
1. 웹캠과 마이크를 이용한 화상강의 지원.
2. 화이트 보드 지원.
3. P2P통신 지원.

1. 웹캠과 마이크를 이용한 화상강의 지원.

위에서 보는 것과 같이 목표는 크게 4가지로 잡는다. 우선 1번 웹캠과 마이크를 이용한 화상강의를 지원하기 위해서 개발방법은 크게 VFW(VIDEO FOR WINDOW)방법과 DIRECTSHOW를 이용하는 방법이 있다. VFW는 과거에 많이 사용하던 LOW LEAVEL 단의 윈도우 API라고 생각하면 된다. 그리고 DIRECTSHOW는 마이크로 소프트에서 지원하는 개발 SDK에 포함되어 있는 멀티미디어 개발 SDK라고 이해하면 된다. 과거에는 많은 개발자들이 VFW SDK를 이용하여 많이 개발을 했었지만, 근래에는 DIRECTSHOW로 개발하는 추세이다.그럼 각각의 방법에는 어떤 장단점이 있는지 확인해 보고 넘어가도록 하자.

--------------------------------------------------------------------------
방법                   VFW                      DIRECTSHOW
--------------------------------------------------------------------------
구동방식           CALLBACK방식         EVENTDRIVEN방식
--------------------------------------------------------------------------
최신 기기지원    지원못하는것 존재      대부분 지원
--------------------------------------------------------------------------
CPU점유율         적다.                       높다
--------------------------------------------------------------------------
구현 난이도        중                         상
--------------------------------------------------------------------------

우선 웹캠과 마이크를 지원하기 위해서는 각각 어떤 SDK를 사용할지를 먼저 정해야 한다.
먼저 웹캠은 위에서 말한 것처럼 크게 VFW를 사용하여 웹캠을 제어하고, 데이터를 가공하는 방법이 있고, DIRECTSHOW를 사용하여 웹캠을 제어하고, 데이터를 가공하는 방법이 있다.
필자가 경험상 사용해본 결과,
추천할 만한 것은 DIRECTSHOW방식을 추천한다. 우선 현재많은 개발자들이 사용하고 있으며, 어떤 컨트롤에 대한 제어권이 이벤트방식으로 넘어오기 때문에 프로그램 코드를 작성할 때 , 상당히 깔끔하고 명확한 프로그래밍을 할수 있다. 그리고 VFW같은 경우는 나온지 오래된 SDK이기 때문에 최신 기기에 대한 지원이 되지 않는 경우도 있다. 또한 마지막으로 DIRECTSHOW를 사용하면 VFW에서는 영상의 변형이나 효과를 직접 이미지 바이트 조작을 통해 하드코딩해야하는 반면, 필터를 DIRECTSHOW에 붙여넣는 방식으로 쉽게 그리고 점더 유연하게 영상의 변형이나 효과를 줄수있다.물론 경험에 따르면 VFW가 DIRECTSHOW보다 개발의 난이도가 좀더 적은 점이나. CPU점유율이 좀더 낮다는 점이 있지만, 전체적인점으로 볼 때 DIRECTSHOW SDK를 사용하는 것을 추천하고 싶다.
따라서 우리도 웹캠을 제어하고 웹캠에서 생성된 이미지 데이터를 사용하는 부분에는 DIRECTSHOW SDK를 사용하도록 하겠다.

우선은 오늘은 웹캠에 대한 기본적인 지식을 배워보았습니다.
다음번에는 오디오에 대해서 알아보도록 하겠습니다.

즐거운 프로그래밍 하자구요!!

화상강의 프로그램을 만들기 위한 준비.

화상강의프로젝트 2008/06/17 21:55 Posted by <!--r'i"z&i\n+#]]x juree23

화상강의 프로그램을 만들기 위해서 간단한(?) 몇가지의 프로그램 툴들과 라이브러리들이 필요합니다.

제가 강좌를 하는데 필요한 툴들이며 앞으로 강좌에 필요한 툴들이니 꼭 준비해 두세요.

우선 언어는 c++, MFC를 사용할것이며, 라이브러리로는 화상쪽은 DIRECTSHOW 라이브러리를 이용할것입니다.

DIRECTSHOW는 DIRECTX SDK에 같이 있습니다 MS홈페이지에서 DIRECTX SDK 8.0이상을 다운받아 설치하시고, 라이브러리,헤더파일을 모두 패스를 잡아주시게 바랍니다.

그리고 화상강의 프로그램에서 영상과 음성의 데이터 크기가 상당하기 때문에 압축을 하여 통신을 하게 되는데 그때 필요한 코덱은 H263영상 코덱과 G723.1음성코덱을 사용합니다.(이 코덱은 오픈소스로 구한것입니다.)

이 코덱은 제가 자료실에 등록해 놓겠습니다.

그리고 비주얼 스튜디오 6.0을 설치해 주시면 모든 준비는 끝이 나게 됩니다.

스튜디오버전은 꼭 6.0으로 맞추어 주세요..

버전이 틀린경우..에러의 원인이 될수도 있습니다.

자~~ 준비가 되셨나요? 그럼.. 다음 강좌부터 화상강의 솔류션 개발 강좌 1회를 시작하겠습니다.

*^^*

화상강의 솔류션 개발 강좌 1회

화상강의프로젝트 2008/06/17 21:54 Posted by <!--r'i"z&i\n+#]]x juree23

먼저 화상강의 솔류션 개발에서 가장 중요한 요소들 몇가지를 집고 넘어가겠습니다.

이 요소들은 퍼포먼스에서 상당한 부분을 차지하는 요소들이기 때문에 항상 머리에 두고 프로그램을 하셔야 한다고 생각합니다.,


1. 음성,화상 압축

- 실시간으로 음성,화상을 전송하게 되면 이러한 음성,화상 데이터의 원본 데이터 크기는 상당한 크기를 갖기 때문에 원본을 쌩(?)으로 전송을 한다는 것은 상당한 어불성설입니다. 그래서 꼭 음성,화상을 압축하여 전송하고 그러한 데이터를 받아서 다시 복호화 시켜주는 프로세스가 필요합니다.

일반적으로 화상 압축코덱은 H.263을 이용합니다. 영상 전체를 그리드로 여러개의 작은 조각으로 자르고 전 프레임과 비교후 바뀐부분의 조각만 전송을 하게 하여 전 프레임과 현프레임의 중복된 영상 데이터를 배제하는 방법이라고 생각하시면 됩니다. 이러한 방법은 영상의 퀄리티에도 많은 영향을 줄수가 있습니다.

프레임의 영상을 10X1O으로 자른 경우와 50X50으로 잘라서 비교하는 경우 영상의 퀄리티나 압축 로드,그리고 화질에 많은 영향을 줄수가 있겠죠?

그리고 다른방법으론 다이아몬드형으로 자르는 방법도 있다고 합니다. 우선 이렇게만 알아두시면 되겠네요.

음성 압축은 주로 G.723을 이용합니다. 많은 다른 코덱들이 있지만 그나마 시스템 로드나 압축면이나,그리고 속도면에서 괜찮은 코덱이라고 생각합니다.

음질은 라디오 음질 정도로 생각하시면 됩니다. 물론 굳이 이 코덱들로 사용하지 않으셔도 됩니다. 음질을 높이시려면 MP3로 압축할수도 있고, 영상은 JPEG로 압축할수도 있습니다. 하지만 저희가 만드는 솔류션은 하이 레이턴시를 감안한 프로그램입니다. 영상,음성의 질이 높아질수는 있지만, 그만큼 많은 데이터를 전송,수신해야하는 부담이있기때문에 적정한 수준을 유지한것이 좋지 않을까 생각합니다.


2. 통신 대역폭

- 음성,화상을 전송하고 수신하는데는 통신 대역폭이 필요합니다.

가장좋은 상태는 큰 대역폭과 낮은 레이턴시의 상태라고 생각합니다. 여기서 대역폭이란 얼마나 많은 데이터를 보낼수 있느냐 라고 생각하시면 됩니다. 그리고 레이턴시는 응답속도라고 생각하시면 됩니다.


3. 소켓 통신

- 소켓 통신의 효율성을 꼭 염두해 두어야 합니다.그리고 프로토콜 접속에서의 내부 아이피에 접속을 하는 방법과 p2p 방식을 사용할것이기 때문에 다양한 방화벽에서의 접속 가능하게 하는 법을 염두해 두어야 합니다. 그러한 방법으로는 포트포워딩이나 홀펀칭방법등이 있는데 그런것은 그때 설명하도록 하겠습니다.

통신쪽이 가장 중요하다고 생각합니다.


이만 줄이고요~

항상 이점 염두해 두세요~

자~ 그럼 다음에..