毕设报告-基于Linux的mp3播放器设计与实现_第1页
毕设报告-基于Linux的mp3播放器设计与实现_第2页
毕设报告-基于Linux的mp3播放器设计与实现_第3页
毕设报告-基于Linux的mp3播放器设计与实现_第4页
毕设报告-基于Linux的mp3播放器设计与实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南昌航空大学东软班 综合报告1基于 Linux 的 mp3 播放器设计与实现摘要本文主要分析总结了有关 Linux 下 mp3 播放器的设计与实现,Linux 作为自由开源的软件领域中最出色的例子,由于 Linux 具有可移植度高、自由、免费等特性,最近几年,它在移动设备和个人电脑领域的应用也越来越广泛。鉴于各类应用领域对用户界面友好性方面的要求,几乎所有的此类应用都是采用图形用户界面。基于 GTK 的 GNOME,是 Linux 领域中最主要的桌面环境。而 GTK 本身,则是创造图形用户界面的最流行的跨平台 GUI 工具箱之一,因此在本次项目中,围绕如何在 Linux 系统中进行音乐播放的问题,提出了一种采用 GTK 与 GStreamer 两种技术来实现一个简单的 mp3 播放器。关键词: Linux GTK GStreamer mp3 播放器ABSTRACTThis paper mainly analyzes the Linux design and implementation of a mp3 player, Linux as the best free open source software in the field of example, because Linux has portability and high degree of freedom, free of charge, and other characteristics, in recent years, its application in the field of mobile devices and personal computer is more and more widely. In view of the request of the user interface friendly of all kinds of application areas, this kind of almost all the applications are based on graphical user interface. GTK based GNOME, is the most important in the field of Linux desktop environment. While the GTK itself, is one of the most popular cross platform GUI toolkit for creating graphical user interfaces, so in this project, how to play music in the Linux system, to achieve a GTK and GStreamer two technology to achieve a simple mp3 player.Key words: Linux GTK GStreamer mp3 player南昌航空大学东软班 综合报告21.研究的背景与意义随着时代的进步,科技的发展, Linux 以其开源的环境和稳定的性能,在 IT 行业中运用越来越广泛,市场上占据的地位也是举足轻重的,以前 Linux 系统主要是运用在服务器上面,但是随着人们对 Linux 操作系统的肯定,它也正在融入到我们大众的生活当中。因此熟练地掌握 Linux 的相关操作,Linux 下的程序开发,是一名当代大学生的必备技能之一。目前,我国在计算机应用、计算机软件电子类相关专业的人才培养方面,取得了长足的发展,但同时也让我们深刻地感觉到缺乏实际开发设计项目的经验,不善于综合运用所学理论,对知识的把握缺乏,融会贯通能力有限等问题。所以,本项目将通过一个对 GTK 、GStreamer 技术的简单应用实现 mp3 播放功能,通过在实践当中进行摸索和验证,利用我们平时学过的 Linux 相关方面的知识来指导我们整个开发过程,通过实践来检验真理,通过理论来指导实践,从而更深刻的认识 Linux 环境下的图形界面编程技术,提高了我们解决实际问题的能力。2.研究现状随着现代科技的迅猛发展,先进的科学技术尤其是网络与计算机技术在人类的工作和生活中发挥着极其重要的作用,无论是在工作还是生活中,我们无时无刻不和软件、网络打交道,而作为一种供人们娱乐消遣的 mp3 软件更是成为人们日常生活中不可或缺的一部分。作为发达国家,Linux 系统的使用和普及要更好一些,相对来讲基于 Linux 下的 mp3播放器起步较早,到现在已经卓有成效,而像我们这种发展中国家,由于技术落后和起步较晚等问题,对 Linux 下的软件开发还不是很熟练,不过随着人们对 Linux 系统的认识和接受,其一定会迅速的发展壮大起来。3.开发环境的建立与使用在 Linux 系统 Ubuntu904 版本的平台下,使用 C 语言在 vi 编辑器里面编写代码,通过GTK 设计图形界面,GStreamer 创建流媒体的框架,利用 Makefile 文件定义编译链接的规则,使用 make 工具简化编译链接工作。3.1 环境配置与检测主机环境:VMware Workstation+Ubuntu9043.2 vi 编辑器南昌航空大学东软班 综合报告3vi 编辑器是所有 Unix 及 Linux 系统下标准的编辑器,他的强大不逊色与任何最新的文本编辑器,工作在字符模式下。由于不需要图形界面,使它成了效率很高的文本编辑器。它没有菜单,只有命令,且命令繁多。vi 有 3 中基本工作模式:命令行模式、文本输入模式、末行模式。3.3 GTK+Linux 下两个开发图形用户界面程序的主要框架是 GNOME 和 KDE。这两个项目分别是基于 GTK 和 Qt Widget toolkits。GTK 和 Qt Widget toolkits 也可以单独使用(本文就是单独使用 GTK,而不依赖于 GNOME 环境)。这两个框架都支持多种开发语言 【1】 。GTK+(本文中使用其另一个简要名称 GTK)最初是 GIMP 的专用开发库,后来发展为类Unix 系统下开发图形界面的应用主流开发工具之一。GTK 是自由软件,并且是 GNU 计划的一部分,GTK 的许可协议是 LGPL【2】 。GTK 实质上是一个面向对象的应用程序接口(API)。尽管完全用 C 写成,但是他是基于类的回调函数(指向函数的指针)的思想实现的。还有一个名为 Glib 的第三个组件,包含一些标准函数的代替函数,以及链表等数据结构的函数等。这些替代函数被用来增强 GTK 的可移植性。3.4 GStreamerGStreamer 是一个创建流媒体应用程序的框架。其基本设计思想来自于俄勒冈研究生学院有关视频管道的创意,同时也借鉴了 DirectShow 的设计思想。GStreamer 是 GNOME 桌面环境下用来构建流媒体应用的多媒体框架(framework) ,其主要目的是要简化音/视频应用程序的开发,目前已经能够被用来处理mp3、Ogg、MPEG2、AVI、Quicktime 等多种格式的多媒体数据 【3】 。 GStreamer 的程序开发框架式使得编写任意类型的流媒体应用程序成为了可能。在编写处理音频、视频或者两者皆有的应用程序时,GStreamer 可以简化编程者的工作。GStreamer 并不受限于音频和视频的处理,它能够处理任意类型的数据流,管道设计的方法对于实际应用的滤波器几乎没有负荷,它甚至可以用来设计对延时有很高要求的高端音频应用程序 【4】 。GStreamer 框架是基于插件的,有的插件中提供了各种各样的多媒体数字信号编解码器,也提供了其他的功能,所有的插件都能够被链接到任意的已经定义的数据管道中。GStreamer 管道能够被 GUI 编辑器编辑,能够以 XML 文件来保存。这样的设计使得管道程序库的小号变得非常少 【5】 。南昌航空大学东软班 综合报告43.5 Makefile 文件对于大的工程或者项目中有很多的源程序文件,这种情况下通过语言编译器进行编译链接是件很复杂的事情,而且一旦有一个文件被改动过,那么和他有关的所有文件都将被重新的编译,在这种情况下,需要使用 make 工具,而使用 make 工具首先需要编写Makefile 文件,以确定编译的规则。make 的主要工作就是读进一个文本文件 Makefile。在这个文件里主要是有关那些文件(“target”目的文件)是从哪些别的文件(“dependencies”依靠文件)中产生的,用什么命令在进行这个产生过程 【6】 。有了这个 make 工具和 Makefile 文件,我们就能够很方便的编译连接文件同时也可以及时地更新。3.6 回调函数 回调函数是一种非显示调用的函数,它是一种将自己的地址(函数指针)传给别的函数来间接调用自己的编程方式。在使用回调函数时必须首先定义函数指针,然后才能使用函数指针实现回调 【5】 。该项目采用 C 语言在 vi 编辑器编写代码,通过使用回调函数来实现 GTK 和 GStreamer信号注册功能,在本项目中主要使用了按钮(播放、暂停、停止、上一曲、下一曲、MV)的单击事件,树状列表的点击事件,时间的更新事件以及进度条的改变事件来实现一个基本的 mp3 播放器功能。3.7 GCCGCC(GNU Compiler Collection,GNU 编译器集合),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 许可证所发行的自由软件,也是 GNU 计划的关键部分。GCC 原本作为 GNU 操作系统的官方编译器,现已被大多数类 Unix 操作系统(如 Linux、BSD、Mac OS X 等)采纳为标准的编译器,GCC 同样适用于微软的 Windows7。GCC 是自由软件过程发展中的著名例子,由自由软件基金会以 GPL 协议发布。3.8 GDBGDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。一般来说 GDB 主要调试的是 C/C+的程序,我们能通过它进行一系列调试工作,包括设置断点、观察变量、单步调试等功能。要调试 C/C+的程序,首先在编译时,我们必须要把调试信息加到可执行文件中,使用编译器(cc/gcc/g+)的 -g 参数可以做到这一点。4.功能的实现南昌航空大学东软班 综合报告54.1 实现框架项目的实现框架如下图所示:图 1 框架图该 mp3 播放器主要使用 GTK 设计图形界面,主要通过回调函数实现 mp3 播放器的基本操作,主要回调函数如下:play_clicked():当播放按钮被按下的时候,调用该回调函数实现音乐的播放功能;pause_clicked():当暂停按钮被按下的时候,调用该回调函数根据按钮当时的状态来实现音乐的暂停和停止;stop_clicked():当停止按钮按下的时候,调用该回调函数来停止音乐的播放;seek_value_changed():当手动移动滑块的时候,调用该回调函数来更新播放位置、时间和歌词等;update_time_callback():每当 0.2s 调用一次该回调函数更新时间的显示;play_next_song():当下一曲按钮被按下的时候,调用该回调函数来实现下一曲音乐的播放;play_previous_song():当上一曲按钮被按下的时候,调用该回调函数来实现上一曲音乐的播放;jiexi():当选中一首音乐的时候,通过该函数提取歌曲名并匹配到相应的歌词文件,将歌词解析到一个歌词链表当中;该项目的重点是实现 mp3 文件的播放,通过使用 GStreamer 流媒体框架,来实现音乐线程的创建、控制和销毁。通过控件的回调函数中调用 GStreame 的 API 函数来实现对GStreamer 音视频的控制,关系如下图所示:南昌航空大学东软班 综合报告6图 2 GStreamer 控制关系图在音乐播放中通过在播放、暂停、停止按钮回调函数中调用 gst_element_set_state()来设置 pipeline 的状态,GStreamer 中有以下四种状态:GST_STATE_NULL:默认状态,该状态将会回收所有被元件占用的资源;GST_STATE_READY:准备状态,该元件将会得到所需的全局资源;GST_STATE_PAUSED:暂停状态,元件已经对流开始了处理,但此刻暂停了处理,这种情况下时钟是禁止运行的;GST_STATE_PLAYING:播放状态,在这种状态下,管道会自动处理数据。进度条在这里主要是用来显示和调整数据流位置的,主要通过两个库函数gst_element_query_position()和 gst_element_query_duration()来确定数据流的位置,当移动滑块的时候,最后通过调用回调函数 gst_element_seek()就可以调整数据流的位置。4.2 环境搭建与检测4.2.1 安装步骤在 Linux 环境下安装软件的步骤如下:a) 下载安装包,例如:test.tar.gzb) 将安装包拷贝到/tmp 路径下解压,在 shell 下输入 tar xvzf test.tar.gz(如果是 bz2 类型的话,则输入 tar jxvf test.tar.bz2)c) 进入解压的目录,在 shell 下输入./configured) 步骤 3 完成后,在 shell 下输入 make南昌航空大学东软班 综合报告7e) 步骤 4 完成后,在 shell 下输入 make install 即可完成安装4.2.2 基本编译环境的搭建和检测刚装好的系统中已经有 GCC 了,但是这个 GCC 几乎什么文件都不能编译,因为它缺少一些必须的头文件。这里可以选择安装 build-essential 这个软件包来解决这个问题,安装完成后写一个 C 程序来测试一下,编译时按照:gcc o test test.c 来进行编译,编译通过之后证明环境安装正确。4.2.3 安装和检测 GTK 编译环境要安装 GTK 环境,只需要安装一个 libgtk2.0-dev 软件包就可以了,安装完成后也同样做个测试程序,编译时按照:gcc o test test.c pkg-config -cflags -libs gtk+-2.0来进行编译,编译通过之后证明环境安装正确。4.2.4 安装和检测 GStreamer 编译环境下载一个 GStreamer 安装包,安装完成后写一个测试程序,编译时按照:gcc o test test.c pkg-config -cflags -libs gstreamer-0.10来进行编译,编译通过之后证明环境安装正确。4.3 设计与实现4.3.1 界面设计界面的实际效果如下图所示:图 3 界面实际效果图南昌航空大学东软班 综合报告8界面的设计构思如下图所示:图 4 界面设计图本次项目主要采用了 GTK 来实现图形界面,相对于 Glade 界面设计大师这些工具来讲,在编码方面,通过 Glade 界面设计大师来做界面的设计会更加的简单,编码时间也会大大的缩短,界面效果相对来讲也是更加漂亮一些,但是其最大的缺陷就是不能动态的改变界面,比如对于播放列表的一些修改操作,Glade 界面设计大师就很难做到因此选用了 GTK。同时,设计结构上面采用盒状的布局,与其他的布局相比,更加的简单、灵活,省去了盒装布局坐标的计算,方便项目的二次开发4.3.2 线程设计该项目中存在一个大的进程,就是主函数循环等待用户触发消息,当用户选中了一首音乐进行播放的时候,播放音乐的线程就会通过 GStreamer 自动创建,通过该线程我们就可以实现音乐的播放、暂停、停止等任务,该线程的状态图如下图所示:p l a y i n gp a u s e ds t o pg s t _ e l e m e n t _ s e t _ s t a t e ( p i p e l i n e, G S T _ S T A T E _ P A U S E D )g s t _ e l e m e n t _ s e t _ s t a t e ( p i p e l i n e, G S T _ S T A T E _ P L A Y I N G )创 建 管 道 并 设 置 状 态g s t _ e l e m e n t _ s e t _ s t a t e ( p i p e l i n e, G S T _ S T A T E _ P L A Y I N G )g s t _ e l e m e n t _ s e t _ s t a t e ( p i p e l i n e, G S T _ S T A T E _ N U L L )g s t _ e l e m e n t _ s e t _ s t a t e ( p i p e l i n e, G S T _ S T A T E _ N U L L )销 毁 管 道g s t _ o b j e c t _ u n r e f ( G S T _ O B J E C T ( p i pe l i n e ) )图 5 状态图南昌航空大学东软班 综合报告94.3.3 GStreamer 的实现GStreamer 的基本应用原理如下图所示:图 6 GStreamer 原理图创建三个元件(bin 容器中默认包含这些元件),其中 disk_source 数据源元件负责从磁盘上读取数据,decoder 过滤器元件负责对数据的解码,而 play_audio 接收器元件负责将解码后的数据写入声卡,将创建好的元件放入管道 pipeline 并且连接起来,这样可以更好地让数据流动,创建一个 bus 来得到管道的消息总线,添加消息监视器对消息进行监视,这样便实现了一个简单的 GStreamer 应用。4.4 编译文件的实现本次的工程主要有 main.c function.c function.h declare.h 四个文件,其中,declare.h 中包含了全局变量的声明,function.h 主要定义了回调函数以及歌词解析等函数,function.h 则包含了主要函数的声明,main.c 是项目的主函数,主要负责初始化工作。通过 Makefile 对项目中的编译链接规则定义如下:Player:main.o function.ogcc -o Player main.o function.o pkg-config -cflags -libs gtk+-2.0 gstreamer-0.10main.o:main.cgcc -c main.c pkg-config -cflags gtk+-2.0 gstreamer-0.10function.o:function.c南昌航空大学东软班 综合报告10gcc -c function.c pkg-config -cflags gtk+-2.0 gstreamer-0.104.5 程序的执行根据已经写好的 Makefile 文件,通过使用 make 工具就可以按照指定的规则编译链接程序,生成可执行文件 Player,在 shell 下运行./Player 即可启动程序。5.总结与展望本次基于 Linux 下的 mp3 播放器项目,通过使用 GTK 和 GStreamer,基本上实现了音乐器的基本功能,包括音乐的播放、暂停、停止、歌曲名的获取与显示、时间的显示、进度的显示、歌词的显示与调整、歌曲列表的显示功能,同时可以通过调节进度条来更新时间和歌词,在项目的开发过程过程中,我收获很大,主要可以分为以下几个方面:1) 规范的软件开发流程。通过本次项目,我了解了一个项目的完整的开发流程,从前期的需求分析、概要设计、详细设计到后面测试用例的编写与执行,通过参照别人的模板,我认识到了自己在文档编写方面的不足,我以后一定会多加锻炼,提高自己文档的编写能力。2) Linux 开发环境的了解。由于本次项目是基于 Linux 的,我了解了 shell 下的一些基本命令,使用 vi 编辑器,由于不能使用鼠标所以我掌握了一些 vi 下的快捷键,通过这些快捷键的使用来降低时间的消耗。3) GTK 图形界面的使用和了解。通过使用 GTK 来创建图形界面,我了解了界面构建的基本思想,通过在容器中加控件来构建整个界面,通过综合考量,本次使用的就是盒状布局,方便后续的二次开发。4) GStreame

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论