您的位置:首页 > 其它

Gstreamer 显示图片

2016-05-26 11:34 661 查看
首先,通过简单的gst-launch命令可以进行picturename图片的播放:

gst-launch-0.10 filesrc location=/home/user/picturename.jpg ! jpegdec ! freeze ! autovideosink

gst-launch-0.10 filesrc location=/home/user/picturename.png ! pngdec ! freeze ! autovideosink

由于gstreamer播放视频的教程很多(尤其是playbin2),但播放图片的程序demo较少,因此这里贴下显示图片的demo仅供参考(以png文件为例):

#include <gst/gst.h>
#include <glib.h>

//声明所用到的element,总线bus,主循环loop
GstElement *pipeline, *source, *decoder, *freeze, *sink;
GstBus *bus;
GMainLoop *loop;

// 消息处理函数(EOS和ERROR)
static gboolean bus_call(GstBus *bus,GstMessage *msg,gpointer data)
{
GMainLoop *loop = (GMainLoop *) data;//这个是主循环的指针,在接受EOS消息时退出循环
switch (GST_MESSAGE_TYPE(msg))
{
case GST_MESSAGE_EOS:
g_print("End of stream\n");
g_main_loop_quit(loop);
break;
case GST_MESSAGE_ERROR:
{
gchar *debug;
GError *error;
gst_message_parse_error(msg,&error,&debug);
g_free(debug);
g_printerr("ERROR:%s\n",error->message);
g_error_free(error);
g_main_loop_quit(loop);
break;
}
default:
break;
}
return TRUE;
}

int main(int argc, char *argv[]) {
// 初始化
gst_init (&argc, &argv);
// 创建主循环
loop = g_main_loop_new (NULL, FALSE);

//创建各个element,其中gst_element_factory_make第一个参数为gstreamer插件名称
pipeline = gst_pipeline_new ("png-player");
source = gst_element_factory_make ("filesrc", "file-source");
decoder = gst_element_factory_make ("pngdec", "vorbis-decoder");
freeze = gst_element_factory_make ("freeze", "image-freeze");
sink = gst_element_factory_make ("autovideosink", "image-output");
if (!pipeline || !source || !decoder || !freeze || !sink) {
g_print ("One element could not be created\n");
return -1;
}

//设置source文件路径
g_object_set (G_OBJECT (source), "location", "/home/usr/logo.png", NULL);

//获取播放管道的消息总线并设置获取消息后的回调函数
bus = gst_pipeline_get_bus (GST_PIPELINE(pipeline));
gst_bus_add_watch (bus, bus_call, NULL);

//将各element添加到管道中
gst_bin_add_many (GST_BIN (pipeline),source, decoder, freeze, sink, NULL);

//依次连接各element
gst_element_link_many (source, decoder, freeze, sink, NULL);

//开始播放,设置播放状态为GST_STATE_PLAYING
gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_print("Running\n");

//开始主循环
g_main_loop_run(loop);

//循环退出后,释放资源
gst_object_unref (bus);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
return 0;
}


gstreamer的环境搭建及文件编译请参考其他博客

最后附上gstreamer实现简单MP3播放器的小程(大神的博客)  http://www.cnblogs.com/phinecos/archive/2009/06/07/1498166.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: