mplayer的介绍
MPlayer 是一款开源的多媒体播放器,支持广泛的音视频格式,常用于播放音频、视频文件及流媒体。其 不仅能播放本地音视频文件,还可以播放通过 HTTP、RTSP、MMS 等协议传输的流媒体文件。例如它支持播放包括 YouTube、Twitch 等平台的在线视频。 许多嵌入式设备都使用 MPlayer 作为多媒体播放器。
其支持 支持大多数主流操作系统,包括 Linux、Windows、macOS 。
它支持几乎所有常见的音视频格式,包括但不限于:
音频:MP3、OGG、WAV....
视频:AVI、MP4、MKV、FLV.....
在linux上安装mplayer: apt install mplayer
然后就可以使用mplayer播放音视频。例如:
mplayer http://服务器ip/music/其他/以后的以后.mp3 -slave -quiet
管道的介绍
管道分为有名管道和无名管道。其作用有:
1.允许不同进程间进行数据传递。一个进程写入管道,另一个进程从管道读取数据。即进程之间可以通过管道进行同步,避免了使用共享内存等复杂的机制。
2.注意管道是单向的,即数据只能在一个方向上流动。 数据从管道的写入端流向读取端。由此可见这种结构适合于控制流或任务传递的场景。
命名管道的使用
接下来我们编写以下的程序。 fifo_write.c
它的逻辑大概是:在主函数中打开命名管道 cmd_fifo ,将在控制台中输入的控制命令写入这个管道,从而其他程序(如使用 mplayer 的程序)可以读取管道中的数据并执行相应的操作 。
int fd = open("cmd_fifo", O_WRONLY); 使用 open() 系统调用打开一个名为 cmd_fifo 的命名管道。参数 O_WRONLY 表示以只写模式打开文件。若打开成功,返回fd为其文件描述符。 再使用 scanf("%s", buf); 读取一个单词。注意要在字符串的末尾添加一个换行符 \n buf[strlen(buf)] = '\n';从而让管道接收方能够区分不同的命令或者输入行。再使用write写入管道中。
fifo_write.c
int main() {
int fd = open("cmd_fifo", O_WRONLY); // 打开命名管道 cmd_fifo
if (fd == -1) {
perror("open"); // 如果打开失败,打印错误信息
return -1; // 返回错误
}
char buf[128] = {0}; // 定义一个缓冲区,存储用户输入
scanf("%s", buf); // 从标准输入读取一个字符串到 buf
//strlen(buf):数据的长度。
buf[strlen(buf)] = '\n'; // 将 buf 字符串的末尾添加换行符
if (write(fd, buf, strlen(buf)) == -1) { // 将数据写入命名管道
perror("write"); // 如果写入失败,打印错误信息
return -1; // 返回错误
}
close(fd); // 关闭文件描述符
return 0; // 正常结束程序
}
接着编译一下:gcc fifo_write.c -o fifo_write
再执行mkfifo cmd_fifo( 作用是创建一个命名管道 )
然后执行下面的代码:
mplayer http://服务器ip/music/其他/以后的以后.mp3 -slave -quiet file=./cmd_fifo
再到另一个终端中运行 fifo_write 即./ fifo_write
然后可输入命令:pause,stop控制mplayer的执行。(开始播放,暂停,继续,音量调节....)
命名管道的介绍
在上面代码中,mplayer
使用命令行参数 file=./cmd_fifo
来监听 cmd_fifo
文件的输入,接收来自该管道的控制命令,如 pause
或 stop
,这些命令用于控制 MPlayer 的播放状态。另一个进程 fifo_write
则向管道中写入这些命令。
mplayer命令各参数的介绍
关于上面这个命令,我们来分析其中的各个参数: mplayer
会通过 HTTP 协议从远程服务器下载并播放http://服务器ip/music/其他/以后的以后.mp3这个文件。
-slave是mplayer的一个模式,,表可以通过外部控制命令控制它的行为。进入这个模式后,你可以通过向 mplayer
发送控制命令(例如暂停、跳过、调整音量等)来操作它。
-quiet:该选项会抑制大部分的输出信息,只输出必要的信息,这对于让控制过程更简洁非常有用。
file=./cmd_fifo:这个参数指定了命名管道 cmd_fifo
作为控制文件,mplayer
会从这个管道读取命令。你可以通过写入一些特定的命令到这个管道来控制 mplayer
的行为。