以下是视频播放器,音频播放器同理,大家先要了解线程进程和mplayer。
bofangqi.c
#include "bofangqi.h"
#include "event.h"
char *mp4[] = {"./1.mp4", "./2.mp4","./3.mp4"};
int i = 0;
// 把slave命令写入管道文件
int slave_write_cmd(int fifo_fd, char *cmd)
{
write(fifo_fd, cmd, strlen(cmd));
return 0;
}
// 视频播放功能
int show_video()
{
// lcd_draw_bmp(800, 480, 0, 0, "./1.bmp"); // 显示视频主界面
// 检测管道文件是否存在,不存在就创建
int ret = access("/tmp/fifo", 0664);
{
if (ret == 0)
{
printf("fifo has exist\n");
}
else if (ret == -1)
{
mkfifo("/tmp/fifo", 0777); // 创建管道文件
}
}
int fifo_fd = open("/tmp/fifo", O_RDWR); // 打开管道文件
if (fifo_fd == -1)
{
perror("open fifo failed");
return -1;
}
while (1)
{
pid_t pid = fork(); // 创建子进程
if (pid == 0)
{
execl("/usr/bin/mplayer", "mplayer", "-slave", "-quiet", "-input", "file=/tmp/fifo", "zoom", "-x", "800", "-y", "400", "geometry", "0:0", mp4[i], NULL);
if (ret == -1)
{
perror("execl error");
exit(1);
}
}
else if (pid > 0)
{
int mplayer_exit = 0;
while (!mplayer_exit)
{
int tp = get_event_button1();
// 视频播放
// 视频退出
if (tp == 8)
{
// 杀死当前子进程
mplayer_exit = 1;
system("killall -9 mplayer");
wait(NULL);
exit(1);
}
// 播放上一个视频
if (tp == 2)
{
i--;
if (i < 0)
i = 2;
mplayer_exit = 1;
system("killall -9 mplayer");
}
// 播放下一个视频
if (tp == 6)
{
// 杀死当前子进程
i++;
if (i > 2)
i = 0;
mplayer_exit = 1;
system("killall -9 mplayer");
}
// 视频快进
if (tp == 5)
{
slave_write_cmd(fifo_fd, "seek +5\n");
}
// 视频快退
if (tp == 3)
{
slave_write_cmd(fifo_fd, "seek -5\n");
}
// 音量增加
if (tp == 7)
{
slave_write_cmd(fifo_fd, "volume +200\n");
}
// 音量减少
if (tp == 1)
{
slave_write_cmd(fifo_fd, "volume -200\n");
}
// 暂停/继续
if (tp == 4)
{
write(fifo_fd, "pause\n", strlen("pause\n"));
}
}
}
}
return 0;;
}
bofangqi.h
#ifndef __BFQ_H_
#define __BFQ_H_
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>
#include<sys/wait.h>
int slave_write_cmd(int fifo_fd,char *cmd);
int show_video();
#endif
完整代码:
链接:https://pan.baidu.com/s/1Of0lNeFHDrGhL1Zru-EPDA?pwd=7n0z
提取码:7n0z