音视频播放功能
一、音频播放
1、Linux下的音频播放实现
在嵌入式智能家居系统功能里面,有时需要使用音乐播放的功能,例如图片浏览时播放背景音乐,进行系统播报语音提示等,那么,在Linux下如何实现音频播放功能?
(1) 实验设备:gec6818开发板一套,有线耳机一副。
(2) 软件资料:madplay播放器+MP3文件若干
2、实现步骤
(1) 检查开发板上的madplay播放器
==> which madplay
(2) 准备一些mp3素材文件
==> 准备的音乐文件要求文件名不能有中文,mp3格式。
(3) 将mp3文件拷贝到开发板
·把准备好的素材文件放在U盘下的music目录下
·把U盘接到开发板
·查看U盘是否挂载成功 ==> df -h
·在开发板上进入U盘挂载的路径
==> cd /mnt/udisk
·把U盘下的music目录下的mp3文件全部拷贝到开发板的工作目录
==> cp music/*.mp3 /SmartHome_Zj (拷贝到自己的工作路径)
(4) 使用madplay 播放器播放音乐
==> madplay 音乐文件名
==> madplay faded.mp3
==>练习:自己准备2~3首MP3,下载到开发板播放。
(5) 音乐播放控制
对于Linux下的madplay播放器的控制,经常会采用信号进行控制。
==> linux下的信号: kill -l
- SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
- SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
- SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
- SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
- SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
- SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
- SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
- SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
- SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
- SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
- SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
- SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
- SIGRTMAX-1 64) SIGRTMAX
==>一共是62个信号 ==> 主要使用前面的1~31号的非实时信号
==> SIGKILL : 杀死进程 (不可被屏蔽的信号)
==> SIGSTOP : 暂停信号 (让进程进入暂停)
==> SIGCONT : 继续信号 (让进程解除暂停状态)
==》给madplay进程发送暂停信号: killall -SIGSTOP madplay
练习:下载music.c , 自行设计一张music.bmp , 设计 “播放”,”暂停”,”继续”, “结束”, “上一曲”, “下一曲” 功能按键,实现音乐播放的简单控制: 播放,暂停,继续,结束。
二、语音播报信息
在项目运行中,可以在适当的时候播报语音信息进行提示,例如:进入系统时提示“欢迎使用xxx智能家居”,退出时提示:“欢迎下次使用”
这些语音信息可以是固定的,只需要在本地准备这些语音文件,程序中进行播放即可。
文字转语言
==> 在线文字转语音
http://tools.bugscaner.com/tts/
任务:进入在线文字转语音网站,准备一些语音文件
在后面的项目中,如果需要在功能里面添加语音播报提示,就自行准备语音文件,烧写到开发板之后使用madplay进行播放
三、视频播放
在智能家居中的影音娱乐模块,除了音乐播放,还可以实现视频播放。
在Linux下实现视频播放,需要使用视频的解码播放器 mplayer
1、素材准备
1, mplayer : linux下视频解码播放器
2, 视频素材
==》 mp4, avi … ==》 建议使用avi格式视频
2、实现步骤
1) 检查开发板空间 ==> df -h ==> 如果空间少于50M,那就删除一些不需要的文件
2)移植mplayer到开发板 ==> U盘拷贝
3)使用mplayer播放视频
==> ./mplayer Faded3.avi
==> ./mplayer -h 查看播放控制方法
4)常用的播放命令
==> ./mplayer -slave -quiet -geometry 0:0 -zoom -x 800 -y 480 Faded3.avi
-slave : 采取从模式,播放时不再截取键盘控制,而是采用slave命令进行控制。
-quiet : 不再输出多余信息
-geometry 0:0 : 设置视频播放的起始位置 (0,0)
-zoom : 允许视频缩放
-x 800 -y 480 : 帧宽度,帧高度
==》使用这个播放命令,设置播放器的播放视频的大小和位置
例如:把视频Faded3.avi 在屏幕起点位置为(80,0),播放大小为640*480。
5)slave 命令
==> ./mplayer -input cmdlist
seek Float [Integer] // 快进,快退
==> 快进5秒 “seek 5\n” ; 快退10秒 “seek -10\n”
==> quit 退出播放器 “quit\n”
==> pause 暂停/继续 “pause\n”
==> volume 音量调节 “volume 10\n” “volume -10\n”
==> mute 静音选项 “mute 1\n” (静音) “mute 0\n” (恢复)
设计一个视频播放器的功能界面 ==> 800*480的bmp图片,可以参考 video.bmp
6)设计程序实现视频播放控制
==》Linux下的管道通信
==》要使用管道控制mplayer播放器播放状态,那么需要在播放时添加 管道参数
./mplayer -slave -quiet -input file=/tmp/myfifo -geometry 0:0 -zoom -x 800 -y 480 Faded3.avi
linux下创建管道文件 ==> mkfifo()
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
==> pathname : 管道文件的路径
==> mode : 文件权限 0777
四、项目框架搭建
当前任务:参考smart_home.c , 完成智能家居框架设计。
1)设计项目功能界面
·welcome.bmp ==> 800480的bmp , 2个按键 “登录”,“退出”
·main.bmp ==> 800480的bmp, “相册”,“音乐”,“视频”,“监控”,“家电”
·exit.bmp ==> 800*480的bmp
2)根据设计的界面,补充代码