关于linux播放器madplay对外提供接口与界面整合的总结
2014-10-06 08:57
260 查看
关于linux播放器madplay对外提供接口与界面整合的总结
应用中使用system调用madplay播放音频后,无法直接控制暂停/停止等操作,百度上一搜方法全是是直接对madplay进程进行控制,"killall -19 madplay"使进程挂起以暂停,"killall -18 madplay"使进程恢复运行,"killall -9 madplay"终止进程以停止。
此种方法虽然可以实现最基本的播放/暂停/停止功能,但是都是对进程直接操作,强制进程终止,似乎有那么点点不合理的地方,还有就是发出暂停命令后,须等待大概1s钟的时候声音才能停止。这种方法不可能再增加其他功能,比如,音频文件的总时间/当前时间获取,纯软件上的音量调节等。
对madplay源码进行小修改以对外有可操作的[b]接口[/b]:
1.Madplay播放时使用# define TTY_DEVICE "/dev/tty"此设备进行读取字符串命令受控,因此考虑修改获取命令的来源方式,首先考虑使用一个常规文件,madplay只读,另一个控制程序只写,此种方式具有单向性,不具备交互的功能。
两个进程之间通信感觉最好控制的还是共享内存,定义了一个数据类型:
改写在player.c中setup_tty函数,使获取控制命令的来源更改为共享内存的方式。Readkey函数中使用共享内存返回读取到的命令值,再结合另一个测试程序mp3ctrltest.c此时已可以直接控制运行中的madplay进程,现在暂停已成即时,增减音量也顺势完成。
2.考虑进度条的时间获取
Madplay播放文件时使用struct player数据保存所有属性,所有有关文件的信息都可以在此数据中获取。
Player.c文件中decode_filter函数player->stats.total_time获取音频文件总播放时间,mp3ctrlptr->totaltime = player->stats.total_time.seconds; 此时间赋值给共享内存中的总时间记录。
player->stats.play_timer.seconds中保存当前播放时间,tty_filter函数不断被调用获取命令,在此函数中不断将当前时间赋值给共享内存中curtime,另一个进程定时去读取,即可即时获取当前播放时间。
3.关于播放时拖动进度条加载播放的想法
尝试过对不退出当前播放进程就完成定时播放,但是没有成功,考虑到目前不需要更深入一步的需要,所以不再去实现,但可以通过另一种方式实现。
启动 madplay时可以增加-s的参数加上时间定时播放,而在播放时我们获取了即时播放时间。拖动播放则记录时间后先退出再加定时播放完成此功能,快进功能与此一致,但是没有测试过退出再播放会不会有卡顿及其他影响!
应用中使用system调用madplay播放音频后,无法直接控制暂停/停止等操作,百度上一搜方法全是是直接对madplay进程进行控制,"killall -19 madplay"使进程挂起以暂停,"killall -18 madplay"使进程恢复运行,"killall -9 madplay"终止进程以停止。
此种方法虽然可以实现最基本的播放/暂停/停止功能,但是都是对进程直接操作,强制进程终止,似乎有那么点点不合理的地方,还有就是发出暂停命令后,须等待大概1s钟的时候声音才能停止。这种方法不可能再增加其他功能,比如,音频文件的总时间/当前时间获取,纯软件上的音量调节等。
对madplay源码进行小修改以对外有可操作的[b]接口[/b]:
1.Madplay播放时使用# define TTY_DEVICE "/dev/tty"此设备进行读取字符串命令受控,因此考虑修改获取命令的来源方式,首先考虑使用一个常规文件,madplay只读,另一个控制程序只写,此种方式具有单向性,不具备交互的功能。
两个进程之间通信感觉最好控制的还是共享内存,定义了一个数据类型:
typedef struct _mp3ctrl { unsigned char tty_fd;//控制命令 int totaltime; //音频文件总时间 int curtime; //音频文件当前播放时间 }mp3ctrl;此结构作为与其他进程交互的接口,需要更多功能直接添加。
改写在player.c中setup_tty函数,使获取控制命令的来源更改为共享内存的方式。Readkey函数中使用共享内存返回读取到的命令值,再结合另一个测试程序mp3ctrltest.c此时已可以直接控制运行中的madplay进程,现在暂停已成即时,增减音量也顺势完成。
2.考虑进度条的时间获取
Madplay播放文件时使用struct player数据保存所有属性,所有有关文件的信息都可以在此数据中获取。
Player.c文件中decode_filter函数player->stats.total_time获取音频文件总播放时间,mp3ctrlptr->totaltime = player->stats.total_time.seconds; 此时间赋值给共享内存中的总时间记录。
player->stats.play_timer.seconds中保存当前播放时间,tty_filter函数不断被调用获取命令,在此函数中不断将当前时间赋值给共享内存中curtime,另一个进程定时去读取,即可即时获取当前播放时间。
3.关于播放时拖动进度条加载播放的想法
尝试过对不退出当前播放进程就完成定时播放,但是没有成功,考虑到目前不需要更深入一步的需要,所以不再去实现,但可以通过另一种方式实现。
启动 madplay时可以增加-s的参数加上时间定时播放,而在播放时我们获取了即时播放时间。拖动播放则记录时间后先退出再加定时播放完成此功能,快进功能与此一致,但是没有测试过退出再播放会不会有卡顿及其他影响!
相关文章推荐
- 关于linux播放器madplay对外提供接口与界面整合的总结
- 关于linux播放器mplayer对外提供接口与界面整合的总结
- 移植madplay mp3 播放器到linux-2.6
- 关于Linux磁盘接口IDE和SATA小总结
- 关于Linux登录不进去的原因总结(输入正确用户名和密码,屏幕老是回到登录界面)
- 移植madplay mp3 播放器到linux-2.6
- graph.js整合node和edge资源,对外提供访问接口
- 模块对外提供接口 技巧总结
- 关于linux图形界面的基本知识X11
- 关于Linux系统下Grub启动流程的讨论总结
- linux-2.6.14下madplay在S3C2410上移植的全过程详解
- 关于用户体验和界面设计方面的一些国外资源(提供链接了)
- linux-2.6.13下madplay在S3C2440上移植的全过程详解
- 关于linux图形界面
- 关于在neoshine linux下使用电视卡遇到的问题和总结
- 关于linux图形界面的基本知识
- 关于用户体验和界面设计方面的一些国外资源(没提供链接,需要google或百度一下)
- 关于Linux的Cron进程的学习总结
- 关于linux图形界面的基本知识
- 关于linux图形界面的基本知识