Basic tutorial 1: Hello world!
개요
- 간단한 Hello Word 를 통해 각 method들이 무엇을 역할하는지 맛 보기
- gstreamer 는 간단하게 설명하면 멀티미디어 flow를 다루기위한 frameworkㅇ비니다.
- 미디어는 “source”라는 element 로 순회하여 “sink”라는 element로 내려가고, 모든 다양한 task를 수행하는 일련의 중개자 element들을 통과합니다.
- 상호 연결된 element는 pipeline이라고 불립니다.
Hello World
전체코드
#include
int main (int argc, char *argv[])
{
GstElement *pipeline;
GstBus *bus;
GstMessage *msg;
/* Initialize GStreamer */
gst_init (&argc, &argv);
/* Build the pipeline */
pipeline =
gst_parse_launch
("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm",
NULL);
/* Start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* 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);
/* See next tutorial for proper error message handling/parsing */
if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) {
g_error ("An error occurred! Re-run with the GST_DEBUG=*:WARN environment "
"variable set for more details.");
}
/* Free resources */
gst_message_unref (msg);
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
return 0;
}
하나씩 뿌시기
/* Initialize GStreamer */
gst_init (&argc, &argv);
- 모든 내부적 구조를 초기화
- 어떤 플러그인들을 사용할 수 있는지 체크
- gstreamer를 위한 명령줄 옵션을 실행
pipeline =
gst_parse_launch
("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm",
NULL);
- gst_parse_launch() 는 pipeline을 parse 한다.
- pipeline에 playbin은 해당 uri을 재생한다.
/* Start playing */
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* 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);
- pipeline 을 수행.
- element는 state와 연관되어 있는데, GST_STATE_PLAYING 은 element가 PLAYING 상태임을 알려준다.
- bus는 pipeline의 bus를 회수하여 gst_bus_timed_pop_filtered 에 신호(ERROR, EOS(End-Of-Stream)를 던져 준다. 그 전 까지는 block 함.
/* See next tutorial for proper error message handling/parsing */
if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) {
g_error ("An error occurred! Re-run with the GST_DEBUG=*:WARN environment "
"variable set for more details.");
}
- 애플리케이션을 종료하기 전에, 몇 가지 정리해야할 사항들이다
'👨🏻💻 Development > 🗂 etc' 카테고리의 다른 글
Gstreamer Basic tutorial 6: Media formats and Pad Capabilities (1) | 2023.03.23 |
---|---|
Gstreamer Basic tutorial 3: Dynamic pipelines (0) | 2023.03.23 |
Gstreamer Basic tutorial 2 (0) | 2023.03.23 |
[Network] ssh 키인증 방식 (0) | 2021.10.20 |