关于linux播放器madplay对外提供接口与界面整合的总结
来源:互联网 发布:支持java的游戏引擎 编辑:程序博客网 时间:2024/06/01 09:47
关于linux播放器madplay对外提供接口与界面整合的总结
应用中使用system调用madplay播放音频后,无法直接控制暂停/停止等操作,百度上一搜方法全是是直接对madplay进程进行控制,"killall -19 madplay"使进程挂起以暂停,"killall -18 madplay"使进程恢复运行,"killall -9 madplay"终止进程以停止。
此种方法虽然可以实现最基本的播放/暂停/停止功能,但是都是对进程直接操作,强制进程终止,似乎有那么点点不合理的地方,还有就是发出暂停命令后,须等待大概1s钟的时候声音才能停止。这种方法不可能再增加其他功能,比如,音频文件的总时间/当前时间获取,纯软件上的音量调节等。
对madplay源码进行小修改以对外有可操作的接口:
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对外提供接口与界面整合的总结
- 模块对外提供接口 技巧总结
- qt下的madplay播放器
- qt下的madplay播放器
- 12、madplay的MP3播放器移植
- 基于Madplay的MP3音乐播放器
- arm9+linux s3c2440 uda1341声卡驱动与madplay播放器移植
- Linux设备驱动之udal341声卡驱动与madplay播放器移植
- 提供对外接口时,要注意的地方
- TQ2440下面的madplay播放器使用,能播放MP3
- linux下shell脚本的使用——安装madplay播放器,sed函数详解
- 构建嵌入式Linux应用系统 —— mp3播放器 madplay的移植
- graph.js整合node和edge资源,对外提供访问接口
- 移植madplay mp3 播放器到linux-2.6
- 移植madplay mp3 播放器到linux-2.6
- memcached与spring提供的cache接口整合demo
- s3c2440 UDA1341声卡驱动与madplay播放器移植,
- s3c2440 uda1341声卡驱动与madplay播放器移植
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- 《Golden Age》 --- 黄金时代
- ubuntu下安装xlrd模块,Mysqldb模块
- JavaScript核心
- 千万别相信鲁大师的硬件测温和CPU测温功能!!
- 关于linux播放器madplay对外提供接口与界面整合的总结
- hihocoder 1064 时间结界 扫描线
- 注定永远—— I will become the best "攻城狮"
- Linux c 开发 - gcc
- 字符串读取错误
- Java 基础 polymorphism(多态)
- 作为大型网站架构必须考虑的十大问题
- linux中mmap系统调用原理分析与实现
- 游戏服务器端开发要点