본문 바로가기

MultiMedia Framework23

우분투에서 ffmpeg 설치 방법 우분투에서 아래와 같이 apt-get으로 ffmpeg을 설치할 수 있다. $> sudo apt-get install ffmpeg 하지만 위와 같이 설치할 경우 h264 코덱이 포함되지 않아서 h264 인코딩 혹은 디코딩 하는데 제약 사항이 생긴다. 그래서 h264 소스를 다운받은 후 ffmpeg을 다시 빌드를 해주어야 하는데 그 방법은 아래와 같다. 1. 의존 관계가 있는 library 다운로드 및 업데이트ffmpeg을 컴파일 하기 위한 dependency가 있는 라이브러리들을 다운로드 한다. $> sudo apt-get update$> sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-.. 2014. 12. 12.
Buffer와 Event Buffer버퍼는 pipeline을 통해 흘러가는 데이터를 포함한다. source Element는 일반적으로 새로운 버퍼를 생성하고 생성된 버퍼를 다음 element로 전송한다. 버퍼는 메모리의 시작 주소, 메모리 크기, 타임스탬프, 레퍼런스 카운트(얼마나 많은 element가 해당 버퍼를 쓰고 있는지를 나타내는 카운트), 그리고 버퍼 플래그로 구성된다.일반적인 버퍼의 사용은, 맨 처음 버퍼가 생성되고 메모리가 할당되며 해당 메모리에 데이터를 복사한다.복사된 메모리를 가진 버퍼를 다음 element에 넘기고, 다음 element는 버퍼에 쓰여진 데이터를 읽은 후 버퍼의 레퍼런스 카운트를 줄인다.버퍼에 대한 보다 정교한 사용은 GStreamer를 이용해보며 차츰 익혀나가야 하겠다. Events이벤트 역시 .. 2013. 8. 1.
Ghost pads Element들은 다른 Element와 연결하기 위해 각각 pads를 가지고 있다. 그렇다면 Bin은? Bin 자체도 내부 Element와 연결하거나 외부로부터 데이터를 받기 위해서는 pad가 있어야 하는 것 아닌가? 그래서 생긴게 바로 Ghost pads이다. 그림에서 보면 Element1의 sink pad는 이제 bin의 sink pad 역할도 함께 담당하게 된다. ghostpad는 gst_ghost_pad_new()를 사용하여 생성한다. 2013. 7. 31.
Capabilities의 사용 용도 Capabilities(짧게 앞으로는 cap) 는 pad에서 지원하고 있는 데이터의 type에 대해 기술하고 있다. 그렇다면 이러한 cap을 과연 어떤 용도로 사용하게 될까?해당 메뉴얼에서는 크게 4가지의 사용 방법을 제시하고 있다. Autoplugging- element가 자동으로 cap이 지원하는 pad를 연결할 수 있도록 하는 autoplugging을 지원한다. Compatibility detection- 두 개의 pads가 서로 연결되어 있다고 한다면, GStreamer는 해당 pads가 동일한 미디어 타입을 지원하는 지를 검증할 수 있다.- cap을 통해 해당 검증을 가능케 해준다. Metadata- pad로부터 cap 정보를 읽음으로써, application은 현재 pad에 흐르고 있는 미디어.. 2013. 7. 30.
Capabilities of a pad Pad의 capabilities를 사용함으로써 어떤 data type이 pad를 통해 흘러들어가고 나가는지를 확인할 수 있다.Pad의 capabilities는 GstCaps 객체에 의해 기술된다. 내부적으로 GstCaps는 하나 이상의 GstStructure를 포함하고 있으며, 이 GstStructure는 하나의 미디어 타입에 대해 기술해 놓고 있다.간단히 "vorbisdec" element를 예로 들자면, 해당 element에 대해 gst-inspect로 분석해 보면, source pad와 sink pad가 각각 한개씩 존재하는 것을 알 수 있다. source pad는 raw audio mime 타입의 데이터("audio/x-raw-float")를 다음 element로 전송하고 있고 sink pad는 .. 2013. 7. 29.
Pads Pad 타입은 'direction'과 'availability'. 두 가지 프로퍼티에 의해 정의된다. 이 전에도 설명한 것과 같이 GStreamer에서는 'source pad'와 'sink pad'라는 두 개의 pad direction을 정의한다.source pad와 sink pad는 이전에도 설명한 적이 있으니 skip~또한 pad는 세 개의 availability를 가진다.바로 always, sometimes 그리고 on request.always pad는 항상 존재하는 pad를 말하고, sometimes pad는 어떤 특정 경우에는 존재하는 pad를 말한다.on request pad는 application에 의해 요청이 들어왔을 때만 존재하는 pad를 말한다. Dynamic(or sometimes).. 2013. 7. 28.
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.