Mplayer 的一种设计方法
2013-08-16张春平
张春平
(石家庄职业技术学院,河北石家庄050081)
1 介绍
在嵌入式软件开发学习过程中,教师会安排很多小的项目来验证学习者阶段学习的成效, 其中Mplayer 是基于Linux 系统编程的一个项目。 这个项目基于Cortex A8 平台,具有触摸屏和按键。 学习者利用这个平台开发Mplayer,基本功能是显示歌曲信息、同步歌词,显示歌曲列表,当前歌曲反显,点击歌曲名能切换歌曲,显示当前播放进度,实现按键、触摸屏控制mp3 文件的播放、暂停、上一首、下一首、快进、快退、音量加减、静音等功能。
2 Mplayer 设计步骤
Mplayer 是Linux 系统编程的一个实例,这里涉及到进程和线程,让学习者练习进程和线程的具体应用。 触摸屏和按键都可以控制歌曲,这就要使用不同的线程实现,另外歌曲的播放进程和触摸屏、按键等线程之间要进行通信,获取按键和触摸屏线程传递的命令实现相应的歌曲切换等功能, 这里使用无名管道和命名管道实现进程之间通信。 下面具体看看设计步骤。
2.1 初始化
Mplayer 启动,初始化图形库和触摸屏,实现背景窗口的初始化。系统提供了图形库函数以及触摸屏相关使用函数,学习者可以直接调用实现其相关功能。 例如以下函数:
TFT_init();这是将液晶屏初始化。
TFT_File_Picture();窗口贴图函数。
TFT_CreateWindow();创建背景窗口函数。
TFT_ClearWindow();窗口清除函数。
2.2 歌曲列表、高亮显示播放歌曲
从歌曲文件夹中读取歌曲名字,可以使用指针数组、链表或者数据库保存。 利用独立函数将歌曲歌词列表显示,并把播放的歌曲名高亮。 其中使用到打开目录函数和读取目录下文件函数。
DIR *opendir(char *pathname);
int closedir(DIR *dir);
struct dirent *readdir(DIR *dir);
这些函数的具体使用方法可以参照Linux C 函数文档, 具体了解,这里不再赘述。
2.3 歌曲切换
由触摸屏和按键实现歌曲播放、暂停、歌曲切换等功能,歌曲的切换通过mplayer 提供的“loadfile pathname”命令,切换到pathname 指定的歌曲。 歌曲歌词列表实现之后创建子进程,在子进程中启动mplayer,使用execl 或者execv 实现。execl 或execv 规定了mplayer 从命名管道获取信息, 主进程就只能从这个命名管道发送命令来控制mplayer实现歌曲切换。 所以主进程需要创建触摸屏线程和按键线程,检测触摸屏和按键操作,发送命令到这条命名管道,实现歌曲真正的切换功能。
2.4 歌曲信息显示
在歌曲信息窗口显示歌曲的总长度、当前播放时间,以及歌曲的专辑、歌手、标题等信息,这些信息在歌曲切换时进行刷新。 这些信息是通过mplayer 的一些命令获取,但是需要重定向mplayer 的输出,输出到无名管道的写入端,这样其他进程和线程可以获得信息,将需要的信息显示到液晶屏。
2.5 歌曲歌词显示
在mplayer 播放歌曲时,查找歌词,根据mplayer 返回的当前播放时间来查找歌词,使得歌曲和歌词同步,当歌曲快进时也可以实现同步功能,歌词解析功能使用独立线程完成。
3 Mplayer 流程
图1 是Mplayer 开发流程图。
图1 Mplayer 流程图
上面, 我们具体讲述了开发Mplayer 项目每一步骤做的具体事宜,而使用流程图来表示出具体情况,显得清晰明了,这样学习者能更清楚的了解项目的开发。
4 Mplayer 的扩展功能
上文介绍的设计是Mplayer 的基本功能实现,如果学习者有更多的时间和精力可以扩展更多的功能,比如触摸进度条就可以使得歌曲快进或者快退;触摸歌词显示窗口,往上滑动或者向下滑动歌词,也可以使得歌曲快进或者快退。另外这个播放器是将固定路径下的歌曲添加到歌曲名称显示窗口,那我们可以清除其窗口,利用添加按钮,选择不同的路径来添加歌曲。这些功能实现难度稍大,学习者能力不同,可以根据自身情况来完成。
[1]Stephen Prata.C Primer Plus[M].北京:人民邮电出版社,2012:354-370.
[2]Neil Matthew,等.Linux 程序设计.4 版[M].北京:人民邮电出版社,2012:102-103,443-464.
[3]韦东山.嵌入式Linux 应用开发完全手册[M].北京:人民邮电出版社,2012:197-221.