본문 바로가기

Papyrus/Dizzy Report

DirectShow 기반 플레이어에서 동영상 감상 환경 구축하기

윈도우 환경에서 동영상을 보는 것은 여간 골치아픈 일이 아니다. 동영상이란 것은 음성과 영상이 압축된 형태의 데이터이며, 동영상을 본다는 것은 데이터의 압축을 적절한 방식으로 해제해서 디바이스에 출력한다는 의미이다. 즉, 동영상을 보기 위해서는 이 압축을 적절히 풀어낼 디코더를 가지고 있어야 한다.

윈도우는 중복되는 코드들이 프로그램마다 정적으로 링크되는 불편을 덜기 위해 DLL 기술을 지원한다. 동영상을 보기 위해서 코덱을 설치하면, 인코딩 / 디코딩을 위한 컴포넌트들이 설치된다. 하지만 대부분의 사람들에게 사실 인코딩 컴포넌트까지 필요한 것은 아니다. 디코딩 컴포넌트가 DirectShow Filter 디코더로 설치되어 있다면 동영상을 보는데는 아무런 문제가 없다. 하지만, 현실은 어디 그렇던가? 코덱을 이것저것 설치하다보면 특정 압축 방식을 해제하는데 대한 중복 연결이 발생할 수도 있고, 그럴 경우 특정 디코더와 동작하게끔 설계된 몇몇 디코더들이 그 조합을 잃어버리면서 여러가지 문제가 발생하기도 한다.

예전에는 통합 코덱이라는 이름으로 코덱팩이 돌아다녔는데, 이런 문제 때문에 프로그램이 독자적으로 디코더를 내장하고 있는 방식의 곰 플레이어 같은 프로그램이 인기를 끌면서 점차 사라졌다.
그렇지만, 지금도 여전히 용량상의 문제나 미학상의 문제로 DirectShow 기반 플레이어에 필요한 컴포넌트만 설치해서 가볍게 동영상 감상 환경을 구축하고 싶은 사람들이 있을 것이다. 그런 사람들에게 필요한 것이 동영상 디코더만 포함하고 있는 DirectShow Filter 모음이다. 이런 종류로 가장 유명한 것은 ffdshow인데, 이것이 오랫동안 업데이트가 되지 않으면서 ffdshow tryout이라는 프로젝트가 fork 되어 진행 중에 있다. 아직 정식 버전은 릴리즈되지 않았고 베타 버전인 상태지만, ffdshow에 대해서 아쉬웠던 점들이 많이 개선되었다. ffdshow는 libavcodec 라이브러리를 DirectShow Filter로 래핑한 것이며, 동영상 디코딩만 필요한 사람들에게 유용하다. ffdshow tryout은 동영상을 감상하는데 필요한 대부분의 디코더들이 포함되어 있다.

홈페이지는 http://sourceforge.net/projects/ffdshow-tryout/이며, 관심 있는 사람은 한번 들러보도록. 다만, 아직 ffdshow에서 자막 관련 기능은 아직 완전하지 않기 때문에, 따로 DirectVobSub 필터를 구해서 설치하는 것이 좋을 것이다. VSFilter.dll은 http://sourceforge.net/projects/guliverkli/에서 구하거나,  http://sourceforge.net/projects/mpc-hc/에서 standalone 형식으로 배포하는 컴포넌트를 쓰면 된다. 자신의 플랫폼 환경에 맞게 컴파일된 바이너리를 가져온다(NT 이상이라면 Unicode 버전). 적당한 폴더를 만든 뒤에 그 폴더에 VSFilter.dll을 복사하고, regsvr32 명령을 사용하여 등록한다. 등록한 뒤에 이 파일은 경로와 함께 레지스트리에 기록되므로, 절대 폴더와 파일을 삭제해서는 안된다.

C:\> regsvr32 VSFilter.dll

참고로, 여기서 쓸만한 필터를 몇 개 더 찾을 수 있는데, DirectShow 기반 플레이어에서 DVD를 볼 수 있도록 해주는 적당한 MPEG2 디코더도 구할 수 있다. MPVDecoder 패키지를 다운 받아 VSFilter와 마찬가지로 regsvr32를 사용해 등록해주면 된다. 그렇게 좋은 성능은 아니지만, 공개 MPEG2 DirectShow Filter 디코더를 구하는게 쉽지 않은 만큼(로열티 문제 때문에) 그럭저럭 쓸만할 것이다. 개인적인 생각으로, 이 DirectShow Filter 디코더가 GPL MPEG1/2 DShow Filter 디코더보다 훨씬 낫다.

즉, 가장 가볍게 동영상 감상 환경을 구축하고 싶다면, DirectShow 기반 플레이어 + ffdshow tryout + 개인적으로 필요한 DirectShow Filter 설치도 좋은 방법 중 하나다.