前段时间做了一个项目,用到了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