Gstreamer란
GStreamer는 스트리밍 미디어 애플리케이션을 만들기 위한 프레임워크이다.
GStreamer의 개발 프레임워크를 사용하면 모든 유형의 스트리밍 멀티미디어 응용 프로그램의 작성과 오디오나 비디오, 그 밖의 다양한 종류의 데이터 흐름을 처리할 수 있으며 대기 시간이 많이 요구되는 고급 오디오 응용 프로그램을 설계하기 위한 좋은 프레임워크이다.
GStreamer에는 MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod 등을 포함하여 매우 다양한 형식을 지원할 수 있는 미디어 플레이어를 구축하기 위한 구성 요소가 이미 포함되어 있다. GStreamer의 주요 장점은 플러그인 가능한 구성 요소를 임의의 파이프라인에 혼합 및 일치시킬 수 있으므로 본격적인 비디오 또는 오디오 편집 응용 프로그램을 작성할 수 있다는 것이다.
프레임워크는 다양한 코덱 및 기타 기능을 제공하는 플러그인을 기반으로 하며 파이프라인에서 연결 및 정렬될 수 있다. 이 파이프라인은 데이터의 흐름을 정의하고 GUI 편집기를 통한 편집과 XML로 저장이 가능하여 쉽게 파이프라인 라이브러리를 만들 수 있다.
GStreamer의 핵심 기능은 플러그인, 데이터 흐름 및 미디어 유형 처리/협상을 위한 프레임워크를 제공하는 것과 다양한 플러그인을 사용하여 애플리케이션을 작성할 수 있는 API의 제공이다.
- GStreamer의 제공요소
-멀티미디어 애플리케이션용 API
-플러그인 아키텍처
-파이프라인 아키텍처
-미디어 유형 처리/협상을 위한 메커니즘
-동기화 메커니즘
-1000개 이상의 요소를 제공하는 250개 이상의 플러그인
-도구 세트
- GStreamer의 플러그인은 다음과 같이 분류될 수 있다.
-프로토콜 처리
-소스: 오디오 및 비디오용(프로토콜 플러그인 포함)
-형식: 파서, 포매터, 먹서, 디먹서, 메타데이터, 자막
-코덱: 코더 및 디코더
-필터: 변환기, 믹서, 효과 등
-싱크: 오디오 및 비디오용(프로토콜 플러그인 포함)
[Gstreamer의 프레임워크]
- 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의 구성 요소이다.
buffer : 파이프라인 요소간 데이터 전달위한 객체, source→sink로 이동함
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(재생상태))
[기본적 오디오 플레이어 구성 예제]
*muxer = 멀티플렉서(multiplexer) 또는 mux는 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치.
*Demuxer = 디멀티플렉서(demultiplexer, demux)는 하나의 입력 신호를 받아서 수많은 데이터 출력선 중 하나를 선택하는 장치를 말하며 단일 입력으로 연결됨.
'영상인식' 카테고리의 다른 글
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 |