본문 바로가기

Tech/DeepStream

[GStreamer] GStreamer 개념 정리

반응형

GStreamer는 스트리밍 미디어 애플리케이션을 개발을 위한 프레임워크로 Deepstream은 GStreamer를 기반으로 한 SDK이기 때문에 GStreamer의 기본 개념을 우선적으로 정리한다.

gstreamer 프레임워크는 모든 형태의 스트리밍 미디어 애플리케이션을 개발할 수 있다. 오디오나 비디오 한가지 타입만 가능한 것이 아니라 두가지 타입 모두를 다룰 수 있도록 개발이 되었다. 또한 어떤 종류의 데이터 흐름도 구성할 수 있는 파이프라인 구조로 되어있다.

 

[gstreamer plugins]
- protocols handling
- sources: for audio and video
- formats: parsers, formaters, muxers, demuxers, metadata, subtitles
- codecs: coders and decoders
- filters: converters, mixers, effects …
- sinks: for audio and video​

 

기본 개념

Element

element Gstreamer  객체들  가장 중요한 클래스이다. 각각의 element들을 연결시키고 이를 통해 데이터가 흘러가도록 한다.

각각의 element 하나씩 기능을 가지고 있는데, 이러한 element들을 연결시켜서 특정한 task 위한 pipeline 만들 있다.

필요한 경우에는 사용자가 직접 새로운 능의 element 생성할수도 있다.

Pads

pad element의 입출력을 담당하고 있다. element들을 연결하기 위해서 각각의 입력과 출력 pad 연결시킨다.  pad element간의 연결의 조정과 data 흐름도 맡고있다. 서로 연결된 element에서의 데이터 pad 통해서 다른element 흘러가기 때문이다. 각각의 pad 각각 조작할  있는 데이터 capabilities 있다. element 연결 시에도 해당 pad간의 capabilities 비교하여 일치하는 것이 있는 경우에 해당 타입을 capabilities pad 연결된다. 또한 이를통해서 pipeline 흐르는 데이터 타입을 제한할 수도 있다.

 

GStreamer에서 데이터 흐름은 주로 한방향으로만 흘러간다. element source pad로부터  다음 element sink pad 방향으로 흘러간다.

Bins and pipelines

Bin element들의 집합을 담고있는 컨테이너이다. bin element subclass이기 때문에 bin element처럼 간단하게다룰  있다. 이를 통해서 element들을 특정 bin 포함시켜서 상태를 한번에 변경하거나 특정한 이벤트를 주는 , 다수의 element들을 간단하게 조작할  있다.

 

pipeline 가장 최상위 bin이다. pipeline application bus 제공하고 포함하고 있는 요소들에 대한 동기화를 관리한다. pipeline 상태를 PAUSED PLAYING 등으로 조작하여서 pipeline 동작하고 데이터 흘러가도록  있다.

Communication

Gstreamer application pipeline 간의 데이터 통신에 대한 몇가지 기능을 제공한다.

1) buffers

buffer pipeline element간의 streaming data 이동하는데 사용되는 객체이다. 항상 source에서 sink 이동한다. (downstream)

2) events

event element 또는 application element 간의 통신하는 객체이다. event upstream downstream 모두통신 가능하다. downstream event data 흐름과 동기화가 가능하다.

3) messages

message pipeline message bus element 의해서 전송된다. 메시지는 메시지를 전송한 elemtnstreaming thread context에서 동기적으로 intercept 가능하지만 보통은 application main thread에서 비동기적으로조작된다.

메시지는 주로 error, tags, state changes, buffering state, redirects 등의 정보를 element에 application으로 전달한다.

4) queries

queries application pipeline에게 duration, playback position 등의 정보를 요청하도록 한다. queries 항상동기적으로 응답한다. element 또한 queries 사용할  있는데, file size duration 등의 정보를 요청한다. queriesupstream downstream 모두 사용할  있지만 주로 upstream queries 많이 사용된다.

 

 

 

[reference]

- https://gstreamer.freedesktop.org/documentation/application-development/introduction/gstreamer.html?gi-language=c 

 

What is GStreamer?

What is GStreamer? GStreamer is a framework for creating streaming media applications. The fundamental design comes from the video pipeline at Oregon Graduate Institute, as well as some ideas from DirectShow. GStreamer's development framework makes it poss

gstreamer.freedesktop.org

 

반응형

'Tech > DeepStream' 카테고리의 다른 글

[Deepstream] Gst-nvdsanalytics  (0) 2021.08.18
[Deepstream] Gst-nvinfer  (0) 2021.08.18
[Deepstream] Gst-nvstreammux  (0) 2021.08.16