이글을 작성한 이후 소스를 직접 빌드 할 수 있도록 변경하였습니다. 코어 모듈의 민감한 부분들을 모두 dll로 제공하는 방식으로 전환하였습니다.
제공되는 소스 및 dll 파일은 공부를 위해서 오픈 된 것 일 뿐, 상업적인 사용은 물론 복제 및 무단 배포를 허용하지 않습니다.
오픈 소스에서 가져온 dll은 마음대로 사용하셔도 됩니다.
여전히 RyuLib가 필요합니다. (http://ryulib.tistory.com/279)
우선 http://ryulib.tistory.com/280 포스트를 보시면, HiMyTV 재생기에 대한 코어 모듈 정보가 있습니다. 해당 포스트는 일단 참고로만 알고 계시고 첨부터 복잡하게 이해하거나 정성 들여서 읽으실 필요는 없습니다.
빈 프로젝트 열기
위 링크를 클릭하시면 빈 폼만이 제공되는 프로젝트 파일이 있습니다. 이미 언급한 것처럼 핵심 모듈은 제공 할 수가 없기 때문에 빌드가 되지는 않습니다.
빈 폼만이라고 했지만, 프로젝트를 열어보시면 무엇인가 잔뜩 포함되어 있습니다. 그것들은 바로 코어 모듈입니다. 저는 응용 어플리케이션을 작성 할 때에도 UI와 코어를 분리해서 개발 할 수 있는 MVC와 유사한 라이브러를 이용합니다.
결국 위의 링크에는 "빈 메인 폼" + "코어 모듈" 두 개가 있는 것 입니다.
코어 모듈 초기화 및 종료 처리
위의 링크에는 코어 모듈의 초기화 및 종료 처리가 되어 있는 리비젼이 표시됩니다.
무엇이 변했는 지는 아래의 링크를 클릭하시면 알 수가 있습니다. 일단 클릭하신 이후 나타나는 브로우져 창을 보면서 설명을 읽어 나가시기 바랍니다.
오른쪽에 나타나는 소스와 같이, 메인 폼에 OnCreate 이벤트에서 "TCore.Obj.Initialize" 를 실행해주면 초기화가 진행됩니다. OnClose 이벤트에서는 "TCore.Obj.Finalize" 로 종료 처리를 하고 있습니다.
코어 모듈의 초기화와 종료 처리는 개발자가 스스로 알아서 할 수 있도록 저는 언제나 코어 모듈에는 위와 같은 두 메소드를 지원하고 있습니다.
22-23: 라인에 보시면 코어 모듈이 있는 Core 유닛을 참조하고 있습니다.
TCore 클래스에는 "class function obj" 가 정의 되어 있어 싱글톤 패턴을 이용하여 객체를 참조 할 수 있도록 되어 있습니다. 해당 구현은 아래 링크를 참고하시면 됩니다.
메인 폼처럼 전역 변수를 사용해서 객체에 접근해도 되겠지만, 단 하나의 객체만이 존재하면 프로그램 생명 주기 내내 필요한 것이기 때문에 싱글톤이 더 편하다고 판단하였습니다.
간단한 녹화 재생 실습
위의 링크에는 간단한 녹화 재생이 처리 된 상태입니다.
변한 것은 메인 폼에 콤포넌트 몇 개 내려 놓은 것과 함께 코딩이 추가 된 것입니다. 일단 추가 된 코드를 살펴보도록 하겠습니다.
41-49: 라인을 보시면 실행 파라메터가 있을 경우에는 해당 파라메터의 파일을 오픈하고, 파라메터 없이 실행 되었을 경우에는 OpenDialog 를 실행해서 재생 할 파일을 묻도록 되어 있습니다. 이때 파일은 http://www.himytv.com/ 프로그램으로 녹화된 것이어야 합니다.
아래는 위의 코드를 빌드한 재생기 프로그램입니다. 지난 번 FFMPEG for Delphi를 강의 했던 파일을
http://goo.gl/j3IzM 에서 다운 받아서 재생해보시면 됩니다. 음성과 함께 PC 화면 녹화 내용이 출력 될 것 입니다.
54-59: 라인에서는 타이머를 이용해서 주기적으로 TCore.Obj.GetBitmap(Bitmap) 메소드를 실행하고 있습니다. 교재 화면에 새로운 이미지가 있다면 GetBitmap은 true를 리턴하면서 파라메터에 넘겨준 Bitmap 객체에 해당 이미지를 덮어 쓰게 됩니다. 즉, 녹화 파일을 디코딩하면서 새로운 화면이 나타 날 때마다 화면에 표시하게 됩니다.
이번 포스트에서는 코어 모듈을 UI와 분리하여 개발하는 장점을 제대로 보여 주지는 못했습니다. 이것은 앞으로 풀어갈 숙제이며, 처음부터 너무 많은 것을 설명하기보다는 작은 코드를 통해서 쉽게 기본 배경을 이해하는데 집중하였습니다.
HiMyTV 방송 서버 구조 #2 - DB에 대한 비동기 처리 (0) | 2013.07.22 |
---|---|
HiMyTV Player 만들기 #3 - Core Module에 대한 이해 계속 (0) | 2013.07.13 |
The Core of HiMyTV Player (0) | 2013.07.13 |
움직이는 타켓을 멈추게 하라 (0) | 2013.07.10 |
hide delegate, remove middle man, inline class (2) | 2013.07.03 |