GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo

#define DEBUG printf(“%s:%d\n”, FILE, LINE) void test001HelloWorldDemo(int *argc, char **argv[]) {

GstElement *pipeline;
GstBus *bus;
GstMessage *msg;

// 步骤一:初始化gst

gst_init(argc, argv);
// 步骤二:定义管道(指定渲染器,否则ubuntu上渲染画面会出错)

// pipeline = gst_parse_launch(“playbin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm", NULL);

pipeline = gst_parse_launch("playbin uri=https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm video-sink=\"ximagesink\"", NULL);
// 步骤三:开始播放(设置管道的运行状态:空、准备、播放、暂停)
gst_element_set_state (pipeline, GST_STATE_PLAYING);
// 步骤四:获取管道的总线
bus = gst_element_get_bus (pipeline);
// 步骤五:阻塞获取bus上指定的消息返回(未获取到则阻塞)
msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
// 步骤六:消息的处理(这里有很多消息,只是举例子一个
if(GST_MESSAGE_TYPE(msg) == GST_MESSAGE_ERROR)
{
    g_printerr ("An error occurred! Re-run with the GST_DEBUG=*:WARN "
                "environment variable set for more details.\n");
}
// 步骤七:释放资源(其中管道先设置状态空:该状态将会回收所有被该组件占用的资源,然后再释放)
gst_message_unref (msg);
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);

} “`

工程模板v1.0.0

emsp;emsp;在这里插入图片描述

入坑

入坑一:播放画面异常

问题

emsp;emsp;播放画面错位 emsp;emsp;在这里插入图片描述 emsp;emsp;测试原本文件应该是: emsp;emsp;在这里插入图片描述

尝试

emsp;emsp;命令行去检测,也是异常: emsp;emsp;在这里插入图片描述 emsp;emsp;测试windows上,是正常: emsp;emsp;在这里插入图片描述 emsp;emsp;所以是系统装的环境可能有问题。重新切换虚拟机使用ubuntu20.04重新制作虚拟机,用起来还是一样,有问题: emsp;emsp;在这里插入图片描述 emsp;emsp;用网页测试,没问题: emsp;emsp;在这里插入图片描述 emsp;emsp;用vlc测试,也没问题: emsp;emsp;在这里插入图片描述 emsp;emsp;然后测试其他地址试试,发现没问题: emsp;emsp;在这里插入图片描述

解决

后来发现是需要指定渲染器才行。