본문 바로가기
IT와 개발/GStreamer Study

Application Development Manual: Foundations

by 도서 임보자 2024. 3. 22.

이 챕터에서는 GStreamer의 기본 개념을 소개합니다. 이러한 개념을 이해하는 것은 이 가이드의 나머지 부분을 읽는데 중요하며 이후 가이드에서는 이러한 기본 개념을 이해하고 있다고 가정합니다.

 

Elements

Element는 GStreamer에서 가장 중요한 객체 클래스입니다. 일반적으로 서로 연결된 element 체인을 만들고 이 element 체인을 통해 데이터가 흐르도록 합니다. Element는 파일에서 데이터를 읽거나 읽은 데이터를 디코딩하거나 이 데이터를 사운드 카드(또는 다른 장치)에 출력하는 등의 특정 기능을 가지고 있습니다. 이러한 element들을 여러 개 연결하여 미디어 재생 또는 캡처와 같은 작업 특정 작업을 수행하는 파이프라인을 만들 수 있습니다. GStreamer는 기본적으로 다양한 element들을 제공하여 다양한 미디어 응용 프로그램을 개발할 수 있도록 합니다. 필요한 경우 새로운 element를 작성할 수도 있습니다. 이에 대한 더 자세한 내용은 GStreamer 플러그인 작성 가이드에서 보실 수 있습니다.

Pads

Pad는 다른 요소를 연결할 수 있는 element의 입력 및 출력입니다. 이는 GStreamer에서 element 간의 링크 및 데이터 흐름을 협상하는 데 사용됩니다. Pad는 다른 element와 링크가 만들어지고 데이터가 해당 element로 흘러갈 수 있는 element의 "plug" 또는 "port"로 볼 수 있습니다. Pad는 특정 데이터 처리 기능을 가지고 있으며, pad를 통해 흐르는 데이터 타입을 제한할 수 있습니다. 두 pad에 허용된 데이터 타입(기능)이 호환 가능한 경우 두 pad 간에 링크가 허용됩니다. 데이터 타입은 caps negotiation이라는 프로세스를 사용하여 pad 간 협상을 수행 합니다. 데이터 타입은 GstCaps에 의해 설명됩니다.


여기서 비유가 도움이 될 수 있습니다. Pad는 물리적 장치의 플러그나 잭과 유사합니다. 예를 들어, 오디오 앰프, DVD 플레이어 및 (무음인) 비디오 프로젝터로 구성된 홈 시어터 시스템을 고려해 보겠습니다. DVD 플레이어를 앰프에 연결하는 것은 두 장치가 오디오 잭을 가지고 있기 때문에 허용됩니다. 그리고 비디오 프로젝터를 DVD 플레이어에 연결하는 것은 두 장치가 호환되는 비디오 잭을 가지고 있기 때문에 허용됩니다. 프로젝터와 앰프 사이의 연결은 프로젝터와 앰프가 서로 다른 유형의 잭을 가지고 있기 때문에 만들 수 없습니다. GStreamer의 pad는 홈 시어터 시스템의 잭과 동일한 목적으로 사용됩니다.


대부분의 경우, GStreamer에서 모든 데이터는 element 간의 링크를 통해 한 방향으로 흐릅니다. 데이터는 하나 이상의 source pad를 통해 element에서 흘러 나오며, element는 하나 이상의 sink pad를 통해 들어오는 데이터를 받습니다. Source 및 sink element는 각각 source 및 sink pad만 가지고 있습니다. 데이터는 일반적으로 버퍼 (GstBuffer 객체로 설명되는) 및 이벤트 (GstEvent 객체로 설명되는) 를 의미합니다.

 

Bins and pipelines

Bin은 element 컬렉션을 위한 컨테이너입니다. Bin은 element 자체의 하위 클래스이므로 bin을 마치 element인 것처럼 제어할 수 있어서 애플리케이션에 대한 많은 복잡성을 추상화할 수 있습니다. 예를 들어, Bin 자체의 상태를 변경함으로써 Bin에 포함된 모든 element의 상태를 변경할 수 있습니다. 또한 bin은 포함된 하위 항목들의 bus message들 (예: 오류 메시지, 태그 메시지 또는 EOS 메시지)을 전달합니다.

파이프라인은 최상위 bin입니다. 이는 애플리케이션에 대한 bus를 제공하며 자식들에 대한 동기화를 관리합니다. 이를 PAUSED 또는 PLAYING 상태로 설정하면 데이터 흐름이 시작되고 미디어 처리가 이루어집니다. 그리고 일단 시작되면 파이프라인은 중지하거나 데이터 스트림의 끝에 도달할 때까지 별도의 스레드에서 실행됩니다.

 

 

Communication

GStreamer는 애플리케이션과 파이프라인 간의 통신과 데이터 교환을 위한 여러 메커니즘을 제공합니다.

  • buffers는 파이프라인 내의 element 간에 스트리밍 데이터를 전달하기 위한 객체입니다. 버퍼는 항상 소스에서 싱크로 이동합니다 (downstream).
  • events는 element에서 element로 또는 애플리케이션에서 element로 전송되는 객체입니다. 이벤트는 upstream과 downstream으로 이동할 수 있으며 downstream 이벤트는 데이터 흐름과 동기화될 수 있습니다.
  • messages는 파이프라인의 message bus에 있는 element에 의해 게시된 객체로 애플리케이션이 수집하기 위해 이를 보관합니다. 메시지는 메시지를 게시하는 element의 스트리밍 스레드 컨텍스트에서 동기적으로 가로챌 수 있지만, 일반적으로 애플리케이션의 메인 스레드에 의해 비동기적으로 처리됩니다. 메시지는 오류, 태그, 상태 변경, 버퍼링 상태, 그리고 리디렉션 등과 같은 정보를 스레드로에 안전한 방식으로 element에서 애플리케이션으로 전송하는데 사용됩니다.
  • queries를 통해 애플리케이션은 파이프라인에서 지속 시간이나 현재 재생 위치와 같은 정보를 요청할 수 있습니다. 쿼리는 항상 동기적으로 응답됩니다. Element는 또한 peer element로부터 정보 (예: 파일 크기 또는 지속 시간) 를 요청하는 데 쿼리를 사용할 수 있습니다. 파이프라인 내에서 양방향으로 사용할 수 있지만, upstream 쿼리가 더 일반적입니다.

 

 

 

원문: Foundations (gstreamer.freedesktop.org)

 

Foundations

Foundations This chapter of the guide introduces the basic concepts of GStreamer. Understanding these concepts will be important in reading any of the rest of this guide, all of them assume understanding of these basic concepts. Elements An element is the

gstreamer.freedesktop.org

 

반응형

'IT와 개발 > GStreamer Study' 카테고리의 다른 글

Elements  (0) 2024.04.05
GStreamer 초기화  (0) 2024.03.29
디자인 원칙  (0) 2024.03.20
GStreamer 란?  (0) 2024.03.17
GStreamer 스터디 내용을 정리 합니다.  (0) 2024.03.17