Linux项目设计:斗罗大陆宣传系统、基于Linux系统的媒体播放器、可播放音视频图片(基于gec6818项目设计)
哔哩哔哩项目视频链接:项目功能展示:一、开机显示登入界面,可密码管理员登入,也可以免密码普通用户登入二、登入后显示桌面,显示5个应用 ,分别是图片、视频、音乐、设置、文件管理三、音乐相册功能,播放图片同时播放背景音乐,可以左右滑动切换图片等操作四、视频播放功能,可以播放avi,mp4等格式视频五、音乐播放器,可以播放mp3格式的音频六、设置壁纸,可以根据喜好设置自己喜欢的壁纸七、文件管理,可以对文
哔哩哔哩项目视频链接:https://www.bilibili.com/video/BV1Hp4y1v7Pt
代码资料链接:https://download.csdn.net/download/mbs520/16668844
项目功能展示:
一、开机显示登入界面,可密码管理员登入,也可以免密码普通用户登入
二、登入后显示桌面,显示5个应用 ,分别是图片、视频、音乐、设置、文件管理
三、音乐相册功能,播放图片同时播放背景音乐,可以左右滑动切换图片等操作
四、视频播放功能,可以播放avi,mp4等格式视频
五、音乐播放器,可以播放mp3格式的音频
六、设置壁纸,可以根据喜好设置自己喜欢的壁纸
七、文件管理,可以对文件进行预览和删除
一、项目课题:
基于ARM平台的广告机系统设计
应用:电梯、公交车、公共场合。。。
项目基本功能:
1.广告图片切换(可以播放对应背景音乐)
2.广告视频播放
3.可以检索某个目录下所有的图片或多媒体数据(音乐,视频) readdir
显示出来,对其进行管理(加入播放列表,将其从列表移除)
(增删改查之类的多媒体操作,可以使用Secure CRT终端显示并输入)
项目拓展功能:(供参考,可自行决定更多功能)
1.使用触摸屏点击,实现多媒体数据管理(用户交互)
2.添加密码输入界面,实现用户管理机制
例如: root管理员权限:多媒体添加、删除、调整顺序、用户管理…
gec普通用户权限:多媒体浏览、调整顺序…
3.递归检索,可检索低层的所有子目录。(需要注意文件路径,绝对路径)
二、项目设计
1、图片准备
下载大量图片,用画图软件转换为.bmp图片方便显示
系统图片:
斗罗大陆广告图片:
二、视频准备
准备若干个斗罗视频,mp4,avi的都可以,avi的视频播放的更加流畅
三、音乐准备
下载几首斗罗主题曲,博主比较穷,找了半天找到一首不要钱的斗罗大陆,用中文不好传输我就把名字改成了英文。
三、代码编写
代码文件目录:
代码量比较多,所以用分文件管理,Makefile编译。
1、利用opendir函数打开文件目录检索文件
2、利用内核链表保存文件名方便管理
typedef struct kernel_list{
// 1.数据域,保存文件名
char buf[256];
// 2.指针域(小结构体)
struct list_head list;
}kl_st, *kl_pt;
3、利用.bmp .ebm图片代码驱动播放图片文件(其他)
//显示bmp
void show_bmp(char *bmp_patpname,int x_offset,int y_offset)
{
/*向lcd文件中写入像素点数据*/
//打开bmp图片
int bmp_fd = open(bmp_patpname, O_RDONLY);//完整路径 /mnt/hgfs/shear/day004/1.bmp
if(bmp_fd == -1)
{
perror("打开bmp图片失败");
exit(-1);
}
//读取图片头部信息
bmp_head myhead;
read(bmp_fd, &myhead, sizeof(bmp_head));
//申请缓冲区
char tmp_buf[myhead.width*myhead.height*3];
//清空缓冲区
bzero(tmp_buf,sizeof(tmp_buf));
//读取图片数据
read(bmp_fd, tmp_buf, sizeof(tmp_buf));
//关闭图片文件
close(bmp_fd);
//将数据存入映射内存
//将数据存入映射内存
int i,j;
for(i=0; i<myhead.height; i++)
for(j=0; j<myhead.width; j++)
{
*(FB+((i+y_offset)*800+j+x_offset)*4) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3];
*(FB+((i+y_offset)*800+j+x_offset)*4+1) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3+1];
*(FB+((i+y_offset)*800+j+x_offset)*4+2) = tmp_buf[((myhead.height-1-i)*myhead.width+j)*3+2];
*(FB+((i+y_offset)*800+j+x_offset)*4+3) = 0x00<<24;
}
}
4、用mplayer软件播放视频与音乐,相关软件文件已经上传到资料链接
mplayer使用方法:
首先把mplayer上传到开发板的 /usr/bin 文件目录下 使用一下mplayer 命令,看一下能否使用
命令使用:
1)、播放视频:播放起始位置(240,70),显示区域大小400*240,&后台播放
system("mplayer -geometry 240:70 -zoom -x 400 -y 240 ./mp4/dl.mp4 &");
2)、播放音乐:后台播放dl.mp3
system("mplayer ./dl.mp3 &");
代码展示
由于代码过长,这里只显示部分代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include "lcd.h"
#include "ts.h"
#include "kl_list.h"
#include "list.h"
#include "font.h"
//密码
int pswd_cheak(char *psword);
//显示文件名
void LCD_show_filename(int x,int y,kl_pt head);
//应用界面触摸选择
int app_choose(void);
//文件选择
int file_choose(void);
//图片
void photo(void);
//视频
void video(void);
//音乐
void music(void);
//设置
void settings(void);
//移除文件
void file_del(char *phname,kl_pt head);
//文件触摸选项
int file_choose(void);
//扫描tailname文件到phname
void file_scan(char *phname,char *tailname);
//移除文件
void file_del(char *phname,kl_pt head);
//文件管理
void file_manage(const char *path_name);
//文件管理器触摸选项
int file_mag_choose(void);
kl_pt all_head;//递归链
char walpar[64]="bz1.bmp";//壁纸
int root=0;//0:游客 1:root用户
//主函数
int main(int argc, const char *argv[])
{
all_head=kl_list_init();//初始化递归链
if(argc != 2)
{
perror("input error\n");
return 0;
}
char psword[]="1234";//设置密码
int x=0,y=0;
int app_val;
open_lcd();//初始化lCd
open_ts();//初始化触摸屏
Init_Font();// 初始化字库
show_ebm("./ebm/14.ebm");//显示密码界面
root = pswd_cheak(psword);//获取登入权限
while(1)
{
show_bmp(walpar,0,0);//显示壁纸 show_bmp("./bmp/15.bmp",110,190);//显示应用图标
show_bmp("./bmp/16.bmp",270,190);
show_bmp("./bmp/17.bmp",430,190);
show_bmp("./bmp/18.bmp",590,190);
show_bmp("./bmp/file.bmp",590,70);
while(1)
{
app_val=app_choose();//获取触摸屏信息
if(app_val)
{
switch(app_val)
{
case 1:photo();break;//应用
case 2:video();break;
case 3:music();break;
case 4:settings();break;
case 5:file_manage(".");//递归遍历
}
break;
}
}
}
close_lcd();//关闭文件
close_ts();
//关闭字库
UnInit_Font();
return 0;
}
资料说明:
1、拷贝整个目录到开发板(tftp nfs u盘…)
2、运行a.out
./a.out ./
更多推荐
所有评论(0)