音频/视频播放器

 以下是视频播放器,音频播放器同理,大家先要了解线程进程和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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值