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

server/2024/9/23 1:02:44/

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


http://www.ppmy.cn/server/27494.html

相关文章

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列&#xff0c;基于TriCore内核&#xff0c;用于汽车和工业领域。 XMC™系列&#xff0c;基于ARM Cortex-M内核&…

搭建vue3组件库(一): Monorepo架构搭建

文章目录 1. 以 pnpm 构建 monorepo1.1 全局安装 pnpm1.2 配置 pnpm 的 monorepo 工作区1.3 仓库项目内的包相互调用1.4 TypeScript 初始化配置文件 2. 通用配置文件2.1 添加 .editorconfig 编辑器格式配置文件2.2 添加 .gitignore git 忽略文件2.3 添加 .npmrc npm配置文件2.4…

数据结构(八)——排序

八、排序 8.1 排序的基本概念 排序(Sort)&#xff0c;就是重新排列表中的元素&#xff0c;使表少的元素满足按关键字有序的过程。 输入∶n个记录R1,R2...., Rn&#xff0c;对应的关键字为k1, k2,... , kn 输出:输入序列的一个重排R1,R2....,Rn&#xff0c;使得有k1≤k2≤...≤…

Java设计模式 _结构型模式_过滤器模式

一、过滤器模式 1、过滤器模式 过滤器模式&#xff08;Filter Pattern&#xff09;是这一种结构型设计模式。过滤器&#xff0c;顾名思义&#xff0c;就是对一组数据进行过滤&#xff0c;从而最终获取到我们预期的数据。 2、实现思路 &#xff08;1&#xff09;、定义过滤器的…

CUDA内存模型

核函数性能并不只与线程束的执行有关。 CUDA内存模型概述 GPU和CPU内存模型的主要区别是&#xff0c;CUDA编程模型能将内存层次结构更好地呈现给用户&#xff0c;能让我们显示的控制它的行为。 对程序员来说&#xff0c;一般有两种类型的存储器&#xff1a; 可编程的&#x…

Android 14设置android:importantForAutofill=“no“无效

密码输入框EditText不希望弹出Google的是否保存密码弹出框&#xff0c; 直接设置了android:importantForAutofill"no"&#xff0c; android:inputType"textPassword|textNoSuggestions"在安卓12手机上有效&#xff0c;但是在安卓14上面就不行了&#xff0…

PotatoPie 4.0 实验教程(33) —— FPGA实现摄像头视频图像叠加

链接直达 https://item.taobao.com/item.htm?ftt&id776516984361 什么是视频水印&#xff1f; 视频水印就是图像叠加&#xff0c;跟画中画&#xff0c;或者是OSD是一样的原理&#xff0c;都是在视频的行场数据流上进行替换操作&#xff0c;比如叠加可以直接用水印图的数…

神经网络:手写数字图像识别

一、导入相关库函数 import matplotlib.pyplot as plt import tensorflow as tf import keras import numpy as np 二、载入mnist数据集 使用keras.中的mnist数据集 (train_images, train_labels), (test_images, test_labels)\ keras.datasets.mnist.load_data() 三、测…