mplayer播放器基本使用

很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 :
https://www.yuque.com/alive-m4b9n

mplayer 介绍

MPlayer - The Movie Player官方网站

ubuntu 安装 mplayer

sudo apt-get update
sudo apt-get install mplayer

注:上述的 wsl2 也可以使用

arm 平台开发板移植

1️⃣下载 mplayer 官放源码

2️⃣交叉编译源码 (移植)

嵌入式Mplayer的移植、使用_gec6818开发板mplayer-CSDN博客

根据上述移植教程即可成功交叉编译

3️⃣👍配置
下载 mplayer 播放器到开发板的bin 目录

4️⃣设置权限 并测试

chmod 777 /bin/mplayer

mplayer xxx.avi

已交叉编译好的源码,下载开箱即食
mplayer.zip

mplayer 基本使用

播放本地视频

mplayer video.mp4

播放网络视频

mplayer https://example.com/video.mp4

播放音频

mplayer song.mp3

mplayer 视频控制

指定开始播放的位置

mplayer -geometry 100:100 video.mp4
  • 100:100 表示左上角坐标 (X, Y)

缩放视频窗口大小

mplayer -zoom -x 800 -y 480 video.mp4
  • 强制缩放到 800*480分辨率

调整亮度、对比度、饱和度

mplayer -vf eq2=1.2:1.1:0.9 video.mp4
  • eq2=亮度:对比度:饱和度

mplayer 音频控制

调整音量

mplayer -volume 50 video.mp4
  • 0-100 之间

选择音轨

mplayer -aid 2 video.mp4
  • -aid 选择第 2 个音轨

调整音频延迟

mplayer -delay -0.5 video.mp4
  • -0.5秒(提前)
  • 0.5 秒(延后)

👍mplayer 常用播放格式

mplayer -slave -quiet  -input  file=/pipe   -geometry  0:0 -zoom -x 400 -y 400  mn.avi
  • -input file=/pipe 指定控制命令的管道文件
  • slave : 进入从模式状态 ,可以使用命令控制
  • quiet : 去除杂项信息
  • geometry 0:0 : 设置开始的播放位置
  • zoom -x 400 -y 400 : 设置播放窗体的大小 mn.avi :需要播放的视频或音频

👍mplayer 的 -slave模式

-slave` 选项是 MPlayer 的从属模式(slave mode),它允许外部程序或脚本通过
标准输入(stdin)
发送指令来控制 MPlayer,而不是使用键盘或鼠标。

核心作用:

1️⃣ 允许 MPlayer接受命令(如播放、暂停、调整音量)。
2️⃣ 支持 管道(FIFO)shell 脚本、Python 代码等方式进行远程控制。
3️⃣ 可以获取 MPlayer 播放状态(如当前播放时间、音量、播放的文件名等)。
4️⃣ 适用于嵌入式系统、远程控制、媒体播放器自动化等场景

-slave 模式的基本用法

mplayer -slave -quiet video.mp4
  • -slave启用从属模式,MPlayer 不会从键盘获取交互输入,而是 等待外部命令
  • -quiet 减少控制台输出,避免干扰。

方式 1:从控制台输入控制命令(测试使用)

常用的命令

loadfile string //参数string 为 歌曲名字。

volume 100 1 //设置音量 中间的为音量的大小。

mute 1/0 //静音开关

pause //暂停/取消暂停

get_time_length //返回值是播放文件的长度,以秒为单位。

seek value //向前查找到文件的位置播放 参数value为秒数。

get_percent_pos /返回文件的百分比(0–100)

get_time_pos //打印出在文件的当前位置用秒表示,采用浮点数

volume [abs] //增大/减小音量

quit [value] //退出MPlayer。可选的整数[value]的值作为返回代码 为mplayer的进程(默认值:0)。

get_file_name //打印出当前文件名

get_meta_album //打印出当前文件的’专辑’的元数据

get_meta_artist //打印出当前文件的’艺术家’的元数据

get_meta_comment //打印出当前文件的’评论’的元数据

get_meta_genre //打印出当前文件的’流派’的元数据

get_meta_title //打印出当前文件的’标题’的元数据

get_meta_year //打印出当前文件的’年份’的元数据

💡方法 2:从有名管道(fifo)输入控制命令(应用编程中使用)

  • 主线程: 监听用户输入(暂停、快进、音量调节等)。
  • 子线程: 通过 FIFO 发送指令给 MPlayer 进行控制。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <signal.h>

#define FIFO_PATH "/home/li/pipe"

void *mplayer_control(void *arg);
void send_command(const char *command);
int is_mplayer_running = 1;

int main() {
    // 忽略 SIGPIPE 防止 MPlayer 崩溃
    signal(SIGPIPE, SIG_IGN);

    // 确保 FIFO 存在
    if (access(FIFO_PATH, F_OK) == -1) {
        if (mkfifo(FIFO_PATH, 0666) == -1) {
            perror("创建 FIFO 失败");
            exit(EXIT_FAILURE);
        }
    }

    // 启动 MPlayer,使用 X11 输出,禁用 LIRC
    FILE *fp = popen("mplayer -vo x11 -nolirc -slave -quiet -input file=/home/li/pipe -geometry 0:0 -zoom -x 400 -y 400 dream.avi", "r");
    if (!fp) {
        perror("MPlayer 启动失败");
        exit(EXIT_FAILURE);
    }
    sleep(1); // 等待 MPlayer 启动

    pthread_t thread_id;
    if (pthread_create(&thread_id, NULL, mplayer_control, NULL) != 0) {
        perror("线程创建失败");
        exit(EXIT_FAILURE);
    }

    // 监听 MPlayer 退出状态
    int status = pclose(fp);
    if (WIFEXITED(status)) {
        printf("MPlayer 进程已退出\n");
        is_mplayer_running = 0;
        pthread_cancel(thread_id); // 终止线程
    }

    pthread_join(thread_id, NULL);
    return 0;
}

// 发送命令到 MPlayer
void send_command(const char *command) {
    int fifo_fd = open(FIFO_PATH, O_WRONLY | O_NONBLOCK);
    if (fifo_fd == -1) {
        perror("FIFO 打开失败,MPlayer 可能已经退出");
        return;
    }
    write(fifo_fd, command, strlen(command));
    write(fifo_fd, "\n", 1);
    close(fifo_fd);
}

// 线程函数:监听用户输入并发送命令
void *mplayer_control(void *arg) {
    char input[100];

    while (is_mplayer_running) {
        printf("\n请输入命令(play/pause/seek+/seek-/vol+/vol-/quit):");
        scanf("%s", input);

        if (strcmp(input, "pause") == 0) {
            send_command("pause");
        } else if (strcmp(input, "seek+") == 0) {
            send_command("seek 10 0");
        } else if (strcmp(input, "seek-") == 0) {
            send_command("seek -10 0");
        } else if (strcmp(input, "vol+") == 0) {
            send_command("volume 5 0");
        } else if (strcmp(input, "vol-") == 0) {
            send_command("volume -5 0");
        } else if (strcmp(input, "quit") == 0) {
            send_command("quit");
            break;
        } else {
            printf("未知命令,请输入 play/pause/seek+/seek-/vol+/vol-/quit\n");
        }
    }
    return NULL;
}

资源占用率极低,支持格式极广、输出设备支持极多,同时更为诱人的是它可以让VCD 上损坏的MPEG文件播放更流畅! 一、支持格式多 MPlayer 支持相当多的媒体格式,无论在音频播放还是在视频播放方面,可以说它支持的格式是相当全面的,完全能够胜于有名的”豪杰超级解霸”。 视频格式支持:MPEG、AVI、ASF 与WMV、QuickTime与 OGG/OGM、SDP、PVA、GIF。 音频格式支持:MP3、WAV、OGG/OGM 文件(Vorbis)、WMA与 ASF、MP4、CD音频、XMMS。 由于它支持播放音频文件和视频文件比较多,这样一来用户完全只用选择一个播放器即可。笔者曾在使用Windows Media Player时,听音频文件一切正常,但再用它播放一些视频文件时,它却弹出不可识别的格式,使我不得不再安装其它的视频播放器。所以说有了它就不用再安装其它的媒体播放器啦! 二、支持输出设备广 MPlayer的另一个大的特色是支持广泛的输出设备。它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、DirectFB下工作,而且你也能使用 GGI、SDL(由此可以使用它们支持的各种驱动模式)和一些低级的硬件相关的驱动模式 (比如 Matrox、3Dfx 和RADEON、Mach64、Permedia3)!它们大多数支持软件或者硬件缩放,因此你能在全屏下观赏电影。同时,MPlayer 还支持通过硬件MPEG解码卡显示,诸如DVB 和DXR3与Hollywood+。支持匈牙利语、英语、捷克语、西里尔语等等,韩语字体的清晰放大并且反锯齿的字幕,可以说它在这一方面堪称一绝。 三、让损坏的MPEG文件流畅播放 这一特色应用,让笔者更是亲有体会,笔者有一张年代已久的破损VCD光碟,在其它播放器上播放效果极差,但是使用MPlayer播放器,它能够稳如泰山地播放被破坏的 MPEG 文件。不仅能播放VCD中破损的MPEG文件,同时还能播放连 Windows Media Player都打不开的已被损坏的AVI文件。甚至,没有索引部分的AVI文件都可播放,你能暂时重建它们的索引或者用MEncoder永久重建,使你能够在影片中搜索!稳定和质量都比较好,而且它的播放速度也很流畅。 总之:想在低配备计算机上流畅播放XviD/DivX不是梦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值