GStreamer의 많은 오브젝트 중 애플리케이션 프로그래머에게 가장 중요한 오브젝트는 GstElement 오브젝트입니다. 엘리먼트는 미디어 파이프 라인을 만들기 위한 기초적인 요소입니다. 당신이 사용하게 될 다양한 고수준의 컴포넌트(High-Level Components)는 모두 GstElement에서 파생 된 오브젝트입니다. 모든 디코더, 인코더, 디먹서, 오디오/비디오 출력은 사실 Gstelement입니다.

 

5.1. 엘리먼트란 무엇인가?

애플리케이션 프로그래머에게 엘리먼트를 블랙박스로 형상화하는 것이 가장 좋은 방법입니다. 엘리먼트 한 쪽에 무엇인가를 넣는다면, 엘리먼트가 들어온 것을 처리하여,  반대편으로 내보내게 됩니다. 디코더 엘리먼트로 예를 들어보면, 당신이 인코드 된 데이터를  디코더 엘리먼트에 넣으면, 디코더 엘리먼트는 디코딩 된 데이터를 출력으로 내보낼 것 입니다. 다음 챕터(패드와 캐퍼빌리티)에서는 엘리먼트에서 데이터의 입/출력과 당신의 애플리케이션에서 엘리먼트를 어떻게 설정할 것인지에 대해 좀 더 자세히 알아 볼 것 입니다.

 

5.1.1. 소스엘리먼트

소스 엘리먼트는 파이프 라인에서 데이터를 생성하기 위해 사용됩니다. 디스크나 사운드 카에서 데이터를 읽어 들이는 역할을 예로 들 수 있겠습니다. 그림 5 – 1은 소스 엘리먼트를 시각화 한 것을 나타냅니다. 앞으로 항상 소스 패드는 엘리먼트의 오른쪽에 그릴  것 입니다.

그림 5 – 1. 소스 엘리먼트의 시각화그림 5 – 1. 소스 엘리먼트의 시각화

소스 엘리먼트는 데이터를 받아 들이지는 않고, 데이터를 생성할 뿐 입니다. 그림에서 엘리먼트에 소스 패드(오른쪽)만 있는 것으로 확인할 수 있습니다. 소스 패드는 데이터를 생성만 합니다.

 

5.1.2. 필터, 컨버터, 디먹서, 먹서, 코덱

필터와 유사 필터(filter-like) 엘리먼트는 입/출력 패드 모두가 있는 엘리먼트입니다. 필터는 입력(싱크) 패드로 데이터를 받아서, 출력(소스) 패드로 데이터를 제공하는 역할을 합니다. 이러한 엘리먼트의 예로, 볼륨 엘리먼트(필터), 비디오 스케일러(컨버터), Ogg 디먹서와 Vorbis 디코더가 있습니다.

유사 필터 엘리먼트는 싱크와 소스 패드의 개수에 제한이 없습니다. 예로 들어, 비디오 디먹서의 경우 하나의 싱크 패드와 다수의 여러개 (1 – N)개의 소스 패드를 가집니다. 각 소스 패드는 컨테이너 포맷에 들어 있는 여러 스트림에 하나씩 연결 됩니다. 다른 한편으로 디코더는 하나의 싱크 패드와 하나의 소스 패드를 가집니다.

그림 5 – 2. 필터 엘리먼트의 시각화그림 5 – 2. 필터 엘리먼트의 시각화

그림 5 – 2는 필터 엘리먼트를 시각화 하는 방법을 나타냅니다. 특정한 엘리먼트는 하나의 소스 패드와 하나의 싱크 패드를 가집니다. 입력 데이터를 받아 들이는 싱크 패드는 왼쪽에 그립니다. 소스 패드는 여전히 오른쪽에 그립니다.

그림 5 – 3. 하나 이상의 출력 패드를 가진 필터 엘리먼트의 시각화그림 5 – 3. 하나 이상의 출력 패드를 가진 필터 엘리먼트의 시각화

그림 5 – 3은 필터 엘리먼트를 표현하는 다른 방법을 보여줍니다. 상기의 그림은 하나 이상의 소스 패드를 가지고 있습니다. 비디오와 오디오 스스트림을 가진 ogg 파일을 처리하는 ogg 디먹서 엘리먼트를 예로 들 수 있습니다. 하나의 소스 패드는 기본적인 비디오 스트림이 들어있고, 다른 엘리먼트에는 기본적인 오디오 스트림이 들어 있게 됩니다. 디먹서는 일반적으로 새로운 패드가 생성될 때 시그널을 발생 시킵니다. 시그널 핸들러로 애플리케이션 프로그래머는 새로운 스트림의 시그널을 처리할 수 있습니다.

 

5.1.3. 싱크 엘리먼트

싱크 엘리먼트는 미디어 파이프 라인의 끝입니다. 싱크 엘리먼트는 데이터를 받아들이기만 하고, 어떠한 데이터 생성도 하지 않습니다. 디스크에 쓰기, 사운드 카드로 플레이백, 비디오 출력은 싱크 엘리먼트로 구현됩니다. 그림 5 – 4는 싱크 엘리먼트를 보여줍니다.

그림 5 – 4. 싱크 엘리먼트 시각화그림 5 – 4. 싱크 엘리먼트 시각화


Posted by _유부남J군_