在博文“Gstreamer在Ubuntu上的安装和MP3的播放”中,写了在ubuntu上从头到尾构建gstreamer的详细过程,那是我在一次小项目培训中和队友一起努力了将近一周的成果,网上参考资料倒是很多,我们的步骤也是正确的,但由于机器的配置以及下载包的版本等问题,最后成功率很低,只有10%,不过心里还是挺高兴的。

下面着些是构建gstreamer的捷径,成功率在我们做后是100%,希望能给你带来帮助。不过前面的方法还是自己能动手做一遍好,虽然时间花费多,失败率高,不过做后感觉收获还是挺多的哈,O(∩_∩)O~

一、ubuntu下安装gstreamer库

libstreamer0.10-0

libstreamer0.10-dev

libstreamer0.10-0-dbg

二、程序源码

#include <gst/gst.h>

#include <glib.h>

//定义消息处理函数

static gboolean bus_call(GstBus *bus, GstMessage *msg, gpointer data)

{

GMainLoop *loop = (GMainLoop *)data; //主循环指针,接受EOS消息时退出

gchar *debug;

GError *error;

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:

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[])

{

GMainLoop *loop;

GstElement *pipeline, *source, *decoder, *sink; //定义组件

GstBus *bus;

gst_init(&argc, &argv);

loop = g_main_loop_new(NULL, FALSE); //创建主循环,在执行g_main_loop_run后正式开始循环

if (argc != 2)

{

g_printerr("Usage: %s  mp3filename\n", argv[0]);

return -1;

}

//创建管道和组件

pipeline = gst_pipeline_new("audio-player");

source = gst_element_factory_make("filesrc", "file-source");

decoder = gst_element_factory_make("mad", "mad-decoder");

sink = gst_element_factory_make("autoaudiosink", "audio-output");

if (!pipeline || !source || !decoder || !sink)

{

g_printerr("One element could not be created.\nExiting....\n");

return -1;

}

//设置source的location参数,即文件的地址

g_object_set(G_OBJECT(source), "location", argv[1], NULL);

//得到管道的消息总线

bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));

//添加消息监视器

gst_bus_add_watch(bus, bus_call, loop);

gst_object_unref(bus);

//把组件添加到管道中,管道是一个特殊的组件,可以更好的让数据流动

gst_bin_add_many(GST_BIN(pipeline), source, decoder, sink, NULL);

//依次链接组件

gst_element_link_many(source, decoder, sink, NULL);

//开始播放

gst_element_set_state(pipeline, GST_STATE_PLAYING);

g_print("Running......\n");

//开始循环

g_main_loop_run(loop);

g_print("Returned, stopping playback\n");

gst_element_set_state(pipeline, GST_STATE_NULL);

gst_object_unref(GST_OBJECT(pipeline));

return 0;

}

三、编译运行

gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) -g -o player player.c

./player test.mp3

Running......

【miscellaneous】gstreamer构建的简单方法的更多相关文章

  1. 使用spring 4.0 + maven 构建超简单的web项目

    一.需求 使用spring去管理web项目,是目前非常流行的一种思路,本文将介绍使用maven+spring 4.0.2 来构建一个简单的web项目. 二.实现 1.新建一个maven项目,如下图所示 ...

  2. struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb

    在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...

  3. 【Android Developers Training】 3. 构建一个简单UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  4. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  5. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  6. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  7. 构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)

    构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study ...

  8. gRPC初探——概念介绍以及如何构建一个简单的gRPC服务

    目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...

  9. 构建一个简单的基于MVC模式的JavaWeb

    零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失 ...

随机推荐

  1. ajax的使用方法

    后台在写代码时 一般都会用到AJAX传值的方法 了解的AJAX方法有三种样式 第一 $.ajax( { type: "POST", url: "UserList.ashx ...

  2. Elasticsearch 调优之 shrink

    对于索引分片数量,我们一般在模板中统一定义,在数据规模比较大的集群中,索引分片数一般也大一些,在我的集群中设置为 24.但是,并不是所有的索引数据量都很大,这些小数据量的索引也同样有较大的分片数.在 ...

  3. openssl使用以及C#加密和数字签名

    如何使用openssl生成RSA公钥和私钥对 http://blog.csdn.net/scape1989/article/details/18959657 https://www.openssl ...

  4. 论自动AC机

    O(∩_∩)O哈哈~第一篇原创博客.终于结束了我“无敌转载王”的称号了!!!好开心! (⊙v⊙)嗯,看到标题觉得我是神犇的人,请再次仔细看看标题,是“自动AC”,而非“AC自动”哦!这是利用lemon ...

  5. linux系列(十三):less命令

    1.命令格式: less [参数]  文件 2.命令功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 的功能不如less,而且 less 在查看之前不会加载整个文 ...

  6. 小程序demo项目实践

    今天开始做一个简单的小程序,做的过程中势必会有一些知识经验需要记录 项目初始化 首先创建好一个小程序项目,在app.wxss里面将自带的css样式统统去除,加上自己写的初始化样式 小程序目前不支持*号 ...

  7. 前端逼死强迫症系列之javascript续集

    一.javascript函数 1.普通函数 function func(){ } 2.匿名函数 setInterval(function(){ console.log(123); },5000) 3. ...

  8. Scrapy爬虫的暂停和启动

    scrapy的每一个爬虫,暂停时可以记录暂停状态以及爬取了哪些url,重启时可以从暂停状态开始爬取过的URL不在爬取 实现暂停与重启记录状态 方法一: 1.首先cd进入到scrapy项目里(当然你也可 ...

  9. imu 返回的数据

    Cheader: seq: 423038 stamp: secs: 1562058492 nsecs: 992359716 frame_id: imuorientation: x: 0.0026971 ...

  10. maven插件上传本地jar包到maven中央仓库

    settings配置(如果设置后有问题,可以重启idea,保证重新加载settings文件): <!-- 上传jar包到maven中央仓库配置start --> <server> ...