DeepStream是基于GStreamer开发的。它们主要都是做视频流处理的。现在我们来看一个GStreamer的HelloWorld。
在/opt/nvidia/deepstream/deepstream-5.0/sources/apps/sample_apps目录下创建一个新的文件夹basic-tutorial-1,进入该文件夹,创建一个basic-tutorial-1.c文件,内容如下
#include <gst/gst.h>
int
main (int argc, char *argv[])
{
GstElement *pipeline; //构建一个媒体管道的基本块,包含了各种element,如source,sink
GstBus *bus; //总线
GstMessage *msg; //总线消息
/* Initialize GStreamer */
gst_init (&argc, &argv); //初始化GStreamer
/* Build the pipeline */
/* playbin是一个element,它既是source,也是sink,能同时处理整个管道(pipeline)事务
gst_parse_launch建立一个管道 */
pipeline =
gst_parse_launch
("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm",
NULL);
/* Start playing */
/* 每一个element都有一个状态,这里是播放这个element的流媒体
gst_element_set_state (pipeline, GST_STATE_PLAYING);
/* Wait until error or EOS */
/* 获取通道element总线 */
bus = gst_element_get_bus (pipeline);
/* gst_bus_timed_pop_filtered会阻塞到遇到错误或者流媒体播放结束,并且得到一个消息 */
msg =
gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
/* 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);
return 0;
}
创建一个Makefile文件,内容如下(具体含义可以参考C++基础整理 中的Linux 下的 C++ 环境)
APP:= basic-tutorial-1
TARGET_DEVICE = $(shell gcc -dumpmachine | cut -f1 -d -)
NVDS_VERSION:=5.0
LIB_INSTALL_DIR?=/opt/nvidia/deepstream/deepstream-$(NVDS_VERSION)/lib/
APP_INSTALL_DIR?=/opt/nvidia/deepstream/deepstream-$(NVDS_VERSION)/bin/
ifeq ($(TARGET_DEVICE),aarch64)
CFLAGS:= -DPLATFORM_TEGRA
endif
SRCS:= $(wildcard *.c)
INCS:= $(wildcard *.h)
PKGS:= gstreamer-1.0
OBJS:= $(SRCS:.c=.o)
CFLAGS+= -I../../../includes
CFLAGS+= `pkg-config --cflags $(PKGS)`
LIBS:= `pkg-config --libs $(PKGS)`
LIBS+= -L$(LIB_INSTALL_DIR) -lnvdsgst_meta -lnvds_meta \
-Wl,-rpath,$(LIB_INSTALL_DIR)
all: $(APP)
%.o: %.c $(INCS) Makefile
$(CC) -c -o $@ $(CFLAGS) $<
$(APP): $(OBJS) Makefile
$(CC) -o $(APP) $(OBJS) $(LIBS)
install: $(APP)
cp -rv $(APP) $(APP_INSTALL_DIR)
clean:
rm -rf $(OBJS) $(APP)
执行命令
make
编译后就有了可执行程序basic-tutorial-1。