V Player V Player convinent video explorer convinent video explorer 03309331 03309331 이이이 이이이
Jan 25, 2016
V PlayerV Playerconvinent video explorerconvinent video explorer
03309331 03309331 이웅주이웅주
목차목차 기능기능 구현 방법구현 방법 개발 도구개발 도구 구조구조 구현구현 스크린샷스크린샷 개선할 사항개선할 사항
기능기능 편리한 탐색 기능편리한 탐색 기능
• 트랙바에 커서를 올려놓아 해당 시점의 영상을 트랙바에 커서를 올려놓아 해당 시점의 영상을 별도 창으로 플레이별도 창으로 플레이
Previewvideo
Main video
Navigation bar
구현 방법구현 방법 VMR windowless controlVMR windowless control 을 사용을 사용 : VMR Pla: VMR Pla
yer yer 샘플 참조샘플 참조 하나의 비디오 파일을 두 개의 비디오 관리 하나의 비디오 파일을 두 개의 비디오 관리
클래스로 읽어들인다클래스로 읽어들인다 .. 하나는 메인하나는 메인 , , 하나는 프리뷰 용으로 하나는 프리뷰 용으로
사용하고 이들을 관리할 클래스를 사용하고 이들을 관리할 클래스를 구현한다구현한다 ..
개발 도구개발 도구 IDE/CompilerIDE/Compiler
• Visual C++ 2005 ExpressVisual C++ 2005 Express SDKSDK
• Microsoft Platform SDK for Windows Microsoft Platform SDK for Windows Server 2003 R2Server 2003 R2
구조구조 제어를 쉽게 하기 위해 제어를 쉽게 하기 위해 Manager Manager 클래스를 클래스를
통해 세부 작업을 추상화시킴통해 세부 작업을 추상화시킴
_movie : Movie _moviePreview: Movie
Manager : Manager trackBar : TrackBar
Send event to Manager
controlcontrol
Vplayer 의 객체 다이어그램
구현구현 : : 프리뷰 윈도우프리뷰 윈도우 Windowless Windowless 모드에서는 두 개의 비디오 화면을 모드에서는 두 개의 비디오 화면을
겹칠 경우겹칠 경우 , , 깜박거림깜박거림 (flicker) (flicker) 현상이 발생함현상이 발생함 .. 이를 해결하려면 이를 해결하려면 Renderless Renderless 모드를 사용해야 모드를 사용해야
하나하나 , , 자료 부족으로 인한 기술적 어려움으로 자료 부족으로 인한 기술적 어려움으로 사용하지 못함사용하지 못함 : : 두 개의 비디오 스트림을 하나의 두 개의 비디오 스트림을 하나의 출력으로 출력으로 compositecomposite 하는 문제하는 문제 . . 이를 위해 이를 위해 ImagImage Compositore Compositor 를 커스터마이징해야함를 커스터마이징해야함
대안으로 대안으로 Windowless Windowless 모드로 구성하되모드로 구성하되 , , 메인과 메인과 프리뷰 화면이 겹쳐지지 않도록 구성프리뷰 화면이 겹쳐지지 않도록 구성
구현구현 : : 트랙바 처리트랙바 처리 트랙바는 트랙바는 WM_MOUSEMOVE WM_MOUSEMOVE 이벤트를 이벤트를
처리하지 않음처리하지 않음 : : 포커스있는 이벤트만 포커스있는 이벤트만 처리 가능처리 가능
메시지 루프 때마다 트랙바의 메시지 루프 때마다 트랙바의 onMouseMoonMouseMove()ve() 를 호출하여 커서의 현재 위치가 를 호출하여 커서의 현재 위치가 트랙바인지 검사하고 처리트랙바인지 검사하고 처리
이벤트 처리를 단순화하기 위해이벤트 처리를 단순화하기 위해 , , 별도의 별도의 클래스로 구성클래스로 구성
구현구현 : : 인터페이스 처리 단순화인터페이스 처리 단순화 인터페이스를 일시에 호출하고 해제하는 것은 인터페이스를 일시에 호출하고 해제하는 것은
리소스 관리 측면에서 효율적임리소스 관리 측면에서 효율적임 그러나 인터페이스가 많이 필요하고그러나 인터페이스가 많이 필요하고 , , 특정 특정
인터페이스들이 의존 관계에 있을 경우 구조 인터페이스들이 의존 관계에 있을 경우 구조 파악과 관리가 어려워짐파악과 관리가 어려워짐
이에 인터페이스는 필요할 때 가져오고이에 인터페이스는 필요할 때 가져오고 , , 사용 사용 후에는 해제시킴후에는 해제시킴
이로써 코드 작성 및 유지보수가 수월해짐이로써 코드 작성 및 유지보수가 수월해짐 : : 코드는 전반적으로 증가함코드는 전반적으로 증가함
스크린샷스크린샷 : : 일반 플레이일반 플레이
스크린샷스크린샷 : : 프리뷰 모드프리뷰 모드
개선할 사항개선할 사항 화면 공간 활용을 극대화하기 위해 화면 공간 활용을 극대화하기 위해 RenderRender
less less 모드 및 모드 및 custom compositor custom compositor 사용하여 프리뷰 화면이 겹쳐지도록 사용하여 프리뷰 화면이 겹쳐지도록 구성해야함구성해야함
유저 편의를 위한 컨트롤 필요유저 편의를 위한 컨트롤 필요 : : 음량 조절 음량 조절 등등