我是靠谱客的博主 糟糕白昼,最近开发中收集的这篇文章主要介绍Mplayer播放器程序设计Linux,Linux下编程实现mplayer播放器总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第3步:功能:屏幕上显示歌曲长度、当前播放到多少秒、当前歌曲的“专辑、歌手、标题、发行年份”,进度条

要求:

1:在屏幕歌曲信息窗口中显示歌曲的总长度,当前播放时间.(切换歌曲活快进快退的时候刷新信息)

2:在歌曲信息窗口中显示 歌曲的“专辑、歌手、标题、发行年份”.(切换歌曲的时候刷新信息).

3:播放进度条随着时间推移。(切换歌曲、或快进快退的时候可以刷新)

提示: 1: 父子进程通过管道通信。即子进程通过管道把消息传给父进程

子进程把Mplayer输出的信息重定向到管道中。

主进程从管道中读,读出来后解析再做相应的处理。

2: 主进程几个创建子线程

1:pipe_read 循环读管道把读到的消息保存在字符数组中。

2:pipe_read_dispose 循环解析读到的消息,把有用的消息解析出来,做相应的处理

3:get_percent_pos 每隔一段时间发一条检测时间的命令,获取当前播放时间。

第4步:功能:在歌词窗口显示歌词。

要求:歌词循环打印,歌词与歌曲同步,切换歌曲的时候切换新的歌词。

提示:可以用Mplayer返回回来的当前播放时间去查找歌词解析里的时间,这样快进歌词也可以跟着同步。

如果用以前的虚拟时间,歌曲快进,歌词不能同步。

歌词解析功能也是创建一个新的线程去完成

四,思路

1,初始化:

在编写任何一个项目程序之前,都有一些初始化工作要做,首先必须把该项目要用的硬件配置好,也就是静态的程序工作,上边的第零步和第一步都是初始化工作。还有一个初始化的就是触摸屏,因为之词用的是图片,所以要找到图片是对应功能键在触摸屏上的位置,包括x,y坐标的范围和对应的功能键,这个以通过建立一个结果体数组,然后有键按下后判断其范围,并把对应的键值返回:

这在touchscreen.c文件里实现

2,从最基本的功能一步一步实现最终的功能,基本功能是实现最终功能的基础

3,写程序之前应该分析项目的整体实现方法,要有可行性,不要最后走到死胡同

4,做完之后要检测,看某些地方有没有再好的实现方法。

在分析项目的时候,看要不要用进程,用不上进程的地方就尽量不要用,进程一般用在、、、;用了进程之后,进程之间如何通信,有关联的进程数据传输一般用无名管道,无关联的用有名管道,

一些实时性要求比较高的地方要用到线程,比如等待触摸屏,独立的线程处理比较简单,但关联的线程处理起来就比较麻烦,信号,互斥锁,信号量,都不能用的时候就自己建立一个标志位,进行控制;

Mplayer的执行和控制部分:

1,简单的播放歌曲

在该项目中,mplayer可执行程序的运行要通过exec函数来实现,这种函数执行完之后就退出线程了,因此必须给他新建一个子线程,

if((pid=fork())==-1)

{

perror("fork");

exit(1);

}

else if(pid==0)//在子进程中播放歌曲

{

char song[SONG_CHNUM];

close(pipedes[0]);

dup2(pipedes[1],1);

sprintf(song,"%s%s","./song/",song_list[0]);//得到整个歌曲路径

execlp("./mplayer","","-ac","mad","-slave","-quiet","-input","file=fifo",song,NULL);}

通过程序控制mplayer要用有名管道传送命令,通过无名管道读取mplayer返回的信息,因为mplayer默认是把信息发送到标准输出上,所以要用dup2()中定向标准输出到无名管道的写端: dup2(pipedes[1],1);。

创建有名管道和无名管道

unlink(FIFO);//如果管道存在,先删除

if(mkfifo("fifo",IPC_CREAT|0x744)==-1)//创建有名管道

{

perror("mkfifo");

exit(1);

}

if(pipe(pipedes)==-1)//创建无名管道用于从mplayer读取歌曲信息

{

perror("pipe");

exit(1);

}

因为在该项目中要经常向mplayer发送命令,那么就建立一个函数通过写有名管道向mplayer发送命令:

写之前在主进程中打开:

if((fd=open(FIFO,O_RDWR))==-1)

{

perror("open");

exit(1);

}

void send_cmd(char *cmd)//通过有名管道向mplayer发送命令

{

if((write(fd,cmd,strlen(cmd)))!=strlen(cmd))

{

perror("write cmd");

}

}

这样一个简单的mplayer就建立成功了,运行这个框架下的程序,可以自己播放一首歌,一首歌播完后由于exec函数的性质,整个程序就执行完了。0b1331709591d260c1c78e86d0c51c18.png

最后

以上就是糟糕白昼为你收集整理的Mplayer播放器程序设计Linux,Linux下编程实现mplayer播放器总结的全部内容,希望文章能够帮你解决Mplayer播放器程序设计Linux,Linux下编程实现mplayer播放器总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部