'동영상재생의기본구조'에 해당하는 글 2건

지난 포스팅에서 윈도우즈 환경에서 동영상을 재생할 때, 크게 소스필터, 변환필터 그리고 렌더필터로 구분되는 필터들이 사용된다고 말씀드렸지만, 실제로는 필요에 따라 더 많은 수의 다양한 필터들이 따라 붙을 때가 많습니다. 

필터가 추가로 필요한 이유는 많지만, 인코더 분들이 아닌 이상은 동영상을 별 문제없이 재생해서 감상하려는 목적이 대부분이시리라 봅니다. 이런 경우에는 동영상 포맷에 대한 기초적인 이해도 필요합니다. 




동영상 포맷

포맷 (출처 : 다음백과사전 )

http://en.wikipedia.org/wiki/File_format

포맷 ( format ) 이란 말은 컴퓨터 관련 분야에서는 정말 흔한 말이지만, 컴퓨터와 별 관련없으신 분들이 가장 싫어하는 말들 중 하나죠. ^^;; 

동영상 포맷은 동영상 정보가 디지털 저장장치 ( 보통 컴퓨터의 하드 디스크 ) 에 저장되는 형태입니다. 하드 디스크에 저장되는 파일들은 동영상 파일 외에도 문서, 사진, 음성 등등 다양하므로 각각에 맞는 포맷이 필요합니다. 동영상 포맷도 자신만의 독특한 저장형태가 있다고 알고 계시면 될 것 같습니다. 


동영상 포맷은 크게 컨테이너 포맷, 비디오 포맷, 오디오 포맷을 구분할 수 있습니다. 이렇게 구분한 이유는 동영상 압축기술과 재생할 때의 문제점 때문입니다.

먼저 압축기술은 소리와 화면으로 이루어진 동영상 정보를 효율적으로 압축하기 위해 이 두 가지 정보를 분리해서 그 특성에 맞게 발전시켰기 때문에 각각의 포맷이 생겼습니다. 언뜻 생각해 봐도 비디오가 오디오보다 훨씬 더 많은 양의 정보를 저장해야 될 것 같지 않으신지요? ^^;;

이렇게 두 개로 나누어 잘 압축한 것까진 좋았지만, 재생을 할 때 약간의 어려움이 발생하게 됩니다. 특정 시간에 알맞은 한 개의 화면과 알맞은 소리들이 나와주도록 해야 하는데, 별도로 구분된 파일(포맷)인지라 원활하게 동작하지 못한다는 문제입니다. 파일도 별도로 관리해야 하는 불편한 점도 있구요. ^^;;

이 때문에 비디오 포맷과 오디오 포맷을 한데 묶어주는 컨테이너 포맷이 필요해졌습니다. 그럼 한개의 파일에 비디오 압축부분과 오디오 압축부분도 넣어 편리하게 관리할 수 있고, 재생시간도 공유해서 효과적으로 영상과 소리를 즐길 수 있게 됐습니다.

비디오 포맷은 영상정보를 압축한 비디오 포맷과 소리정보를 압축한 오디오 포맷, 그리고 이를 묶어주는 컨테이너 포맷으로 구분될 수 있으며, 우리가 즐기는 대부분의 멀티미디어 파일은 이 컨테이너 포맷의 확장자(*.avi, *.mkv 등등)를 가집니다. 물론, 비디오 포맷만 가진 파일이라면 비디오 포맷의 확장자를 가지고, 오디오 포맷만 가진 파일이라면 오디오 포맷의 확장자를 가집니다. ^^;;

http://en.wikipedia.org/wiki/Container_format_(digital)

http://en.wikipedia.org/wiki/Comparison_of_container_formats




대개의 동영상 재생과정

동영상 포맷에 대해서도 약간의 감을 얻으셨다면 대체로 아래와 같은 윈도우즈 환경에서 동영상 재생과정을 거친다고 알아두시면 될 것 같습니다. KMP 포럼에 있던 내용 중 기억나는대로 다시 작성한 것이며, 모든 경우에 반드시 이런 것은 아닙니다. 단지 MSDN 에서 제공한 웹문서보다는 자세하고 이해하기 쉬운 것 같아 작성했습니다.
 
소스필터 -> 스플리터 ( splitter ) -> 코덱 ( 변환필터 ) -> 후처리필터 ( postprocessing filter ) -> 렌더필터

1. 소스필터 : 동영상 파일을 읽어오는 작업.

2. 스플리터 : 읽어온 동영상 파일을 파악해서 비디오 압축부분, 오디오 압축부분 등등의 멀티미디어 정보를 뒤에 따라오는 필터들이 작업할 수 있도록 분리. ( 여기까지가 컨테이너 포맷을 분석하는 역할입니다. ^^;; )

3. 변환필터(코덱) : 비디오 코덱, 오디오 코덱 등이 압축된 정보들을 풀어주는 작업.

4. 후처리 필터 : 필요한 만큼 복구된 멀티미디어 데이타들에 어떤 효과나 보정을 위해 다시 데이타를 추가.

5. 렌더필터 : 출력장치 ( 비디오카드, 사운드카드 등) 들이 이해할 수 있는 정보로 만들어 해당 장치로 전송.


예전에 간혹 어떤 게시판을 보면 비디오 코덱과 오디오 코덱을 설치했는데 재생이 안된다고 하시는 분들이 계셨습니다. 오가는 답변들을 보니 컨테이너 포맷에 대한 스플리터가 없는 경우이신 듯 한데, 서로 오해가 심해져서 대화가 진행되지 않는 경우도 본 적이 있습니다. ( 한쪽은 비디오, 오디오 코덱 있는 거 확인했는데 재생이 안된다고 주장하고, 한쪽은 필요한 코덱이 없어서 재생이 안된다고 주장하는 막막해 보이는 상황이었습니다. ^^;; ) 정말 깨끗한(?) 친구의 컴퓨터에서 동영상을 재생하고자 할 때 저 역시 3 종류의 필터를 찾아 설치해 줬는데, 친구에게 설명할 때는 별 수 없이 알맞은 코덱을 찾아 설치했다고 말했습니다. --;; 컴퓨터 용어는 정말 말하면서도 짜증날 때가 많습니다. --;;

스플리터, 파서필터, 소스필터의 역할은 저도 많이 헷갈리는 부분인데, 제가 확실하게 느끼는 건 이 부분을 지나야 비디오 압축코덱, 오디오 압축코덱이 필요한 상황이 된다는 점과 스플리터란 말이 나오면 추가로 설치해야 하는 코덱(? 사실은 필터)이 필요하다는 겁니다. 앞으로 잘 설명된 글을 찾을 수 있으면 좋겠습니다. ^^;;


WRITTEN BY
리컨
영화를 즐기는 취미를 기록한 블로그입니다.

,
초보자 분들에게 윈도우즈 환경에서 동영상 재생과 관련해 문제가 발생했을 때 이해를 돕기 위한 내용들을 정리해 봅니다. 부족한 부분에 대한 지적해주시면 고맙겠지만, 간단한 댓글보다는 충분한 설명이 포함된 포스팅을 하신 후, 트랙백으로 알려주시면 매우 감사하겠습니다. 짧은 내용의 지적은 지식이 얕은 사람들에겐 죽음입니다. ^^;;

윈도우즈 운영체제 환경이므로 MSDN(MicroSoft Developer Network - 마이크로소프트사에서 제공하는 개발자 지원 관련 문서 사이트) 에 있는 다이렉트쇼(DirectShow) 관련 페이지들과 온라인 백과사전 위키의 내용을 중심으로 정리해 보려 합니다. 고수분들이나 영어에 자신있으신 분들은 링크를 직접 확인해 주시면 고맙겠습니다. 




코덱 ( Codec ) 

http://en.wikipedia.org/wiki/Codec 

코덱 ( CODEC ) 이 COder/DECoder 의 약자라는 웬만큼 아시리라 봅니다. 멀티미디어와 관련된 정보 ( 동영상 파일로 간주하시면 됩니다. ^^;; ) 를 압축하고 다시 풀어서 재생할 수 있도록 해주는 역할을 합니다. 하드웨어 형태의 코덱도 있고, PC 환경에서 동작하는 소프트웨어 형태의 코덱도 있습니다. 지금 작성하는 내용은 그 중에서도 윈도우즈 환경의 PC 에서 동영상 재생시 필요한 코덱들에 대한 내용입니다.

윈도우즈 환경에서는 코덱과 관련한 많은 문제가 발생하지만, 코덱이 하는 역할은 동영상 데이타의 압축과 해제만을 전담하는 작은 소프트웨어일 뿐입니다. 윈도우즈 운영체제 하에서 실제로 동영상 관련 응용프로그램이 동작하는 데는 다양한 필터라는 것이 필요하며, 코덱은 그 필터라는 소프트웨어들 중 하나입니다. 

http://en.wikipedia.org/wiki/Filter_(software
A filter is a computer program to process a data stream.
위의 설명을 대강 보자면 소프트웨어 쪽에서 필터란 말은 데이타 스트림을 처리하는 컴퓨터 프로그램이라고 합니다. 여기서 " 데이타 스트림 ( 데이타 스트림 ) " 은 동영상 파일을 실행시켰을 때 하드에서 읽어오는 과정이 시냇가(stream)에 물이 흐르는 듯 하다는 뜻에서 이렇게 표현하고 있습니다. 그냥 동영상 파일이 하드에 저장된 상태에서 컴퓨터가 이제 사람들 눈에 보이도록 하려면 단계별로 처리해 줘야 하는데 그게 가능하도록 읽어온 상태로 알고 계시면 될 것 같습니다.

잠시 정리하겠습니다. 말이 자꾸 길어져서.. ^^;;

윈도우즈 운영체제 환경에서 " 코덱 " 은 동영상 파일의 압축과 해제를 전담하는 필터들 중 하나입니다. 필터는 데이타 스트림 ( 동영상 파일을 하드에서 읽어들인 상태 ) 에 어떤 처리를 해주는 역할을 하는 소프트웨어들입니다. 




다이렉트쇼(DirectShow)

윈도우즈 운영체제 환경에서의 " 필터 " 와 " 코덱 " 이란 말에 대강 감을 잡으셨다면 이 용어들이 자주 사용하는 다이렉트쇼에 대해 살펴보겠습니다.

마이크로소프트 사에서는 게임, 멀티미디어 응용프로그램을 전담하는 " 다이렉트X ( DirectX ) " 라는 소프트웨어 묶음을 따로 관리하고 있습니다. 개발환경이니 응용프로그램 지원 API니 하는 어려운 말이 등장하지만, 프로그래머 개발자가 아닌 이상은 별 필요없는 얘기라고 봅니다. ^^;;; 그냥 윈도우즈 운영체제에서 전담하는 소프트웨어들이 있다 정도면 될 것 같습니다. 

http://en.wikipedia.org/wiki/Directx

이 다이렉트X 중에서도 멀티미디어 정보를 전담하는 부분만 따로 묶어 " 다이렉트쇼 ( DirectShow ) " 라고 부릅니다. 단지 다이렉트X 에 속한 소프트웨어 묶음입니다.   

http://msdn.microsoft.com/en-us/library/dd375454(VS.85).aspx ( 다이렉트쇼, MSDN )

http://en.wikipedia.org/wiki/DirectShow

따라서, 윈도우즈 환경에서 동영상이 잘 재생되려면 당연히 이 다이렉트쇼를 항상 최신버전으로 유지해야 하며, 다이렉트X 를 최신버전으로 유지하면 다이렉트쇼도 최신버전으로 유지됩니다. 비스타 등의 운영체제 버전에 따라 " 다이렉트X 10 " 같이 다른 종류의 최신 버전이 필요하기도 합니다. 그냥 윈도우즈의 자동 업데이트 기능만 꾸준히 확인하셔도 유지된다고 보시면 됩니다. ^^;;

그럼 다이렉트쇼와 코덱, 필터의 관계가 무엇인지 정리해 보겠습니다.




다이렉트쇼, 필터, 그리고 코덱

다이렉트쇼 시스템 구성 ( DirectShow System Overview ) - 기본적인 역할들

그림이 어렵지요? ^^;; 이 중에서 가운데 위치한 필터부분만 잘 보시면 됩니다.



 
소스 필터 ( Source Filters ), 트랜스폼 필터 ( Transform Filters ), 렌더링 필터 ( Rendering Filters ) 등이 동영상 재생과 관련한 필터입니다. 앞서 말한 필터가 데이타 스트림 ( 동영상 데이타 ) 에 어떤 처리를 가하는 역할을 하고, 그 역할에 따라 이런 종류의 필터들이 사용되고 있습니다. 이 중 트랜스폼 필터 ( 변환 필터? ) 부분에 속하는 게 코덱입니다. 그렇다고 무조건 이렇게 3 개의 필터만 있으면 되는 건 아닙니다. 그냥 크게 구분해서 표시했을 뿐입니다. ( 다 Filters 라고 써 있죠? ^^;; ) 추가되는 내용은 기회가 되는대로 다시 포스팅하겠습니다. ^^;; 




소스 필터 ( Source Filters )

그림은 어려워 보이지만, 역할은 단순합니다. 처리하려는 데이타 스트림 ( 동영상 파일 ) 이 어디에서든 읽어와서 다음 필터가 자신의 역할을 할 수 있도록 처리해주는 역할입니다. 컴퓨터 하드인지, 인터넷인지, 아니면 기타 다른 장치인지 처리하려는 쪽에서 알아야 할 필요성이 있습니다. 각 장치마다 규격도 다르고, 순간순간 오는 데이타의 양도 다르고, 동영상 포맷도 다르므로 이 부분만 전담하는 게 소스 필터입니다.


변환 필터 ( Transform Filters )

그림에서 보시듯 아래 쪽에 " Hardware MPEG2 Decodes " 라는 게 연결되어 있습니다. 변환이라는 말 그대로 압축된 형태의 데이타를 사람눈으로 볼 수 있는 형태의 데이타가 되도록 풀어주는 등의 역할을 합니다.


렌더링 필터 ( Rendering Filter, 혹은 렌더 필터 )

" 렌더링 " 이란 말은 그래픽 분야에서 많이 쓰입니다. ( 참조 : 다음 백과사전 - Rendering ) 그냥 사람 눈에 보이고, 귀에 들릴 수 있도록 하기 위해 해당 장치들 ( 비디오카드, 사운드카드 등) 에게 정보를 보내주는 역할을 합니다. 그리고나서 비디오카드는 모니터나 TV로 다시 전송해서 출력해주고, 사운드카드는 스피커를 통해 소리를 전달합니다.

화살표를 보면 " 파일 시스템 ( File System, 컴퓨터 하드 드라이브 ) " 으로도 연결되어 있는데, 이건 아마도 인코딩 과정도 포함된 것 같습니다. ^^;;




정리하자면...

윈도우즈 환경에서 동영상을 재생할 때는 여러 가지 역할을 하는 필터들이 있는데, 크게 소스필터, 변환필터, 렌더필터 등으로 구분할 수 있습니다. 읽어와서 분석하고 ( 소스필터 ) , 압축을 해제하거나 효과를 주는 등의 변환처리를 해주고 ( 변환필터 ) , 각종 출력장치로 정리된 데이타를 보내주어 ( 렌더필터 ) 사람이 보고 들으며 즐길 수 있도록 해줍니다. 코덱은 그 중 변환필터 쪽에 속하며 동영상 데이터의 압축과 해제를 전담합니다.

동영상 재생시 자주 발생하는 문제들의 대부분은 이런 필터들과 관련한 것들입니다. 설치되지 않았거나, 잘못 사용됐거나, 충돌을 일으켜 동작하지 못하거나 하는 등으로 인한 것입니다. 그외에도 다양한 원인이 있는데, 차츰차츰 기본원리와 관련해 정리하다 보면 답답함을 좀 줄일 수 있지 않을까 생각합니다. ^^;;




뱀발
예전 KMPlayer 게시판에서 개발자 분은 5 단계 ( 소스필터, 스플리터, 코덱, 후처리필터, 렌더필터 ) 로 구분하셔서 잘 설명해 두셨는데, 지금은 찾기가 힘드네요. ^^;; 이 부분은 동영상 포맷과 관련해서 다시 포스팅하겠습니다.  


WRITTEN BY
리컨
영화를 즐기는 취미를 기록한 블로그입니다.

,