#include <gst/gst.h>
int main(int argc, char *argv[]) {
GstElement *pipeline;
GstBus *bus;
GstMessage *msg;
/* test용 변수선언 */
char *launch_uri = "playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm";
char *launch_uri_rtsp_sample = "playbin uri=rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov"; /* Wowza Streaming Engine's sample*/
/* Initialize GStreamer */
/* gst_init을 꼭 호출해서 라이브러리들을 초기화, argc와 argv로 넘어온 gstreamer 옵션 값 */
gst_init (&argc, &argv);
/* Build the pipeline */
/* gstreamer에서 영상을 재생시키기 위해서는 "source element"와 "sink element"가 존재하고, 이 source에서 sink로 데이터가 흘러야한다. = 이 과정이 pipeline */
/* pipeline은 개발자가 일일이 개별 요소를 구축해서 생성할 수도 있고, 아래와 같이 gst_parse_launch를 통해서 자동으로 pipeline을 생성 */
/* 개별 요소를 구축의 경우는 개발자가 source element -> sink element일떄 이벤트를 잡아서 어떤 처리를 하고 싶다 의 요구사항이 있을때 개별 구축이 필요함*/
/* uri 부분을 http:// or file:// URI, playbin 등으로 바꿔도됨 */
/* 1. 이부분을 rtmp , rtsp 입수 가능하게 바꿔보자 */
pipeline = gst_parse_launch (launch_uri_rtsp_sample, NULL);
/* Start playing */
/* pipeline의 상태를 playing :: ST_STATE_NULL, GST_STATE_READY, GST_STATE_PAUSED, GST_STATE_PLAYING */
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* Wait until error or EOS */
/* pipeline으로부터 bus를 가져오고 bus의 이벤트가 에러이거나(GST_MESSAGE_ERROR), 파일의 끝(GST_MESSAGE_EOS)일 때까지 block시킴을 의미 */
bus = gst_element_get_bus (pipeline);
msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
/* Free resources */
/* Cleanup(자원 반환) 코드이다. bus로부터 반환된 메시지를 해제하고, bus 객체도 해제한다. pipeline의 상태를 NULL로 바꿔주고(default) pipeline 객체를 해제하면 모든 자원 반환이 완료 */
if (msg != NULL) {
gst_message_unref(msg);
}
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
return 0;
}
'video' 카테고리의 다른 글
스트리밍 프로토콜 선택 (0) | 2019.04.11 |
---|---|
install gstreamer in windows10 (0) | 2018.12.05 |
Streaming 방식 및 상세 (0) | 2018.11.25 |