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

news2024/11/17 23:52:17

        前段时间做了一个项目,用到了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.coloradmin.cn/o/1637450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何解决DA14531编译工程出现大量报错的问题

在编译DA14531某个工程时&#xff0c;在这台电脑可以编译&#xff0c;另外一台电脑就编译不过&#xff0c;出现很多错误问题。那要怎样处理呢&#xff1f; 建议安装新MDK版本 可能是MDK版本问题&#xff0c;在不同的电脑安装不同的MDK版本&#xff0c;用新的版本可以编译通过&…

ZABAPGIT问题,导入github上的程序包时报 DBSQL_DUPLICATE_KEY_ERROR

跟踪程序发现在94050行 INSERT seocompotx FROM TABLE it_descriptions 报的错 刚开始&#xff0c;不想着改动他&#xff0c;把seocompotx 表的数据做下指定清楚&#xff0c;但是5次清楚后&#xff0c;果断注释掉 改成 MODIFY seocompotx FROM TABLE it_descriptions。 在用…

Winfrom —— 计算阶乘

首先搭建一个界面 创建listBox输入框进行输入内容 界面图如下 计算按钮的事件 private void button1_Click(object sender, EventArgs e) {if (textBox1.Text.Length 0){textBox1.Text "";}else{int n 1;int sum 1;n Convert.ToInt32(textBox1.Text);for (; n…

成像测井基础-1

一、成像测井系统简介 成像测井是一种能探测地层的某个特性(如岩石成分、孔隙度、渗透率)在以井轴为垂直坐标(z)、以井径为径向坐标、以方位角为方向坐标(θ)的柱状坐标系(r&#xff0c;θ,z )中分布的测井方法&#xff0c;且可以按井壁的展开平面或沿某个方位的剖面进行图像显…

Hi3519AV100 处理器⾼速全局快⻔相机

⾼速全局快⻔相机采⽤ 1英⼨全局快⻔ Sensor&#xff0c;⽀持 H.264/H.265 编码&#xff0c;8 百万 分辨率模式下最⾼帧率可达 50 帧/秒&#xff0c;1080P 模式下最⾼帧率可达 120 帧/秒。主控采⽤ Hi3519AV100 处理器&#xff0c;集成 2 Tops AI 算⼒ NPU &#xff0c;⽀持⼤…

必应广告投放怎么做?怎么开户推广?

今天搜索引擎广告依旧是企业提升品牌知名度、吸引潜在客户的关键渠道之一&#xff0c;必应Bing&#xff0c;作为全球第二大搜索引擎&#xff0c;不仅拥有庞大的用户基础&#xff0c;更以其精准的定向能力和高效的转化效率&#xff0c;成为众多企业拓展市场的优选平台。 一、必…

Mysql_数据库事务

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a; MySQL__事务&#xff09; ⏱️ 创作时间&#xff1a;2024年04月26日 ———————————————— 这里写目…

基于python的舞蹈经验分享交流网站django+vue

1.运行环境&#xff1a;python3.7/python3.8。 2.IDE环境&#xff1a;pycharmmysql5.7/8.0; 3.数据库工具&#xff1a;Navicat11 4.硬件环境&#xff1a;windows11/10 8G内存以上 5.数据库&#xff1a;MySql 5.7/8.0版本&#xff1b; 运行成功后&#xff0c;在浏览器中输入&am…

Nginx负载均衡主备模式

1. 背景 使用Nginx代理后端服务&#xff0c;有时候某些服务是不能使用多台负载均衡&#xff0c;但又想保障高可用&#xff0c;所以采用主备模式&#xff0c;记录如下&#xff1a; 2. 参考 nginx 负载均衡Nginx-负载均衡-后端状态max_conns、down、backup、max_fails、fail_t…

Docker: 如何不新建容器 修改运行容器的端口

目录 一、修改容器的映射端口 二、解决方案 三、方案 一、修改容器的映射端口 项目需求修改容器的映射端口 二、解决方案 停止需要修改的容器 修改hostconfig.json文件 重启docker 服务 启动修改容器 三、方案 目前正在运行的容器 宿主机的3000 端口 映射 容器…

修改Docker容器内文件的三种方式

说明&#xff1a;本文介绍修改Docker容器内文件的三种方式 方式一&#xff1a;直接修改 敲下面的命令&#xff0c;进入Docker容器&#xff0c;如mysql docker exec -it mysql /bin/bash修改mysql的配置文件&#xff0c;/etc/my.cnf vim /etc/my.cnf如下&#xff0c;如果vim…

【机器学习】基于扩散模型的文本到音频生成:突破数据局限,优化音频概念与实践顺序

基于扩散模型的文本到音频生成&#xff1a;突破数据局限&#xff0c;优化音频概念与时间顺序 一、现有模型的局限与挑战二、偏好数据集的构建与利用三、Diffusion-DPO损失的应用与模型微调四、实例与代码展示五、总结与展望 随着数字化技术的迅猛发展&#xff0c;音乐和电影行业…

霍纳法则与多项式求值问题

目录 多项式求值问题引入 什么是霍尔法则 多项式求值问题引入 题目链接&#xff1a;多项式求值 对于多项式求值问题&#xff0c;例如多项式: 常规的计算方法是每一项单独计算&#xff0c;即先计算&#xff0c;再接着计算&#xff0c;以此类推&#xff0c;最后求和即可&…

排序-八大排序FollowUp

FollowUp 1.插入排序 (1).直接插入排序 时间复杂度:最坏情况下:0(n^2) 最好情况下:0(n)当数据越有序 排序越快 适用于: 待排序序列 已经基本上趋于有序了! 空间复杂度:0(1) 稳定性:稳定的 public static void insertSort(int[] array){for (int i 1; i < array.length; i…

鸿蒙学习1概况

鸿蒙学习1相关概念 前言相关概念Stage 模型1. AbilityStage2. UIAbility组件和ExtensionAbility组3. WindowStage4. Context 事件传递UIAbility组件与UI的数据同步UIAbility组件间交互&#xff08;设备内&#xff09; 进程模型线程模型 前言 有时间多看官网&#xff0c;官网的…

Android项目中添加Dobby(inline hook)

2024技术交流群 ​ 课程地址 鸿蒙(HarmonyOS)APP开发实战课程(入门到精通) https://edu.csdn.net/course/detail/39448 1.Ubuntu编译Dobby 2.Dobby框架的介绍 Dobby是一个轻量级、多平台、多架构的inline hook框架&#xff0c;它使用起来轻快便捷&#xff0c;支持Windows/ma…

git如何将多个commit合并成一个?

我们使用git进行版本控制&#xff0c;在本地开发完某个功能时&#xff0c;需要提交commit&#xff0c;然后push至开发分支。简单的功能还好&#xff0c;几个commit可能就好了。但是如果功能比较复杂&#xff0c;commit多达十几甚至几十个时&#xff0c;commit管理就会很冗长。比…

selinux 基础知识

目录 概念 作用 SELinux与传统的权限区别 SELinux工作原理 名词解释 主体&#xff08;Subject&#xff09; 目标&#xff08;Object&#xff09; 策略&#xff08;Policy&#xff09; 安全上下文&#xff08;Security Context&#xff09; 文件安全上下文查看 先启用…

【数据结构】二叉树(带图详解)

文章目录 1.树的概念1.2 树的结构孩子表示法孩子兄弟表示法 1.3 相关概念 2.二叉树的概念及结构2.1 二叉树的概念2.2 数据结构中的二叉树-五种形态2.3 特殊的二叉树2.4 二叉树的存储结构顺序存储链式存储 2.5 二叉树的性质 3. 堆3.1 堆的定义3.2 堆的实现堆的结构堆的插入向上调…

Android binder死亡通知机制

在Andorid 的binder系统中&#xff0c;当Bn端由于种种原因死亡时&#xff0c;需要通知Bp端&#xff0c;Bp端感知Bn端死亡后&#xff0c;做相应的处理。 使用 Bp需要先注册一个死亡通知&#xff0c;当Bn端死亡时&#xff0c;回调到Bp端。 1&#xff0c;java代码注册死亡通知 …