MultiMedia Framework/GStreamer(17)
-
Stream Seek
이번 포스팅에서는 스트림 위치 값 등을 얻기 위해 어떻게 파이프라인에 요청을 하는 지와 스트림의 위치를 어떻게 조작하는지에 대해 살펴볼 것이다. 일단 코드에 앞서 GstQuery 라는 객체가 새롭게 등장하는데, 이 GstQuery는 element나 pad에게 정보를 요청하기 위해 사용된다.이전에는 파이프라인이 구성되면 EOS나 ERROR가 발생하기 전까지는 메인 function에서 계속 대기하는 것 위주로 설명을 하였는데, 이번 포스팅에서는 주기적으로 파이프라인을 깨워서 스트림 위치에 대한 정보를 요청하고 화면에 해당 위치를 출력하는 프로그램을 짤 것이다. 실행해보면 화면이 출력되고, console 창에 스트림 위치 값이 계속 변하는 것을 볼 수 있다. typedef struct _CustomData{ ..
2015.03.24 -
동적으로 파이프라인 구축하기
이번 포스팅을 통해 동적으로 파이프라인을 구축하는 방법을 살펴볼 수가 있다. 언제나 그렇듯이 실행 ㄱㄱ $> g++ -o tutorial3 tutorial3.c `pkg-config --cflags --libs gstreamer-1.0`$>./tutorial3Pipeline state changed from NULL to READY:Received new pad 'src_0' from 'source': It has type 'video/x-raw' which is not raw audio. Ignoring.Received new pad 'src_1' from 'source': Link succeeded (type 'audio/x-raw').Pipeline state changed from READY to..
2015.03.21 -
수동으로 파이프라인 구축하기
전 포스팅에는 uri를 가져와서 playbin에 담은 후 gst_parse_launch를 통해 pipeline을 구축하는 방법을 설명했다. 이번에는 직접 pipeline을 구축해 보려고 한다. 이번에도 컴파일을 한 후 재생을 해보자. $> g++ -o tutorial2 tutorial2.c `pkg-config --cflags --libs gstreamer-1.0` 예전에 화면 조정 시간에 많이 봤던 장면이네..코드를 살펴보자.. gst_init(&argc, &argv); 이전 포스팅에서 설명했으니 이번엔 skip.. source = gst_element_factory_make("videotestsrc", "source");sink = gst_element_factory_make("autovideosin..
2015.03.20 -
hello world 찍기
대부분의 언어들은 Hello world를 찍어보는 것을 시작으로 프로그래밍을 이야기한다. 그럼 과연 gstreamer에서도 hello world를 찍어볼 수 있을까?여기서는 hello world를 화면에 찍어보기 보다는 gstreamer에서 hello world 격인 멀티미디어 재생을 해보려고 한다.해당 Tutorial은 gstreamer sdk 문서를 참조하였다. 해당 코드를 우선 실행시켜보자. 아래와 같이 컴파일을 하면 tutorial1 이라는 실행 파일이 생성된다. $> g++ -o tutorial1 tutorial1.c `pkg-config --cflags --libs gstreamer-1.0` 이제 생성된 tutorial1을 실행해보자. $> ./tutorial1 화면이 잘 재생되는가??? 이제..
2015.03.19 -
Buffer와 Event
Buffer버퍼는 pipeline을 통해 흘러가는 데이터를 포함한다. source Element는 일반적으로 새로운 버퍼를 생성하고 생성된 버퍼를 다음 element로 전송한다. 버퍼는 메모리의 시작 주소, 메모리 크기, 타임스탬프, 레퍼런스 카운트(얼마나 많은 element가 해당 버퍼를 쓰고 있는지를 나타내는 카운트), 그리고 버퍼 플래그로 구성된다.일반적인 버퍼의 사용은, 맨 처음 버퍼가 생성되고 메모리가 할당되며 해당 메모리에 데이터를 복사한다.복사된 메모리를 가진 버퍼를 다음 element에 넘기고, 다음 element는 버퍼에 쓰여진 데이터를 읽은 후 버퍼의 레퍼런스 카운트를 줄인다.버퍼에 대한 보다 정교한 사용은 GStreamer를 이용해보며 차츰 익혀나가야 하겠다. Events이벤트 역시 ..
2013.08.01 -
Ghost pads
Element들은 다른 Element와 연결하기 위해 각각 pads를 가지고 있다. 그렇다면 Bin은? Bin 자체도 내부 Element와 연결하거나 외부로부터 데이터를 받기 위해서는 pad가 있어야 하는 것 아닌가? 그래서 생긴게 바로 Ghost pads이다. 그림에서 보면 Element1의 sink pad는 이제 bin의 sink pad 역할도 함께 담당하게 된다. ghostpad는 gst_ghost_pad_new()를 사용하여 생성한다.
2013.07.31