前段时间做了一个项目,用到了linux环境下gec6818开发板播放视频、音频文件,在这里给大家分享一下。
这里使用的方法是利用mplayer播放器进行播放,首先先给开发板装上mplayer播放器,这里就不详细说明了。
我用的是管道文件来控制视频。
如何使用 mplayer 播放音视频文件:
- 确保开发板中有音视频文件(.mp3 .avi [ 某些压缩格式的MP4也行 ] )
- 直接使用 命令进行播放
mplayer 3.avi // 文件名可以是视频文件,也可以是音频文件 mplayer 3.avi -geometry 100:200 -zoom -x 400 -y 200
//判断管道文件是否存在if(access("/fifo",F_OK)){if(mkfifo("/fifo",0777)==-1){printf("创建管道文件失败\n");return -1;}printf("创建管道文件成功\n");}//打开管道文件int fd = open("/fifo",O_RDWR);if(fd==-1){printf("打开管道文件失败\n");return -1;}printf("打开管道文件成功\n");//播放视频并且链接管道文件sprintf(video_name,"mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 400 /%d.avi &",video_num);system(video_name);qidong_flag=1;printf("开始播放\n");
可以通过管道文件对视频、音频播放进行控制
write(fd,"pause\n",strlen("pause\n")); printf("播放 暂停\n");write(fd,"volume +10\n",strlen("volume +10\n")); printf("音量+\n");write(fd,"volume -10\n",strlen("volume -10\n")); printf("音量-\n");
下面是一个示例
#include <stdio.h> #include <stdlib.h>//管道文件描述符 int fd_fifo;int Video_Init() {//判断是否存在管道文件,不存在才创建if(access("/fifo",F_OK))//默认管道文件创建在根目录 F_OK:判断是否存在{//如果条件成立,不存在mkfifo("/fifo",777);//创建管道文件的函数}fd_fifo = open("/fifo",O_RDWR);if(fd_fifo == -1){printf("创建管道文件失败!\n");return -1;}return 0; }int Send_Cmd(char *cmd) {write(fd_fifo,cmd,strlen(cmd));return 0; }int main() {printf("启动视频播放器! \n");//显示视频播放器界面Video_Init();//启动视频播放器,并且指定管道文件system("mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 400 Faded3.avi &");//-slave:从模式 让播放器从管道文件接送命令//-quiet:解除冗余模式//-input:指定管道文件的路径//geometry x:y视频画面的左上角坐标//zoom启动缩放模式sleep(1);//Display_Pic("/windows_pic/video.bmp",0,0,800,480);while(1){//触摸屏函数Get_Touch_Data();if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)//判断手是否离开{if(P_I.x>350 && P_I.x<460 && P_I.y>400 && P_I.y<480)//继续、暂停{printf("暂停 继续 !\n");Send_Cmd("pause\n");}if(P_I.x>0 && P_I.x<40 && P_I.y>400 && P_I.y<480)//音量+{printf("音量+ !\n");Send_Cmd("volume +10\n");}if(P_I.x>50 && P_I.x<100 && P_I.y>400 && P_I.y<480)//音量-{printf("音量- !\n");Send_Cmd("volume -10\n");}if(P_I.x>550 && P_I.x<650 && P_I.y>400 && P_I.y<480)//快进{printf("快进 !\n");Send_Cmd("seek +10\n");}if(P_I.x>150 && P_I.x<250 && P_I.y>400 && P_I.y<480)//快退{printf("快退 !\n");Send_Cmd("seek -10\n");}if(P_I.x>700 && P_I.x<800 && P_I.y>400 && P_I.y<480)//退出{printf("退出 !\n");break;}}}return 0; }
我最近建了一个嵌入式的QQ交流群,感兴趣的可以进群了解一下,我会在群里分享一些常用的代码封装,以及一些项目的源码。QQ群讨论也是完全开放,只要不打广告大家可以就嵌入式尽情的沟通和交流,大家对文章中的内容有疑问也可以在群中提出,有空会尽我所能给大家一些帮助。QQ群号:643408467