영상인식

Gstreamer란

728x90

Gstreamer란

GStreamer는 스트리밍 미디어 애플리케이션을 만들기 위한 프레임워크이다.

GStreamer의 개발 프레임워크를 사용하면 모든 유형의 스트리밍 멀티미디어 응용 프로그램의 작성과 오디오나 비디오, 그 밖의 다양한 종류의 데이터 흐름을 처리할 수 있으며 대기 시간이 많이 요구되는 고급 오디오 응용 프로그램을 설계하기 위한 좋은 프레임워크이다.

 

GStreamer에는 MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod 등을 포함하여 매우 다양한 형식을 지원할 수 있는 미디어 플레이어를 구축하기 위한 구성 요소가 이미 포함되어 있다.  GStreamer의 주요 장점은 플러그인 가능한 구성 요소를 임의의 파이프라인에 혼합 및 일치시킬 수 있으므로 본격적인 비디오 또는 오디오 편집 응용 프로그램을 작성할 수 있다는 것이다.

 

프레임워크는 다양한 코덱 및 기타 기능을 제공하는 플러그인을 기반으로 하며 파이프라인에서 연결 및 정렬될 수 있다. 이 파이프라인은 데이터의 흐름을 정의하고 GUI 편집기를 통한 편집과 XML로 저장이 가능하여 쉽게 파이프라인 라이브러리를 만들 수 있다.

 

GStreamer의 핵심 기능은 플러그인, 데이터 흐름 및 미디어 유형 처리/협상을 위한 프레임워크를 제공하는 것과 다양한 플러그인을 사용하여 애플리케이션을 작성할 수 있는 API의 제공이다.

 

  •   GStreamer의 제공요소

-멀티미디어 애플리케이션용 API

-플러그인 아키텍처

-파이프라인 아키텍처

-미디어 유형 처리/협상을 위한 메커니즘

-동기화 메커니즘

-1000개 이상의 요소를 제공하는 250개 이상의 플러그인

-도구 세트

 

  •  GStreamer의 플러그인은 다음과 같이 분류될 수 있다.

-프로토콜 처리

-소스: 오디오 및 비디오용(프로토콜 플러그인 포함)

-형식: 파서, 포매터, 먹서, 디먹서, 메타데이터, 자막

-코덱: 코더 및 디코더

-필터: 변환기, 믹서, 효과 등 

-싱크: 오디오 및 비디오용(프로토콜 플러그인 포함)

 

[Gstreamer의 프레임워크]

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

 

  • Gstreamer의 패키지요소

-gstreamer: 핵심 패키지

-gst-plugins-base: 필수 예시 요소 집합

-gst-plugins-good: LGPL에 따른 양질의 플러그인 세트

-gst-plugins-ugly: 배포 문제를 일으킬 수 있는 양질의 플러그인 세트

-gst-plugins-bad: 더 많은 품질이 필요한 플러그인 세트

-gst-libav: 디코딩 및 인코딩을 위해 libav를 래핑하는 플러그인 세트

-그 밖의 제3의 패키지

 

 

1-1 Gstreamer의 구성요소와 용어

 

구성요소

elements : 가장 중요한 객체의 클래스. 서로 연결된 chain of elements를 만들고, 이를 통해 데이터가 흐르게 한다.

 

pads : element의 입력, 출력 및 다른 elements와 연결 가능. 흐르는 데이터 유형을 제한할 수 있고, 두 패드의 허용된 데이터 유형이 호환되는 경우만 링크가 허용됨. 패드=물리적 장치의 잭과 유사(c type=c type잭만 연결됨)하고, 대부분의 데이터는 한방향으로만 흐른다. 데이터는 source pads 통해 나가고, sink pads 통해 받을 수 있다.

 

bins and pipelines

bin : elements의 컨테이너, bin 상태를 변경해 그 안의 모든 요소에서 상태를 변경할 수 있음.

pipeline : 최상위 빈, 응용프로그램을 위한 버스 제공, 자식에 대한 동기화 관리

 

 

1-–2. Communication

 

communication : 애플리케이션, 파이프라인 간 통신, 데이터 교환 위한 메커니즘을 제공함.

[Communication  예시]

아래는 Communication의 구성 요소이다.

 

buffer : 파이프라인 요소간 데이터 전달위한 객체, sourcesink로 이동함

event : 요소간 또는 응용 프로그램에서 요소로 전송되는 객체

message : 파이프라인의 메시지 버스에 요소별로 게시된 개체, 응용 프로그램에서 수집을 위해 유지됨.

query : 응용 프로그램은 query통해 파이프라인에서 지속시간, 현재 재생 위치와 같은 정보 요청 가능.

 

* elements 종류 3가지 (source, filter, sink)

element는 source element로 시작되어 filter와 demuxer가 중간에 삽입되고, sink element로 끝나게 됨

1-3 요소 설명

 

* source elements

- 디스크, 사운드 카드에서 읽어 파이프라인에서 사용할 데이터 생성. 입력(받는곳)은 없고 출력만 있음.

 

* filters, convertors, demuxers, muxers and codecs

 

- 입력, 출력 pad가 있고(데이터를 받고, 데이터를 처리 후 내보냄), 1:1(filter, convertor) 또는 1:N(demuxer, muxer) 의 형태를 지님.

- filter(볼륨), convertor(비디오 크기변환), ogg(비디오+음성 포함 파일) demuxer 등이 있음.

* sink elements

- 미디어 파이프라인의 끝 점. 입력(받는곳)만 있고, 출력은 없다.

 

1-4. bins

 

- bin : container element나 여러 element를 감싼 컨테이너라 할 수 있다. element들의 상태를 한번에 관리할 수 있다는 장점이 있다.
(NULL(기본상태), READY(준비상태), PAUSED(멈춘 상태), PLAYING(재생상태))

[기본적 오디오 플레이어 구성 예제]

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

 

*muxer = 멀티플렉서(multiplexer) 또는 mux는 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치.

*Demuxer = 디멀티플렉서(demultiplexer, demux)는 하나의 입력 신호를 받아서 수많은 데이터 출력선 중 하나를 선택하는 장치를 말하며 단일 입력으로 연결됨.

 

 

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

 

728x90

'영상인식' 카테고리의 다른 글

RTSP란  (0) 2021.07.22
Nvidia deepstream tracker 라이브러리 (IOU/KLT/Nvdcf )  (0) 2021.07.15
Deepstream 이란  (0) 2021.07.14
Deepstream rstp통신을 위한 파이프라인 조정  (0) 2021.07.07
Deepstream Yolov3 사용기  (2) 2021.07.06