Hello World 예제에서 알게 되는 주요 개념

이상문·2021년 8월 18일
0

gstreamer

목록 보기
2/5

Hello World
이 문서는 위에 링크한 Hello World 예제의 내용을 바탕으로 정리한 내용이다.

 /* Initialize GStreamer */
  gst_init (&argc, &argv);

gst_init 함수는 세 가지의 주요한 작업을 한다.

  • 내부 구조 초기화 - 구조라는 의미가 데이터 구조를 의미하는 건지, 전반적인 구조를 의미하는 것인지는 아직 모르겠다. 아마 후자가 아닐까 싶다.
  • 플러그인이 어떤 것이 허용되는지 확인
  • 명령라인의 옵션 처리 - argc, argv를 받는 이유이다.
  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 를 통해서 해제해줘야 한다.

profile
프로그래밍을 좋아하는 평범한 개발자입니다.

0개의 댓글