PDA

View Full Version : [도움말] 동영상의 기본 재생 구조


z
11-05-2005, 12:23 AM
동영상의 기본 재생 구조 (The basic playback structure of Moving Picture)


1차 수정일: [2006/04/15]
작성자: z in kmp forum

# 이 글은 KMP사용자로서 중급 이상의 사용자를 대상으로 한 것입니다.
# 게시물의 무단도용을 금지합니다.

코덱(COder/DECoder): 코덱은 인코더와 디코더를 총칭하는 말로 오디오나 비디오를 특정한 형식(avi나 mp3등)으로 압축하는 것이 인코더이고, 반대로 이렇게 만들어진 동영상을 볼 수 있도록 해주는 것을 디코더라고 합니다.

디코더와 필터에 대해서 혼란스러워하시는 분들이 많은데, 이 두 가지 개념은 서로 혼재되어 사용되기도 합니다. 어떤 데이터가 필터를 통과하면 그 필터의 기능에 따라 데이터가 변하게 됩니다. 마치 카메라 렌즈앞에 필터를 달아서 여러가지 효과를 주는 것과 유사합니다. 혹은 TV를 보면 음성변조를 하거나 모자이크 처리를 하는데 이런 것도 필터를 사용한 것입니다.


다음은 동영상이 재생될 때의 기본적인 재생 구조입니다. 윈도우 하에서 만들어진 대부분의 동영상 재생기는 아래와 같은 기본적인 구조 위에서 작동하고 있습니다.


동영상 - 소스 필터 - 스플리터 - 비디오/오디오 디코더 - 비디오/오디오 처리 필터 - 비디오/오디오 렌더러

동영상 재생에 쓰이는 주요 필터의 종류를 개략적으로 살펴보면

1. 소스필터(source filter): 특정한 형식(하드에 존재하는 파일, CD나 DVD-Rom에 존재하는 파일, 전송중인 파일, 깨진파일, Url, Shoutcast등)의 파일을 여는데 사용됩니다.

2. 스플리터(splitter)(=디먹서, 디멀티플렉서, 파서)필터: 소스필터로 열린 파일은 스플리터에 연결이 되는데 일반적으로 스플리터는 동영상을 비디오와 오디오 데이터 스트림으로 구분해서 출력해 주는 역할을 합니다. 소스필터와 스플리터는 대게 분리된 필터이지만 단일필터가 이 두가지 역할을 하는 경우도 있습니다.

3. 디코더(decoder): 스플리터에서 분리된 비디오/오디오 스트림들은 각각 비디오/오디오 디코더에 연결이 되며 디코더를 거치면 마치 압축파일에서 압축을 해제한 것과 같은 상태가 됩니다. 즉, 디코더에서 압축이 풀린 비디오/오디오 신호들은 각각 비디오/오디오 렌더러를 통해 우리가 보고 들을 수 있는 형태로 번역됩니다.

4. 비디오/오디오 처리필터(video/audio transform): KMP는 디코더와 렌더러 사이에 각각 비디오/오디오 처리필터를 끼워넣어서 비디오나 사운드의 고급처리를 해주고 있습니다. 간단하게 예를 들면 후처리등의 각종 영상 처리와 죠그셔틀, 이퀄라이져, 자동볼륨조절등의 음성 처리를 변환필터내에서 처리해 줍니다.

5. 렌더러(renderer): 디코딩되고 처리되어진 비디오/오디오 신호들을 우리가 보고 들을 수 있도록 해 줍니다.

* 기타 변환필터(avi <-> ac3/dts filter)
ac3나 dts신호는 스플리터에서 일차로 사운드 데이터가 분리된 다음 avi <-> ac3/dts 변환필터를 거쳐서 디코더에 연결되어야 소리가 납니다. (AC3필터등 일부 디코더 제외)

위 내용들은 동영상 재생중에 마우스 우클릭후 재생정보/필터설정이나 고급 재생 정보(ctrl-tab)에서 확인할 수 있습니다.

참고
요즘 디코더들은 각각의 목적에 맞게 특정한 필터를 내장하는 경우가 많습니다. 예컨데 divx의 경우 디코더환경설정에 들어가보면 화질을 보정하는 후처리 필터(post-processing)나 필름 재생 효과를 주는 필름 이펙터 필터등이 포함되어 있습니다.
또 DVD재생에 사용되는 Mpeg2 비디오 디코더들은 기본적으로 잔상 제거 필터(de-interlacing)가 내장되어 있고, Mpeg2 오디오 디코더들은 돌비나 음성처리 필터가 내장이 되어 있습니다.
Winamp 디코더는 소스필터와 스플리터, 디코더가 모두 결합된 구조입니다.

z
11-05-2005, 12:23 AM
동영상의 기본 재생 구조 <Part 2>




작성자: z in kmp forum


# 이 글은 KMP사용자로서 중급 이상의 사용자를 대상으로 한 것입니다.
# 게시물의 무단도용을 금지합니다.

저번 편에 이어서 오늘은 KMP 내에서 동영상의 기본 구조의 모습을 개략적으로 살펴보겠습니다. 저번 편을 유심히 살펴보신 분들을 이미 눈치채셨겠지만 동영상의 기본 재생 구조는 일종의 코덱 사용법의 사전 지식과도 같습니다.

동영상의 기본 재생 구조는 필터그래프를 통해서 나타나게 되는데, 여러 종류의 필터들이 아래의 스크린샷처럼 동영상을 재생하기 위한 기본적인 구조를 이루는 것을 말합니다. 좀 더 풀어서 말하면, 동영상을 재생기로 열게 되면 소스 필터에서 렌더러까지 필터들이 차례로 연결이 되는데 이러한 상호 연결된 모습을 필터그래프라고 합니다.

KMP는 이런 기본 재생 구조에 대해 매우 분석적인 정보를 다양하게 제공하고 있습니다. 심지어는 필터그래프 구성시(동영상을 열면 재생을 시도할때 하는 작업으로 Directshow 기반의 재생기에서는 항상 필터그래프가 성공적으로 작성이 되어야 재생이 정상적으로 시작됩니다) 렌더링에 참여하는 필터들을 직접 일일히 점검할 수도 있는 도구를 제공합니다.

필터그래프가 작성된다는 말은 다음과 같습니다. 예를 들어 1개의 자동차와 100개의 자동차 열쇠를 선물로 받았다고 생각해 봅시다. 그런데 그 자동차에 맞는 열쇠는 하나뿐이라면 어떻게 할까요? 맞는 열쇠가 나올 때까지 계속 하나씩 맞춰보겠죠? 동영상을 열때도 마찬가지로 시스템에 있는 많은 코덱들을 이런 열쇠처럼 동영상에 하나씩 맞춰 보게 됩니다.

동영상 재생시 보면 가끔씩 코덱이 없는 경우 핀 연결 에러 창이 뜨는데 이것은 맞는 열쇠(코덱)가 없다는 뜻입니다. 또 열쇠(코덱)를 맞추어 보는 순서도 있는데 이것을 코덱의 우선 순위라고 합니다. 각종 코덱은 시스템에 고유한 우선순위값을 시스템(레지스트리)에 등록하게 됩니다. 그리고 동영상 재생을 시도할 때 이러한 우선순위값를 이용해서 핀 연결을 시도하게 됩니다(열쇠를 꽂아보게 되는 거지요). 우선순위가 높을 수록 먼저 핀 연결을 시도하게 됩니다. (코덱은 입력/출력핀을 가지고 있습니다. 이를테면 입력핀이 열쇠부위고 출력핀은 뒤쪽의 필터와 연결되는 열쇠의 몸통 부분이라고 비유할 수 있습니다)

일반적인 예를 들어 봅시다.
DivX으로 인코딩된 동영상과 DivX을 재생할 수 있는 코덱이 DivX 5.05, XviD, ffdshow 이렇게 세가지가 깔려있다고 가정합시다. 이 세가지 코덱은 모두 DivX을 재생할 수 있기 때문에 우선 순위가 가장 높은 녀석이 디코더로 사용되게 됩니다. ffdshow의 우선 순위값이 가장 높기 때문에 보통 이 세가지를 모두 설치하면 ffdshow로 재생이 됩니다.

이러한 필터그래프 생성 과정은 Directshow가 처리해 주게 되는데 이것을 Intelligent Connect(지능적인 연결) 라고 합니다. KMP와 같은 고급 동영상 재생기는 필터 연결 과정의 일부분을 조정할 수 있게 되어 있습니다. 이것이 갖는 잇점은 자체적으로 코덱의 우선 순위를 조정할 수 있게 됨으로 인해서, 필터그래프 구성시 특정 부분을 제어할 수 있는 매우 유연한 구조를 갖추게 됩니다. 쉽게 말하면 원하는 코덱을 사용해서 동영상을 재생할 수 있게 된다는 의미입니다. KMP의 경우는 여기에서 한발짝 더 나아가 레지스트리에 코덱의 정보를 강제로 등록하지 않고 자체적으로 이를 처리할 수 있는 구조로 되어 있어서 높은 수준의 안정성을 담보하고 있습니다.
(더 자세한 얘기는 추후에 코덱 설정편에서 하기로 합시다)



그럼 이제 생성된 필터그래프의 적당한 예를 들어 보기로 합시다.
적당한 avi 동영상 파일을 KMP로 재생하고 Ctrl-Tab을 눌러서 고급 재생 정보창을 열어봅니다. 아래처럼 재생에 사용된 필터들을 알 수 있습니다. 동영상의 기본 재생 구조 <Part 1>에서 기술했던 각종 필터들의 설명과 연계해서 천천히 잘 살펴 보도록 하십시오.


[Direct Show Filter]

0) - planetes 17.avi : 하드 디스크상의 동영상 파일을 열어주는 소스 필터
1) - AVI Splitter : 열린 동영상 파일을 오디오/비디오 데이터로 쪼개주는 스플리터
2) - MPEG Layer-3 Decoder : 압축된 오디오 데이터를 풀어주는 디코더
3) - KMP Video Codec : 압축된 비디오 데이터를 풀어주는 디코더
4) - KMP Video Transform : 비디오 디코더 뒤에 붙는 비디오 처리 필터
5) - KMP Audio Transform(Inpalce) : 오디오 처리 필터
6) - Default DirectSound Device : 처리된 오디오 신호를 사운드 카드로 전송해서 소리가 나게 해주는 렌더러
7) - Video Mixing Renderer(Renderless) : 비디오 신호를 출력해주는 렌더러


(동영상)소스 필터(0) - 스플리터(1) - 비디오/오디오 디코더(3/2) - 비디오/오디오 처리 필터(4/5) - 비디오/오디오 렌더러(7/6)



필터그래프를 구성하는 위 필터들이 실제로 하드 디스크의 어느 곳에 위치하는지 궁금하시죠? KMP는 이 정보마저도 제공해 주고 있습니다. 재생정보/필터설정에서 고급 필터 정보(Ctrl-`)를 열어보시면 필터들의 파일 이름과 위치 등 자세한 정보를 알 수 있습니다. 내장 코덱이나 필터들의 정보는 Tab이나 Ctrl-Tab상에서 제공하고 있기 때문에 따로 출력되지 않습니다.



<참고>
1. KMP내에서 분석적인 재생 정보는 재생정보/필터설정(Tab, Ctrl-Tab, Ctrl-`)에서 볼 수 있습니다.
2. 필터 그래프 생성시 핀 연결을 시도하는 필터 목록은 환경설정의 문제해결 > 필터 연결 디버그를 사용해서 추적할 수 있습니다.