当前位置:   article > 正文

粤嵌gec6818开发板-播放视频、音频文件(管道文件控制)_粤嵌6818视频播放器

粤嵌6818视频播放器

        前段时间做了一个项目,用到了linux环境下gec6818开发板播放视频、音频文件,在这里给大家分享一下。

        这里使用的方法是利用mplayer播放器进行播放,首先先给开发板装上mplayer播放器,这里就不详细说明了。

        我用的是管道文件来控制视频。

        如何使用 mplayer 播放音视频文件:

  • 确保开发板中有音视频文件(.mp3 .avi [ 某些压缩格式的MP4也行 ] )
    • 直接使用 命令进行播放
  1. mplayer 3.avi // 文件名可以是视频文件,也可以是音频文件
  2. mplayer 3.avi -geometry 100:200 -zoom -x 400 -y 200

      

  1. //判断管道文件是否存在
  2. if(access("/fifo",F_OK))
  3. {
  4. if(mkfifo("/fifo",0777)==-1)
  5. {
  6. printf("创建管道文件失败\n");
  7. return -1;
  8. }
  9. printf("创建管道文件成功\n");
  10. }
  11. //打开管道文件
  12. int fd = open("/fifo",O_RDWR);
  13. if(fd==-1)
  14. {
  15. printf("打开管道文件失败\n");
  16. return -1;
  17. }
  18. printf("打开管道文件成功\n");
  19. //播放视频并且链接管道文件
  20. sprintf(video_name,"mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 400 /%d.avi &",video_num);
  21. system(video_name);
  22. qidong_flag=1;
  23. printf("开始播放\n");

        可以通过管道文件对视频、音频播放进行控制

  1. write(fd,"pause\n",strlen("pause\n"));
  2. printf("播放 暂停\n");
  3. write(fd,"volume +10\n",strlen("volume +10\n"));
  4. printf("音量+\n");
  5. write(fd,"volume -10\n",strlen("volume -10\n"));
  6. printf("音量-\n");

        下面是一个示例

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //管道文件描述符
  4. int fd_fifo;
  5. int Video_Init()
  6. {
  7. //判断是否存在管道文件,不存在才创建
  8. if(access("/fifo",F_OK))//默认管道文件创建在根目录 F_OK:判断是否存在
  9. {
  10. //如果条件成立,不存在
  11. mkfifo("/fifo",777);//创建管道文件的函数
  12. }
  13. fd_fifo = open("/fifo",O_RDWR);
  14. if(fd_fifo == -1)
  15. {
  16. printf("创建管道文件失败!\n");
  17. return -1;
  18. }
  19. return 0;
  20. }
  21. int Send_Cmd(char *cmd)
  22. {
  23. write(fd_fifo,cmd,strlen(cmd));
  24. return 0;
  25. }
  26. int main()
  27. {
  28. printf("启动视频播放器! \n");
  29. //显示视频播放器界面
  30. Video_Init();
  31. //启动视频播放器,并且指定管道文件
  32. system("mplayer -slave -quiet -input file=/fifo -geometry 0:0 -zoom -x 800 -y 400 Faded3.avi &");
  33. //-slave:从模式 让播放器从管道文件接送命令
  34. //-quiet:解除冗余模式
  35. //-input:指定管道文件的路径
  36. //geometry x:y视频画面的左上角坐标
  37. //zoom启动缩放模式
  38. sleep(1);
  39. //Display_Pic("/windows_pic/video.bmp",0,0,800,480);
  40. while(1)
  41. {
  42. //触摸屏函数
  43. Get_Touch_Data();
  44. if(touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0)//判断手是否离开
  45. {
  46. if(P_I.x>350 && P_I.x<460 && P_I.y>400 && P_I.y<480)//继续、暂停
  47. {
  48. printf("暂停 继续 !\n");
  49. Send_Cmd("pause\n");
  50. }
  51. if(P_I.x>0 && P_I.x<40 && P_I.y>400 && P_I.y<480)//音量+
  52. {
  53. printf("音量+ !\n");
  54. Send_Cmd("volume +10\n");
  55. }
  56. if(P_I.x>50 && P_I.x<100 && P_I.y>400 && P_I.y<480)//音量-
  57. {
  58. printf("音量- !\n");
  59. Send_Cmd("volume -10\n");
  60. }
  61. if(P_I.x>550 && P_I.x<650 && P_I.y>400 && P_I.y<480)//快进
  62. {
  63. printf("快进 !\n");
  64. Send_Cmd("seek +10\n");
  65. }
  66. if(P_I.x>150 && P_I.x<250 && P_I.y>400 && P_I.y<480)//快退
  67. {
  68. printf("快退 !\n");
  69. Send_Cmd("seek -10\n");
  70. }
  71. if(P_I.x>700 && P_I.x<800 && P_I.y>400 && P_I.y<480)//退出
  72. {
  73. printf("退出 !\n");
  74. break;
  75. }
  76. }
  77. }
  78. return 0;
  79. }

        我最近建了一个嵌入式的QQ交流群,感兴趣的可以进群了解一下,我会在群里分享一些常用的代码封装,以及一些项目的源码。QQ群讨论也是完全开放,只要不打广告大家可以就嵌入式尽情的沟通和交流,大家对文章中的内容有疑问也可以在群中提出,有空会尽我所能给大家一些帮助。QQ群号:643408467

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/791809
推荐阅读
相关标签
  

闽ICP备14008679号