当前位置: 首页 > article >正文

Linux——mplayer项目

部分来源:看见代码就想敲

一,功能

二.VT100讲解

[1]简介

    VT100是一个古老的终端定义,后面出现的终端几乎都兼容这种终端

VT100控制码是用来在终端扩展显示的代码。比如果终端上任意坐标用不同的颜色显示字符。

规则

<1>所有的vt100控制字符都是\033开头(即esc的ascii码)。用输出字符语句来输出。

   我们可以使用printf来输出我们所有的控制字符。

<2>常用格式:

 printf("\033[字体背景颜色;字体颜色m")

 printf("需要打印的字符串");

 printf("\033[0m"); 关闭所有属性

 

背景颜色范围:40-47(若是不在该范围则代码原样输出)

40:黑

41:深红

42:绿

43:黄色

44:蓝色

45:紫色

46:深绿

47:白色

前景字符颜色:30-----------37

30:黑

31:红

32:绿

33:黄

34:蓝色

35:紫色

36:深绿

37:白色

 

【2】系统定义的特殊控制字符格式。(即系统最后一个字符不是m,而是控制字符)

1.常用系统控制字符

\033[y;xH设置光标位置        

例如:

          //表示在第5行,第3列的位置打印"123"字符串  

          printf("\033[5;3H");

           printf("123");

          printf("\033[0m");

\033[2J 清屏 

三.函数代码

1.打印菜单函数

2.打印指定目录下歌曲名函数

(1)定义playlist记录所有的歌曲名

(2)定义playlist_size记录歌曲数目

(3)定义索引记录当前播放曲目

【1】首先DIR *dir=open(dir_path)打开指定目录

【2】定义struct dirent遍历目录

【3】定义一个数组存放可播放的文件后缀

    const char *filename[] = {".mp3", ".mp4", ".avi", ".rm", ".rmvb", ".flv", ".wma"};

【4】sttchr函数以指针的形式返回符合·条件的后缀


【5】遍历目录且与数组中后缀进行比较,打印出符合条件的文件名,记录文件个数。

【6】关于index函数

index函数使用不当

在printfPlayerList 函数里,index 函数用于查找文件扩展名。不过,要是文件没有扩展名或者index

没找到·字符,P就会是 NULL。后续对 p调用strcmp函数时,就会引引发段错误。

2.管道传递命令函数

【1】fifo_fd 管道文件的描述符

【2】command为const char*的指针,直接传入管道字符串命令

【3】写入命令长度

3.播放函数

【1】用excel函数运行代码外文件

【2】运行playlist中索引为current_index的曲目

【3】exit退出

【4】通过在子进程中使用播放歌曲

4.暂停函数

向管道发送命令进行暂停,再次使用继续播放

5.停止函数

向管道发送退出命令

6.播放上一个函数

【1】首先传入记录正在播放曲目编号的索引

【2】从新定义该索引为上一首歌编号

【3】停止正在播放的歌曲

【4】退出子进程

【5】创建新的子进程播放歌曲

7.播放下一个函数

【1】首先传入记录正在播放曲目编号的索引

【2】从新定义该索引为下一首歌编号

【3】停止正在播放的歌曲

【4】退出子进程

【5】创建新的子进程播放歌曲

遇到的问题:上一个下一个只能使用一次

8.倍速函数

【1】打印倍速菜单

【2】输入选择

【3】将倍速命令写入管道

9.定位函数.

【1】打印定位的秒速

【2】输入后清空缓冲区

【3】sprintf将定位的时间转化为命令字符串

【4】将命令输入管道

10.播放方式函数

输入选择播放模式输入管道

四.主函数代码

1.打开管道:连接子父进程,需要设置为双向模式,不然父子进程创建为同一单向.

2.打印菜单进行循环控制

3.打印菜单并选择歌曲播放

【1】如果输入1时有父进程在运行,说明此时有子进程运行,歌曲在播放,停止子进程并使pid=-1;此时在创建父子进程,父进程等待子进程结束

【2】赋值给current_index索引,用于播放选择歌曲.current_index范围是0-playlist_size-1,所以在输入基础减1

遇到的问题:输入1播放歌后不打印一级菜单

4.功能实现

【1】通过父进程控制子进程

【2】case3需要结束播放,停止子进程结束,并且将pid=-1.这样如果没有播放会跳过功能,命令不会滞留在管道.

【3】如果没有播放音乐时使用停止命令会使命令滞留在管道里,在播放音乐会停止。

5.退出命令

要养成用完就关闭的习惯


http://www.kler.cn/a/564311.html

相关文章:

  • 基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets
  • [MD] AG stable
  • Kotlin 协程与Flow
  • C语言(15)-------------->一维数组
  • java每日精进 2.26 【Linux分盘挂载】
  • leetcode28.找出字符串中第一个匹配项的下标,KMP算法保姆级教程(带动图)
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.2.1索引、文档、分片、副本
  • 3 算法1-3 火星人
  • 监督学习——基于线性回归的波士顿房价预测:理论、实践与评估
  • 数据结构 1-3 栈
  • flink web ui未授权漏洞处理
  • C/C++ 中的链接属性
  • 【每天认识一个漏洞】url重定向
  • 毕业项目推荐:基于yolov8/yolo11的野生菌菇检测识别系统(python+卷积神经网络)
  • 【Stable Diffusion】AnimatedDiff--AI动画 插件使用技巧分享;文生视频、图生视频、AI生成视频工具;
  • 一种数据高效具身操作的原子技能库构建方法
  • Affinity Propagation 算法深度解析与实战指南
  • Android构建系统 - 04 编译产物
  • 前端系列之:设计模式
  • 【R语言】词云图