mplayer与命名管道的使用

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 文件的输入,接收来自该管道的控制命令,如 pausestop,这些命令用于控制 MPlayer 的播放状态。另一个进程 fifo_write 则向管道中写入这些命令。

mplayer命令各参数的介绍

关于上面这个命令,我们来分析其中的各个参数: mplayer 会通过 HTTP 协议从远程服务器下载并播放http://服务器ip/music/其他/以后的以后.mp3这个文件。

-slave是mplayer的一个模式,,表可以通过外部控制命令控制它的行为。进入这个模式后,你可以通过向 mplayer 发送控制命令(例如暂停、跳过、调整音量等)来操作它。

-quiet:该选项会抑制大部分的输出信息,只输出必要的信息,这对于让控制过程更简洁非常有用。

file=./cmd_fifo:这个参数指定了命名管道 cmd_fifo 作为控制文件,mplayer 会从这个管道读取命令。你可以通过写入一些特定的命令到这个管道来控制 mplayer 的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值