基于GStreamer编写Mp3播放器
一、简介
作者系统为CentOS6,本文在此基础上对Mp3播放器进行开发,需要使用mp3解码库libmad和gstreamer0.10-plugins-ugly,详细步骤如下。
二、操作步骤
1)下载
- wget ftp://ftp.pbone.net/mirror/atrpms.net/el5-x86_64/atrpms/stable/libmad0-0.15.1b-4.el5.x86_64.rpm
- wget ftp://ftp.pbone.net/mirror/atrpms.net/el5-x86_64/atrpms/stable/libmad-0.15.1b-4.el5.x86_64.rpm
- wget ftp://195.220.108.108/linux/centos/6.7/os/x86_64/Packages/libid3tag-0.15.1b-11.el6.x86_64.rpm
- wget ftp://ftp.pbone.net/mirror/atrpms.net/el6-x86_64/atrpms/stable/libdvdread3-0.9.7-5.el6.x86_64.rpm
- wget ftp://195.220.108.108/linux/Mandriva/official/2007.0/x86_64/media/main/release/gstreamer0.10-plugins-ugly-0.10.4-1mdv2007.0.x86_64.rpm
2)安装
- yum install gstreamer-devel
- rpm -ivh libmad0-0.15.1b-4.el5.x86_64.rpm libmad-0.15.1b-4.el5.x86_64.rpm
- rpm -ivh libid3tag-0.15.1b-11.el6.x86_64.rpm libdvdread3-0.9.7-5.el6.x86_64.rpm
- rpm -ivh gstreamer0.10-plugins-ugly-0.10.4-1mdv2007.0.x86_64.rpm
三、源码
- /**
- */
- #include <gst/gst.h>
- #include <glib.h>
- //消息处理函数
- static gboolean bus_call(GstBus * bus, GstMessage * msg, gpointer data)
- {
- GMainLoop *loop = (GMainLoop *) data;
- 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[])
- {
- 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 \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.Exiting.\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 -g -o mp3 mp3.c `pkg-config --cflags --libs gstreamer-0.10`
运行
- ./mp3 xxx.mp3
基于GStreamer编写Mp3播放器的更多相关文章
- 基于Stm32的MP3播放器设计与实现
原创博文,转载请注明出处 这是我高级电子技术试验课做的作业,拿来共享一下.项目在安福莱例程基础之上进行的功能完善,里面的部分内容可参考安福莱mp3例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...
- 【Android】利用安卓的数据接口、多媒体处理编写内存卡Mp3播放器app
通过调用安卓的MediaPlayer能够直接完毕Mp3等主流音频的播放,同一时候利用ContentResolver与Cursor能够直接读取安卓内在数据库的信息.直接获取当前sdcard中全部音频的列 ...
- 你用java的swing可以做出这么炫的mp3播放器吗?
这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 j ...
- 基于ffmpeg的C++播放器1
基于ffmpeg的C++播放器 (1) 2011年12月份的时候发了这篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最 ...
- MP3播放器团队项目
一.设计思路 程序要求能播放MP3文件,因此需调用库中的播放方法:右键工具箱选择项,添加com组件,选择window media player后工具箱就会多一个控件,然后拖到窗体中就OK了.另在窗体中 ...
- C#编写媒体播放器--Microsoft的Directx提供的DirectShow组件,该组件的程序集QuartzTypeLib.dll.
使用C#编写媒体播放器时,需要用到Microsoft的Directx提供的DirectShow组件.用该组件前需要先注册程序集QuartzTypeLib.dll. 1.用QuartzTypeLib.d ...
- 从零开始学习PYTHON3讲义(十四)写一个mp3播放器
<从零开始PYTHON3>第十四讲 通常来说,Python解释执行,运行速度慢,并不适合完整的开发游戏.随着电脑速度的快速提高,这种情况有所好转,但开发游戏仍然不是Python的重点工作. ...
- 基于jQuery虾米音乐播放器样式代码
分享一款基于jQuery虾米音乐播放器样式代码.这是一款基于jquery+html5实现的虾米音乐播放器源码下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div c ...
- 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载
I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this M ...
随机推荐
- android 关于Toast重复显示解决方法
解决思路: 不用计算Toast的时间之类的,就是定义一个全局的成员变量Toast, 这个Toast不为null的时候才去make,否则直接setText.为了按返回键后立即使Toast不再显示,重 ...
- "Cannot declare member function ...to have static linkage"错误
英文解释: if you declare a method to be static in your .cc file. The reason is that static means somethi ...
- Xcode9 修改工程名(含cocopods)
由于需要现在要更改包名,但是在网上找了N多资料都比较老,16年的资料却是残缺不全,尤其 ios10 出了 .entitlement 的机制 ,很多琐碎的小细节 很容易忘记.所以我自己总结了一篇, 环 ...
- 转载:maven依赖范围
其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath(注意是与classpath)的关系. 主要的是三种依赖关系如下:1.compile: 默认编译依赖范围.对于编译,测试,运行 ...
- Redis底层探秘(一):简单动态字符串(SDS)
redis是我们使用非常多的一种缓存技术,他的性能极高,读的速度是110000次/s,写的速度是81000次/s.这么高的性能背后,到底是怎么样的实现在支撑,这个系列的文章,我们一起去看看. redi ...
- swing之JDialog
package canying; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java ...
- python实现进程的并发
__author__ = 'luozt' import telnetlib import multiprocessing import random def telnet(ip,hostname): ...
- AMD 规范
AMD(异步模块定义)是为浏览器环境设计的,因为 CommonJS 模块系统是同步加载的,当前浏览器环境还没有准备好同步加载模块的条件. AMD 定义了一套 JavaScript 模块依赖异步加载标准 ...
- (1)java8初体验
很多博客都拿Comparator,我也贴一下吧. java8以前的匿名内部类用来排序. //匿名内部类 @Test public void java8Test() { Person p1 = new ...
- HTTP-Runoob:HTTP请求方法
ylbtech-HTTP-Runoob:HTTP请求方法 1.返回顶部 1. HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, PO ...