Hello World
이 문서는 위에 링크한 Hello World 예제의 내용을 바탕으로 정리한 내용이다.
/* Initialize GStreamer */
gst_init (&argc, &argv);
gst_init
함수는 세 가지의 주요한 작업을 한다.
pipeline =
gst_parse_launch
("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm",
NULL);
gst_parse_launch
는 쉽게 기본적인 파이프라인을 구성해서 시작해주는 역할을 한다.
파이프라인은 소스와 싱크를 결합한 집합을 의미한다.
미디어는 소스라는 원소로부터 싱크라는 원소로 흘러간다.
playbin
은 소스이기도 하고 싱크이기도 하며 전체적으로는 파이프라인인 특수한 원소이다. 미디어를 재생하기 위해서 내부적으로 원소들을 알아서 연결해주는 역할을 한다.
/* Start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING);
모든 원소는 상태를 가지고 있고, gst_element_set_state
는 이것을 변경해주는 작업을 한다.
/* Wait until error or EOS */
bus = gst_element_get_bus (pipeline);
msg =
gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
EOS나 error가 발생할 때까지 기다리는 동작을 한다. 단지 이 기능만 하는 것은 아닐 것 같은데, 구체적인 내용은 튜토리얼을 더 확인해봐야 할 것 같다.
/* Free resources */
if (msg != NULL)
gst_message_unref (msg);
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
메시지는 gst_message_unref
로, 원소는 gst_object_unref
를 통해서 해제해줘야 한다.