Multimedia/GStreamer

GStreamer plugin writer's guide: part 1

Roien 2021. 12. 22.
반응형

1.     Introduction

 

modularity GStreamer framework virtues

audio filter plugin을 작성할 때 발생할 수 있는 대부분의 issue에 대해 다룸

 

fundamental design Oregon Graduate Institute video pipeline DirectShow idea에서 왔음

 

main advantages

Ÿ   pluggable component

n  can be mixed and matched into arbitrary pipelines

 

GStreamer core function

Ÿ   plugins

Ÿ   data flow

Ÿ   synchronization

Ÿ   media type handling/negotiation

 

prelimimary

Ÿ   the basic of GOjbect

n  http://developer.gnome.org/gobject/stable/pt01.html

 

 

1.1.     gst installation

sudo apt install libgstreamer1.0-0 libgstreamer1.0-dev gstreamer1.0-tools gstreamer1.0-doc gstreamer1.0-x gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly  gstreamer1.0-alsa gstreamer1.0-libav gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio libgstreamer-plugins-base1.0-dev 

 

2.     Foundations

 

2.1.     elements and plugins

GstElement로부터 derived  object

Ÿ   다른 element link가능

Ÿ   source elements

 

n  stream data 공급

Ÿ   filter elements

n  stream 상의 data에 어떤 작업 수행

 

element plugin으로 encapsulate 해야함

plugin lodable block of code (shared  object file or a dynamically linked library)

하나의 plugin이 여러 element들을 지닐 수 있음

 

Ÿ   filter

n  data stream 처리 element

n  source element: producers

n  sink element: consumers

 

Ÿ   bin element

n  다른 element들을 포함

n  types

s   synchronization

-       bin이 포함하고 있는 element들의 synchronization 역할

s   autoplugger

-       자동으로 다른 element bin에 추가하고 link하여 두개의 서로다른 stream type간에 filter로 동작

 

plugin registry

Ÿ   binary registry file  plugin detail을 저장하는 registry

n  why?

s   모든 plugin을 다 load 할 수 없음

s   plugin은 해당 plugin에서 제공된 element가 요청 되었을 때만 load 

 

GStreamer Library Reference 에서

Ÿ   GstElement GstPlugin의 현재 구현을 살펴볼 수 있음

 

 

2.2.     pads

element간의 연결을 negotiation 하고 data flow를 처리하는데 사용됨

pad place 혹은 port라고도 함

 

Ÿ   pad

n  data handling capabilities를 지님

n  pad data flow type을 제 한할 수 있음

n  plug 혹은 jack과 유사

 

Ÿ   links

n  두 개 pad간의 연결을 의미

n  pad의 허용가능한 data types이 맞을 경우 연결 가능함

 

 

2.3.     GstMiniObject, buffers and events

 

stream chunk로 쪼개져서 한 element source pad에서  다른 element sink로 전달됨

GstMiniObject data chunk를 담는 구조체

 

GstMiniObject

  • Ÿ   type 정보를 지님
    • n  event인지 buffer인지
  • Ÿ   reference count
    • n  몇 개의 element가 현재 reference를 지니는지에 대한 count
    • n  0가 되면 miniobject는 disposed 되고 memory는 free 됨
  • Ÿ   data transport에 있어서 다음의 2가지 types의 GstMiniObject가 정의됨
    • n  event(control)
      • s   stream의 state 정보
      • s   element가 해당 event를 지원하는 경우에만 보내짐
      • -       그렇지 않은 경우 core가 event를 처리하게 됨
      • s   media type, EOS, cache의 flush 등을 표시하게 위해서 사용됨
      • s   types
      • -       subtype
        • n  포함된 event의 type을 표시
      • -       특정 event type에 의존적인 contents
    • buffers(content) 
      • s   A/V data의 chunk를 지님
      • s   buffer의 content를 describing하는 metadata도 지닐 수 있음
      • s   Metadata types
      • -       하나 이상의 GstMemroy 객체에 대한 pointers
        • n  GstMemory는 특정 영역의 memory를 encapsulation
      • -       timestamp
        • n  buffer 내 content의 display timestamp를 표시

 

 

2.3.1.        buffer allocation

 

special buffers

Ÿ   filesrc

  • n  file을 address space로 map (using mmap)
  • n  buffer는 address range를 point
  • n  read-only로 생성되며 보통 filesrc가 생성
  • n  downstream element는 해당 buffer에 대해 unreferenced 등을 할 필요가 없음

 

Ÿ   GstBufferPool / GstAllocator

  • n  element가 downstream peer element의 GstBufferPool 혹은 GstAllocator에 ask
  • n  downstream이 이런 object를 제공가능하면, upstream은 이를 사용하여 buffer를 할당
  •  element가 upstream peer를 위해서 GstBufferPool이나 GstAllocator를 생성하는 것은 보통의 일
  • n  ex.
    • s   ximagesink
    • -       XImage를 포함하는 buffer를 생성
    • -       upstream peer가 data를 buffer로 copy 하면, 이난 XImage로 바로 copy 됨
      • n  이로서 ximagesink는 copy 본 없이 image를 바로 screen에 draw
  • n  최초 element가 보통 다음의 두 가지로 동작 할 수 있음
    • s   buffer-in-place 상의 work
    • s   source에서 dest buffer로 copying하면서의 work
  • n  최선은 위 두가지 모드를 다 구현하는 것임
    • s   GStreamer framework이 적절한 알고리즘을 선택

 

  • sink elements들은 hardware로 data를 copy하는데 있어서 가속화된 method를 지님
  • 혹은 hardware에 directly access

 

 

2.4.     Media types and properties

 

Ÿ   type stream

Ÿ   the type system

  • n  element간의 pad의 link 시 format이 match up 되는 것을 확인
  • n  Caps negotiation

 

2.4.1.        The basic types

media type desc. property property type property values property desc.
audio/* all audio types rate integer greater than 0 the sample rate
channels integer greater than 0 the number of channels    
audio/x-raw raw integer audio data format string S8 U8 S16LE, …  
audio/mpeg MPEG 압축 format mpegversion integer 1,2, or 4 MPEG-version
 
1, 2, 2.5 MP3
 
2/4 MPEG-AAC
framed Boolean 0 or 1  buffer가 하나의 frame만 지녔는지를 알려줌    
layer integer 1, 2, 3 압축 scheme layer    
bitrate integer greater than 0 VBR MPEG의 경우 average bitrate    
audio/x-vorbis Vorbis audio data        

 

반응형

'Multimedia > GStreamer' 카테고리의 다른 글

GStreamer application development guide  (0) 2021.12.22
GStreamer pwg ch. 3  (0) 2021.12.22
GStreamer pwg ch 4~6  (0) 2021.12.22
GStreamer pwg ch 7 ~ 9  (0) 2021.12.22
GStreamer pwg ch 11  (0) 2021.12.22

댓글