본문 바로가기

MultiMedia Framework/GStreamer17

Message types GStreamer는 미리 정의된 Message type을 가지고 있다. 또한 추가적인 message들도 정의가 가능하다. 모든 message들은 message source와 type 그리고 timestamp를 가지고 있다. message source는 어떤 element가 message를 전달했는지를 알기 위해서 사용한다. 아래는 message 목록과 짧은 설명에 대해 기술하였다. Error, warning and information notifications- pipeline의 상태에 대해 사용자에게 알리는 용도로 사용되는 message.- Error message는 치명적인 결함을 알리며, date의 흐름을 종료한다.- Warning은 치명적이진 않지만, 문제를 일으킬 소지가 있다.- Informat.. 2013. 7. 27.
Bus Bus는 현재의 thread context 내에서 pipeline thread에서 application으로 메시지를 전송할 때 쓰이는 단순한 시스템이다. bus의 이점은 application이 GStreamer를 사용하기 위해 현재 동작하고 있는 Thread에 대해 전혀 알 필요가 없다는 것이다. 모든 pipeline이 기본적으로 bus를 포함하고 있으며, application은 bus를 따로 생성할 필요가 없다. application은 오직 message handler만 설정하면 된다. mainloop가 돌 때 bus는 주기적으로 새로운 메시지를 체크하고, 메시지가 이용가능하다고 판단되면 callback을 호출한다. Bus를 사용하여 메시지를 가져오는 방법에는 두 가지가 있다. 첫 번째는 GLib ma.. 2013. 7. 26.
Bin Bin은 콘테이너 element라고도 할 수 있다.새롭게 생성된 element를 Bin에 추가할 수 있으며, Bin 그 자체는 속해 있는 element들에 대한 처리가 가능하다.Bin에 대해 조금 더 자세히 설명하자면, 연결되어 있는 element들이 논리적으로 결합된 형태로 나타나는 것이 Bin이다.각각의 element들을 처리할 필요 없이 하나의 element, 즉 Bin을 통해 처리가 가능하다. Bin의 생성- Bin은 다른 element들을 생성할 때와 동일한 방식으로 생성된다.- element factory를 사용한다면, gst_bin_new(), gst_pipeline_new() 등과 같은 함수 사용이 더 편리할 것이다.- element를 bin에 추가하고 삭제하기 위해서는 gst_bin_ad.. 2013. 7. 25.
Element States element가 생성되었다고 해서 곧바로 어떤 작업을 수행하는 것은 아니다. element의 상태를 변경해야 할 필요가 있다. element는 총 4 가지 상태로 나눌 수 있으며, 다음과 같다. GST_STATE_NULL- default 상태. 이 상태에서는 어떤 resource도 할당 받지 못한 상태이다. - reference count가 0이거나 free 상태일때 element는 반드시 NULL 상태를 유지해야 한다. GST_STATE_READY- ready 상태. element가 resource를 막 할당받은 상태이다. 이 말인 즉, buffer등의 resource가 Stream 내에 보존되고 있다는 말이다.- 하지만 이 상태에서는 Stream이 열려있지는 않다. 그래서 stream 위치는 자동적으.. 2013. 7. 24.
Linking elements Data는 Source element에서 생성되어 0개 또는 다중의 filter element들을 거친 후 결국에는 sink element로 흐르게 된다. 아래는 위의 그림을 코드로 구현한 내용이다. 링크 시 중요한 사항으로 bin 또는 pipeline에 element를 추가할 때, 이미 연결되어 있는 link에 대한 disconnect를 먼저 확인해야 한다.또한 다른 계층 레벨에서 element 또는 pads를 연결하고자 할때는 ghost pads를 사용해야 한다. 이에 대해서는 다음 번에 자세히 살펴봐야 할 것 같다. (아직까진 무슨 소리를 하는건지 잘....) 2013. 7. 23.
Element GStreamer에 있어서 가장 중요한 객체라고 할 수 있다. Source element - 오직 파이프라인을 사용해서 데이터를 생성해 내는 역할. - 디스크로부터 데이터를 읽는다는지, 사운드 카드로부터 데이터를 읽는 것 등을 예로 들 수 있다. - source element 내부엔 오직 source pad만 존재하며 데이터를 생성해 내는 역할만 한다. Filters, convertors, demuxers, muxers and codecs - Filter와 관련된 element 들은 input과 output pad 모두 가지고 있다. - input (Sink) pad를 통하여 데이터를 전송받고 output (Source) pad 를 통해 데이터를 내보낸다. - 1개 이상의 source pad와 sink .. 2013. 7. 16.
GStreamer 초기화 GStreamer를 이용하여 개발하기 위해서는 우선 소스 맨 위에 를 include 해줘야 한다. include 한 이후에는 GStreamer library의 초기화가 필요하다. 초기화하기 위해서는 gst_init이라는 함수를 사용하는데, GStreamer 기반의 명령 라인 옵션을 parsing할 뿐만 아니라 비초기화된 라이브러리들을 초기화 하는 역할을 담당하고 있다.GST_VERSION_MAJOR, GST_VERSION_MINOR, GST_VERSION_MICRO 매크로를 사용하여 GStreamer 버전을 알 수 있다.매크로를 사용하지 않고 gst_version이라는 함수를 사용할 수도 있다. gst_init 아규먼트에 아무런 명령어 옵션을 지정하고 싶지 않다면, NULL 문자를 기입하여도 상관없다. 2013. 7. 15.
GStreamer란? GStreamer란 무엇인가?? 리눅스 기반에서 streaming을 보다 쉽게 처리할 수 있도록 만든 open source framework.기본 디자인은 Direct show와 매우 흡사하다. 위 그림은 GStreamer의 기본적인 architecture를 나타내고 있는데, protocol을 보면 file로도 떨굴 수 있고, http, rtsp로도 쏠 수 있다. GStreamer Term. Elements- GStreamer에 있어 가장 중요한 객체. 연결된 elements 들의 체인을 만들 수도 있으며 이렇게 만들어진 체인을 이용하여 스트림 데이터를 처리할 수도 있다.하나의 element는 하나의 특정 기능을 가질 수 있다. file로부터 데이터를 읽어오는 element라든지, date를 decodi.. 2013. 7. 13.