基于GStreamer的MP3播放器开发

合集下载

GStreamer插件开发指南

GStreamer插件开发指南

GStreamer插件开发指南GStreamer是一个功能强大的开放源代码多媒体框架,用于处理和播放各种类型的媒体数据。

GStreamer插件是用于扩展GStreamer功能的模块,可以添加新的元件、过滤器和其他处理模块,以满足特定的需求。

1. 了解GStreamer框架:熟悉GStreamer的核心概念、基本组件和数据流模型是开发插件的基础。

阅读GStreamer的文档和教程,获取关于GStreamer的基本知识。

2.确定插件的功能:确定你希望新插件实现的功能和目标。

这可以是一个新的音频或视频处理算法,或者一个特定格式的文件解码器。

确保你的目标明确和可行。

3. 构建插件的框架:在开始实现具体功能之前,需要创建插件的框架。

这包括定义插件的接口、实例化对象和设置参数。

使用GStreamer提供的插件模板,使插件具备GObject的特性。

4. 实现插件的功能:根据插件的目标,实现相应的功能。

这可以是一个音频或视频处理算法、一个文件解码器或一个特定格式的编码器。

根据GStreamer的架构,将功能以数据流的形式连接到其他元件。

5. 调试和测试插件:在完成插件功能的实现后,进行调试和测试工作。

使用GStreamer提供的调试工具和技术,验证插件的正确性和稳定性。

这可能涉及创建测试文件、分析数据流、查找性能问题等。

6. 文档和发布插件:为你的插件创建文档,包括插件的功能、接口和使用方法。

将插件发布到GStreamer的插件仓库或其他适当的发布平台,以供其他开发者和用户使用。

7.迭代和改进插件:随着时间的推移和用户的反馈,可能需要对插件进行迭代和改进。

收集用户反馈,修复问题和改进插件的性能和功能。

GStreamer插件的开发是一个复杂的过程,需要有一定的编程和多媒体处理经验。

通过学习和研究现有的GStreamer插件,你可以更好地理解和掌握插件开发的技巧和方法。

通过不断实践和改进,你可以开发出高质量和有用的GStreamer插件。

linux下用gtk设计的mp3

linux下用gtk设计的mp3
/* Initialise GTK+ */ gtk_init(&argc, &argv); /* Create a window */ main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Set main window title */ gtk_window_set_title(GTK_WINDOW(main_window), “Music Player”); /* Connect the main window’s destroy handler */ g_signal_connect(G_OBJECT(main_window), “destroy”, G_CALLBACK(destroy), NULL); /* Make everything visible */ gtk_widget_show_all(GTK_WIDGET(main_window)); /* Start the main loop */ gtk_main(); return 0; }
所有的类都有这样的转换宏,它们在所有的 GTK+代码中被广泛地使用。
g_signal_connect()设置一个信号处理函数。GTK+工具包的设计中的一个基本概念就是 信号和回调函数——回调函数是当其所连接的信号被发出时要调用的函数。信号是针对诸如 按钮被点击、鼠标移动、键盘焦点发生变化以及其他许多事件发送的。在这里,我们所讨论 的信号是 GtkWindow 的“destroy”信号,当 X 发现窗口将被关闭时(例如,当用户按下标
GtkMisc 是 GtkLabel 的父类之一,它包含的机制使你可以控制 GtkLabel 中的文本的对 齐。对齐参数的取值范围从0 到1,本例的情况是水平左对齐(0.0)和垂直居中对齐(0.5)。 默认情况是水平和垂直都居中对齐(0.5,0.5),但这样做在本例的窗口布局中并不好看。

gst-play 用法 -回复

gst-play 用法 -回复

gst-play 用法-回复GSTPlay是一个基于GStreamer的开源多媒体播放器,它提供了一种简单而强大的方式来播放各种媒体文件。

在这篇文章中,我们将一步一步地回答有关GSTPlay用法的问题,并介绍如何使用它来播放媒体文件。

第一步:安装GStreamer和GSTPlay首先,我们需要安装GStreamer和GSTPlay。

GStreamer是一个功能强大且灵活的多媒体框架,它提供了可以在不同平台上进行音频和视频处理的库和插件。

GSTPlay是GStreamer中的一个组件,它是一个基于命令行的播放器,可以使用简单的命令来控制播放和暂停。

在大多数Linux发行版中,你可以通过包管理器来安装GStreamer。

例如,对于Ubuntu用户,可以使用以下命令来安装GStreamer:bashsudo apt-get install gstreamer1.0-tools在GStreamer安装完成后,你还需要安装GSTPlay。

GSTPlay是GStreamer的一个插件,提供了一个名为`gstplay`的命令行工具。

你可以通过以下命令来安装GSTPlay:bashsudo apt-get install gst-plugins-base1.0-tools第二步:播放媒体文件一旦你已经安装了GStreamer和GSTPlay,就可以开始使用GSTPlay来播放媒体文件了。

GSTPlay支持多种媒体文件格式,包括音频和视频。

要播放一个媒体文件,可以使用以下命令:bashgst-play-1.0 [媒体文件路径]例如,要播放名为`example.mp4`的视频文件,可以运行以下命令:bashgst-play-1.0 example.mp4GSTPlay将打开一个新的窗口,并开始播放你指定的媒体文件。

你可以使用键盘上的一些按键来控制播放,例如空格键可以暂停/播放媒体文件,左箭头键可以后退5秒,右箭头键可以快进5秒。

《Linux C从入门到精通》.明日科技.第20章.MP3 音乐播放器

《Linux C从入门到精通》.明日科技.第20章.MP3 音乐播放器

GStreamer简介
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); //每隔1000毫秒,更新一次滚动条的位置 g_timeout_add (1000, (GSourceFunc) cb_set_position, NULL); //开始循环 g_main_loop_run(loop); gst_element_set_state(pipeline,GST_STATE_NULL); gst_object_unref(GST_OBJECT(pipeline)); 为了简化我们必须编写的代码,我们将利用由GStreamer 0.10提供的一个被称为playbin的便利元素。这是一个高级元素,它实际上是一个 预建立的管道。通过使用GStreamer的文件类型检测功能,它可以从任何指定的URI读取数据,并确定合适的解码器和输出接收器来正确地 播放它。在本例中,这意味着它可以识别和正确地解码在GStreamer中有相应插件的任何音频文件 (你可以通过在终端上运行命令gstinspect-0.10来列出 GStreamer0.10中的所有插件)。 //建立playbin对象 GstElement *play=gst_element_factory_make(“playbin”, “play”); //设置打开文件 g_object_set(G_OBJECT(play), “uri”,uri,NULL); //增加回调函数 gst_bus_add_watch(gst_pipeline_get_bus(GST_PIPELINE(play)),bus_callback,NULL); //设置播放、暂停和停止状态。 gst_element_set_state(play, GST_STATE_PLAYING); gst_element_set_state(play, GST_STATE_PAUSED); gst_element_set_state(play, GST_STATE_NULL); 这样就可以控件Mp3文件的播放了。

基于GStreamer的音视频播放器的设计

基于GStreamer的音视频播放器的设计

GStreamer 框架在设计时采用了非常灵活的体系结 元件都有一个特殊的函数接口,有些接口可以用来读
构,并提供了各种各样的预定义媒体处理模块,简 取文件、解码文件 ;有些接口则只是输出相应的数
化了在 Linux 下开发多媒体应用的过程。
据到具体的设备上 , 例如 :声卡设备。GStreamer 默
Audio and video player based on GStreamer
ZUO Dengchao1, ZUO Dengfeng2, LIU Yongkang1
( 1. CRRC Qing Dao Sifang Rolling Stock Research Institute, Qingdao 266031, China; 2. Department of Technology Information, Head Office of Bank of Inner Mongolia, Hohhot 010010, China ) Abstract: At present, Windows system was used to design the player for most of the railway passenger cars. But the Windows system is vulnerable to viruses and can easily cause a crash when a passenger car is often powered off and reset. In order to solve these problems, this article proposed the construction of the player using GStreamer framework based on the Linux system, gave the system running effect diagram. The verification results showed that the audio and video player got clear and stable playback effect with short development cycle and strong practicability under the GStreamer framework. Keywords: Linux; GStreamer; QT; audio and video player

GStreamer中文开发手册

GStreamer中文开发手册

I. 介绍GStreamer 是一个非常强大而且通用的流媒体应用程序框架。

GStreamer所具备的很多优点来源于其框架的模块化: GStreamer能够无缝的合并新的插件。

但是, 由于追求模块化和高效率, 使得GStreamer在整个框架上变的复杂, 也同时因为复杂度的提高, 使得开发一个新的应用程序显得不是那么的简单。

这个指南试图帮助你了解GStreamer的框架(version 0.10.3.1)以方便你在GStreamer框架的基础上做开发。

第一章节将重点关注如何开发一个简单的音频播放器, 通过对整个过程的讲解,力图使你能够理解有关GStreamer的一些概念。

在之后的章节中,我们将讨论一些关于媒体播放(playback)控制的高级问题, 这些问题包括了录音、录象和编辑等等。

目录1. 序言1.1. GStreamer是什么?1.2. 谁需要读这个手册?1.3. 预备知识1.4. 本手册结构2. 动机与目标2.1. 当前问题2.1.1. 大量的代码复制2.1.2. ―一个目标‖媒体播放器/媒体库2.1.3. 没有统一的插件管理机制2.1.4. 拙劣的用户感2.1.5. 网络透明度的规定2.1.6. 与Windows™的产品还存在差距2.2. 设计目标2.2.1. 结构清晰且威力强大2.2.2. 面向对象的编程思想2.2.3. 灵活的可扩展性能2.2.4. 支持插件以二进制形式发布2.2.5. 高性能2.2.6. 核心库与插件(core/plugins)分离2.2.7. 为多媒体数字信号编解码实验提供一个框架3. 基础概念介绍3.1. 元件(Elements)3.2. 箱柜(Bins)和管道(pipelines)3.3. 衬垫(Pads)第1章. 序言本章将从技术的角度来描述本手册的总体结构。

1.1. GStreamer是什么?GStreamer是一个创建流媒体应用程序的框架。

其基本设计思想来自于俄勒冈(Oregon)研究生学院有关视频管道的创意, 同时也借鉴了DirectShow的设计思想。

GStreamer编写一个简单的MP3播放器

GStreamer编写一个简单的MP3播放器

本文介绍如何使用GStreamer编写一个简单的MP3播放器。

1,需要使用mad解码插件,因此需要先安装gstreamer0.10-plugins-ugly2,编写mp3播放器下面来看看如何利用GStreamer框架提供的组件,来实现一个简单的MP3播放器。

数据源元件负责从磁盘上读取数据,过滤器元件负责对数据进行解码,而接受器元件则负责将解码后的数据写入声卡。

如果想要在程序中应用GStreamer提供的各种功能,首先必须在主函数中调用gst_init ()来完成相应的初始化工作,以便将用户从命令行输入的参数传递给GStreamer函数库。

一个典型的GStreamer应用程序的初始化如下所示:#include<gst/gst.h>int main(int argc,char*argv[]){gst_init(&argc,&argv);/**/}接下去需要创建三个元件并连接成管道,由于所有GStreamer元件都具有相同的基类GstElement,因此能够采用如下方式进行定义:GstElement*pipeline,*filesrc,*decoder,*audiosink;管道在GStreamer框架中是用来容纳和管理元件的,下面的代码将创建一条名为pipeline的新管道:/*创建用来容纳元件的新管道*/pipeline=gst_pipeline_new("pipeline");数据源元件负责从磁盘文件中读取数据,它具有名为location的属性,用来指明文件在磁盘上的位置。

使用标准的GObject属性机制可以为元件设置相应的属性:/*创建数据源元件*/filesrc=gst_element_factory_make("filesrc","disk_source");g_object_set(G_OBJECT(filesrc),"location",argv[1],NULL);过滤器元件负责完成对MP3格式的数据进行解码,最简单的办法是安装mad这一插件,借助它来完成相应的解码工作:/*创建过滤器元件*/decoder=gst_element_factory_make("mad","decoder");接收器元件负责将解码后的数据利用声卡播放出来:/*创建接收器元件*/audiosink=gst_element_factory_make("audiosink","play_audio")已经创建好的三个元件需要全部添加到管道中,并按顺序连接起来:/*添加元件到管道中*/gst_bin_add_many(GST_BIN(pipeline),filesrc,decoder,audiosink,NULL);/*通过衬垫连接元件*/gst_element_link_many(filesrc,decoder,audiosink,NULL);所有准备工作都做好之后,就可以通过将管道的状态切换到PLAYING状态,来启动整个管道的数据处理流程:/*启动管道*/gst_element_set_state(pipeline,GST_STATE_PLAYING);这里加入一个消息处理函数bus_call来监视产生的消息/*终止管道*/gst_element_set_state(pipeline,GST_STATE_NULL);/*释放资源*/gst_object_unref(GST_OBJECT(pipeline));3,完整的源代码如下所示:#include<gst/gst.h>#include<glib.h>//定义消息处理函数,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[]){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.Exiting.\n");return-1;}//设置source的location参数。

基于GStreamer的MP3播放器开发

基于GStreamer的MP3播放器开发

电脑编程技巧与维护1GStreamerGStreamer 是一个功能大的开源的多媒体框架,它对底层的多媒体编解码器和硬件设备驱动进行了抽象和封装,提供了简单灵活的API ,降低了上层应用程序开发的难度,并且使得应用程序更易于维护。

GStreamer 框架的功能涵盖了音频的输入输出以及视频的输入输出,因此基于GStreamer 可以开发各种各样的多媒体应用程序,包括音乐、视频播放器、录音机程序,以及移动设备中的照相机软件等。

GStreamer 的一大显著特点就是其基于插件的模块化设计,如图1所示。

GStreamer 的系统架构可以分为两部分:核心模块core 和插件部分。

GStreamer 把多媒体数据的输入、编解码处理以及输出都以插件模块集成到系统中。

插件以共享库的形式存在,在运行期间由GStreamer 动态加载,并被链接成一个管道。

Core 模块则为插件提供了一个集成框架,插件模块之间数据流的处理以及媒体类型的协商。

2编程基础2.1组件组件是GStreamer 中的一个重要对象,是GStreamer 插件在运行时的实例化。

应用程序运行时,GStreamer 会根据媒体格式以及设备环境动态加载相应的插件,被实例化的组件对象就会有序地链接到一个管道pipeline 中。

根据插件功能的类型,其组件可以分为:(1)输入型组件source element ,这种组件会向管道提供媒体数据,比如文件访问组件、声音获取组件等;(2)过滤型组件filter element ,它把从输入型组件中获取的媒体数据进行处理,比如进行格式转换、解复用de -muxer 、复用muxer 、编解码codec 等;(3)输出型组件sink element ,这类组件负责媒体数据的最后的输出,比如输出到音频设备、视频设备,以及输出到文件、网络等。

组件在运行期有4种状态,并且只能在相邻的两个状态之间发生转换:(1)缺省状态GST_STATE_NULL ,所有的运行期的资源包括共享库以及内存等都没有分配;(2)准备状态GST_STATE_READY ,此时运行期的资源已经被分配,但是还没有媒体数据;(3)暂停GST_STATE_PAUSED ,组件准备接收或者处理数据,Sink 组件此时接收到一个Buffer 的数据后便阻塞,等待下一个状态;(4)播放状态GST_STATE_PLAYING ,和暂停状态类似,不同的是Sink 组件此时真正开始输出接收到的媒体数据[1]。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电脑编程技巧与维护1GStreamerGStreamer 是一个功能大的开源的多媒体框架,它对底层的多媒体编解码器和硬件设备驱动进行了抽象和封装,提供了简单灵活的API ,降低了上层应用程序开发的难度,并且使得应用程序更易于维护。

GStreamer 框架的功能涵盖了音频的输入输出以及视频的输入输出,因此基于GStreamer 可以开发各种各样的多媒体应用程序,包括音乐、视频播放器、录音机程序,以及移动设备中的照相机软件等。

GStreamer 的一大显著特点就是其基于插件的模块化设计,如图1所示。

GStreamer 的系统架构可以分为两部分:核心模块core 和插件部分。

GStreamer 把多媒体数据的输入、编解码处理以及输出都以插件模块集成到系统中。

插件以共享库的形式存在,在运行期间由GStreamer 动态加载,并被链接成一个管道。

Core 模块则为插件提供了一个集成框架,插件模块之间数据流的处理以及媒体类型的协商。

2编程基础2.1组件组件是GStreamer 中的一个重要对象,是GStreamer 插件在运行时的实例化。

应用程序运行时,GStreamer 会根据媒体格式以及设备环境动态加载相应的插件,被实例化的组件对象就会有序地链接到一个管道pipeline 中。

根据插件功能的类型,其组件可以分为:(1)输入型组件source element ,这种组件会向管道提供媒体数据,比如文件访问组件、声音获取组件等;(2)过滤型组件filter element ,它把从输入型组件中获取的媒体数据进行处理,比如进行格式转换、解复用de -muxer 、复用muxer 、编解码codec 等;(3)输出型组件sink element ,这类组件负责媒体数据的最后的输出,比如输出到音频设备、视频设备,以及输出到文件、网络等。

组件在运行期有4种状态,并且只能在相邻的两个状态之间发生转换:(1)缺省状态GST_STATE_NULL ,所有的运行期的资源包括共享库以及内存等都没有分配;(2)准备状态GST_STATE_READY ,此时运行期的资源已经被分配,但是还没有媒体数据;(3)暂停GST_STATE_PAUSED ,组件准备接收或者处理数据,Sink 组件此时接收到一个Buffer 的数据后便阻塞,等待下一个状态;(4)播放状态GST_STATE_PLAYING ,和暂停状态类似,不同的是Sink 组件此时真正开始输出接收到的媒体数据[1]。

2.2管道箱柜Bin 是一个容器组件,用来组合其他的组件。

管道是一种特殊的箱柜,它能够调度其容器中的所有组件。

因为箱柜本身也是一个组件对象,因此可以组件的编程接口API 同样适用于箱柜对象。

比如,可以通过改变一个箱柜的状态,来改变其容器中的所有组件的状态。

箱柜对象也会向应用程序转发来自其容器中组件的总线消息,比如出错消息、tag 标记消息、结束消息。

管道是最顶层的箱柜对象。

当把管道的状态设成暂停或者播放状态时,媒体数据便开始在管道的组件中流动,并且相应的组件开始处理数据。

此时,GStreamer 便会为该管道开启一基于GStreamer 的MP3播放器开发陈玲(南京晓庄学院,南京211171)摘要:GStreamer 是Linux 系统中广泛运用的基于管道设计的开源多媒体框架。

概述了GStreamer 的架构以及其基本的编程概念,讨论了基于GStreamer 框架开发MP3播放器的设计与实现方法。

关键词:GStreamer ;多媒体框架;MP3播放器;插件The Development of MP3Player Based on GStreamerCHEN Ling(Nanjing Xiaozhuang University ,Nanjing 211171)Abstract:GStreamer is widely used Linux system design based on open source multimedia framework pipeline.This papersummarizes the overview of GStreamer architecture and its basic concept,and then discusses the method of design and im -plementation of a MP3Player based on GStreamer framework.Key words:GStreamer ;Multimedia Framework ;MP3Player ;Plug-in收稿日期:2010-05-11媒体播放器录音机应用照相机应用应用程序GStreamer 核心框架类型识别插件机制格式协商消息总线GStreamer 框架数据输入插件数据处理插件数据输出插件音频驱动ALSAGStreamer 插件库视频驱动V4L2LCD 驱动设备驱动图1GStreamer 的系统框架110--人工智能及识别技术ARTIFICIAL INTELLIGENCE AND IDENTIFICATION TECHNIQUES 个新的工作线程。

每个应用程序至少要含有一个管道对象。

3MP3播放器的设计3.1播放管道播放器管道的外部输入是MP3文件,与文件源插件Gst -FileSrc 交互;管道的外部输出是扬声器,与音频输出插件GstAlsaSink 交互;其余的插件包括解码、格式转换等都是过滤插件,负责数据处理。

播放管道的内部插件链接如图2所示。

(1)GstFileSrc 文件源插件,负责从MP3文件中读取字节流。

GstFileSrc 组件采用的操作方式是Pull 模式,当管道Pipeline 处于工作播放状态时,由下一个MP3解码组件向Gst -FileSrc 组件请求数据,GstFileSrc 组件根据指定的偏移量Off -set 和长度Length 从MP3文件读取数据填充到GstBuffer 结构体中,作为解码组件的输入数据。

(2)GstMad 解码插件,使用开源的MP3解码库MAD (Mpeg Audio Decoder )来解码音频流。

(3)GstAudioConvert 音频格式转换插件,对解码后的音频流进行格式转换,支持整形到浮点的转换、位深度转换,以及音频通道数的转换。

(4)GstAudioResample 音频重采样插件,通过和音频输出插件进行格式协商,对解码后的原始音频流进行重采样,生成输出设备所支持的采样频率。

(5)GstAlsaSink 音频输出插件,把原始的音频样本通过ALSA 驱动输出到音频设备。

ALSA (Advanced Linux Sound Ar -chitecture)是目前Linux 系统中开源的音频设备驱动,负责音频流的输入输出。

GstAlsaSink 插件把重采样后的音频流通过ALSA 驱动最终输出到扬声器[2]。

3.2MP3元数据提取MP3歌曲的元数据分为歌曲基本信息和多媒体信息两类。

基本信息包括歌曲名称Title 、歌曲专辑名称Album 、歌曲的艺术家Artist 、专辑的流派Genre 等。

多媒体信息包含歌曲的播放时间Duration 、采样频率samplerate 、帧速率bitrate 等。

这些元数据都以ID3规范所定义的格式存储去MP3文件中,MP3播放器需要把这些信息提取出来,显示给用户[3]。

GStreamer 的消息总线可以实现这一功能。

每个管道对象都含有一个默认的消息总线Bus ,总线负责将播放线程中管道对象的消息转发给应用程序主线程,这样多媒体应用程序就可以忽略GStreamer 的多线程设计。

消息总线上能够转发的消息类型是可以扩展的,GStreamer 预定义了一些消息类型,包括出错消息、媒体流的结束消息、元数据消息、组件的状态转换消息等。

每当管道中的媒体流中出现一个元数据项时,管道对象就会发送元数据消息GST_MESSAGE_TAG ,表明发现了一个元数据项。

随着文件源组件GstFileSrc 不断读取MP3数据,管道会不断地向总线对象转发该消息,应用程序根据GStreamer 提供的API 来解析这些数据项。

3.3播放列表管理播放列表是MP3播放器的基本特征之一。

播放列表的管理方式有多种,可以用数据库来存储列表以及列表所包含的歌曲,也可以用文件的方式来存储它。

使用M3U 文件来管理播放列表是目前比较高效简洁的一种方式。

M3U 文件是一种文本文件,它本身不存储歌曲,只是提供了一个指向其他位置的音频文件索引[4]。

M3U 最初应用于Winmap 播放器中,大多数播放器都支持这种播放列表格式。

因此,基于M3U 文件来管理播放列表,不仅存取效率高,可移植性也强,可以在不同的播放器之间导入导出。

4MP3播放器的实现4.1构建播放器的管道/*创建播放器的管道对象*/mp3_player->pipeline =gst_pipeline_new ("pipeline");g_assert (mp3_player->pipeline);/*创建文件源组件*/filesrc =gst_element_factory_make ("filesrc","disk_source");g_assert (filesrc);/*创建mad 解码组件*/decoder =gst_element_factory_make ("mad","de -code");retv (decoder ==NULL,-1);/*创建音频格式转换组件*/conv =gst_element_factory_make ("audioconvert","audioconvert");retv (conv ==NULL,-1);/*创建音频重采样组件*/resample =gst_element_factory_make ("audioresam -ple","audioresample");retv (resample ==NULL,-1);/*创建音频输出组件*/audiosink =gst_element_factory_make ("alsasink","play_audio");g_assert (audiosink);/*把组件添加到管道中*/gst_bin_add_many (GST_BIN (mp3_player->pipeline),filesrc,decoder,conv,resample,audiosink,NULL);/*链接管道中组件*/gst_element_link_many (filesrc,decoder,conv,resample,audiosink,NULL);4.2消息监听及处理/*在主线程中监听播放线程的消息总线*/bus =gst_pipeline_get_bus (GST_PIPELINE (mp3_player->pipeline));gst_bus_add_signal_watch (bus);/*注册音频流结束消息的回调函数*/g_signal_connect_object (bus,"message::eos",G_CALLBACK (_player_message_eos_cb),mp3_play -er,0);/*注册元数据消息的回调函数*/g_signal_connect_object (bus,"message::tag",图2MP3播放器管道图MP3文件GstFileSrcGstMadGstAudioCon-vert 扬声器ALSA 驱动GstAlsaSinkGstAudioRe -sample111--电脑编程技巧与维护画预设面板,里面有一些模板可以直接使用,以及刚刚创建的动画效果huandong1,如图5所示。

相关文档
最新文档