0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux驱动开发_mplayer播放器开发

DS小龙哥-嵌入式技术 2022-09-17 15:50 次阅读

【摘要】 介绍mplayer播放器的安装、使用、以及两个模式的使用;然后介绍广告机项目的要求,实现办法。

USB wifi (360) : 如何从官网下载源码进行代码移植、安装相关无线工具、让嵌入式设备支持WIFI。

任务1: 安装mplayer播放器并学习使用方法

图片格式、音乐文件(.mp3)、视频文件(mp4)…….

学习文件编程: bmp图片格式、JPG(jpeglib)。

视频编码解码: ffmpeg库。

Mplayer播放器: 源码开源,可以下载、可以更改….。 (X11)

​安装libmad库方法

1.​在linux系统目录下创建libmad文件夹: mkdir /work/libmad -p

2.​将libmad源码解压到 /work/libmad目录下:

[root@wbyq libmad-0.15.1b]# tar xvf /mnt/hgfs/linux-share-dir/libmad-0.15.1b.tar.gz

3.​配置源码,生成Makefile文件

[root@wbyq libmad-0.15.1b]# ./configure CC=arm-linux-gcc --enable-fpm=arm --host=arm-linux --disable-debugging --prefix=$PWD/_install

4.​将Makefile文件第129行的-fforce-mem选项去掉

5.​编译安装

[root@wbyq libmad-0.15.1b]# make && make install

6.​将生成的.so文件拷贝到开发板的lib目录下。

​安装mplayer播放器

1.​在/work目录下创建一个mplayer文件夹

2.​将源码解压到mplayer目录下

3.​配置mplayer源码生成Makefile文件

./configure --prefix=$PWD/_install --cc=arm-linux-gcc --host-cc=gcc --target=arm-linux --enable-cross-compile --enable-mad --disable-gui --disable-menu --disable-x11 --yasm="" --extra-cflags=-I/work/libmad/libmad-0.15.1b/_install/include/ --extra-ldflags=-L/work/libmad/libmad-0.15.1b/_install/lib/

4.​编译源码: make

编译成功之后会在当前目录下生成mplayer可执行文件,将该可执行文件拷贝到开发板根文件系统的/bin目录下即可。

5.​播放测试

[root@tiny4412 ]#mplayer -zoom -x 800 -y 480 /work/video_file/Video_2018-12-11.wmv

​Mplayer播放器使用方式:

1.​主模式,运行mplayer播放器,播放器将占用当前的终端,在主模式下mplayer程序不能后台运行。

默认从键盘上(表示输入)获取输入信号对播放器进行控制。

2.​从模式: 将mplayer播放器当做子进程启动,父进程可以通过管道与子进程之间进行通信

进程间通信: 无名管道/命名管道(FIFO)、消息队列、内存映射(mmap)、内存共享、信号。

创建子进程的函数: fork函数。

​声卡驱动使用

poYBAGMlOkCAIYeaAABno-3CUrE385.png

将该压缩包拷贝到开发板根文件系统目录下,解码,运行声卡启动脚本。

​在开发板上解压: [root@tiny4412 ]#tar xvf /mnt/Tiny4412_SoundCard_wm8960.tar -C /work/

pYYBAGMlOkCAYhI7AAEPRQG1JvE182.pngpoYBAGMlOkGAHWq8AAC1jseZF64269.png

将耳机插在开发板的音频输出口上即可听到声音了。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/*
获取标准输入的数据、写给FIFO文件
*/
void *pthread_func(void *argv)
{
	int fd=open("/mplayer_fifo",2);
	if(fd<0)
	{
		printf("FIFO文件打开失败!\n");
		pthread_exit(NULL); //结束当前线程
	}
	char buff[100];
	int len;
	while(1)
	{
		printf("请输入命令:");
		fflush(stdin);  	   //刷新缓冲区
		fgets(buff,100,stdin); //从键盘上获取数据  get_percent_pos  get_file_name
		len=strlen(buff); 	   // get_file_name [0~12] [13]='\n'
		write(fd,buff,len);    // get_file_name '\n'
		memset(buff,0,100);
	}
}

int main(int argc,char **argv)
{
	int pid;
	
	/*1. 创建无名管道*/
	int fds[2];
	pipe(fds);
	
	/*2. 创建子进程*/
	pid=fork();
	
	/*子进程代码: mplayer播放器*/
	if(pid==0)
	{
		/*将子进程的标准输出重定向到管道写端*/
		dup2(fds[1],1);
		
		/*启动子进程*/
		execlp("mplayer","mplayer","-zoom","-x","800","-y","480","-slave","-quiet","-input","file=/mplayer_fifo","/work/video_file/Video_2018-12-11.wmv",NULL);
	}
	else /*父进程*/
	{
		char buff[100];
		int cnt=0;
		
		/*创建新的线程: 从键盘上获取输入的数据,写给播放器的FIFO文件*/
		pthread_t threadID;
		pthread_create(&threadID,NULL,pthread_func,NULL);
		pthread_detach(threadID); //设置分离属性
		
		while(1)
		{
			/*从管道的读端读取数据: 读取就是mplayer播放器输出的数据*/
			cnt=read(fds[0],buff,100);
			buff[cnt]='\0';
			printf("播放器输出的值=%s\n",buff);
		}
	}
	return 0;
}

任务2:制作视频广告机

广告机应用场景: 公交站台、地铁车厢、银行前台大厅、高速公路、公园….

1.​有些广告机只有视频播放,没有声音。

2.​广告机都支持网络视频文件更新---->文件更新使用现成的服务器: FTP服务器、NFS服务器。

(1)​如何判断服务器上那些文件需要下载到本地? 通过shell脚本代码或者使用C语言

(2)​更新的时间一般是固定的: 20:00 23:00 …… 通过时间函数判断时间是否到达。

(3)​在视频问好更新的时候,视频文件需要停止播放,可以在屏幕上显示提示(正在更新…..)。

3.​广告机需要支持自动播放,播放一个自动切换下一个、循环播放。

调用读目录、循环遍历目录、得到视频文件、mplayer播放器需要使用子进程方式启动。

广告机: 音量调整、选择视频播放…….都不是广告机的功能---是视频播放器的功能。

pYYBAGMlOkGANZoJAABwGfwDIe4315.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 播放器
    +关注

    关注

    5

    文章

    382

    浏览量

    36745
  • Linux
    +关注

    关注

    87

    文章

    10942

    浏览量

    206540
  • 广告机
    +关注

    关注

    0

    文章

    111

    浏览量

    9651
  • mplayer
    +关注

    关注

    0

    文章

    6

    浏览量

    2412
收藏 人收藏

    评论

    相关推荐

    鸿蒙开发-视频播放器方案

    使用on(\'stateChange\')方法监听状态变化。如果应用在视频播放器处于错误状态时执行操作,系统可能会抛出异常或生成其他未定义的行为。 图1 播放状态变化示意图 当播放处于prepared
    发表于 02-19 17:20

    基于FPGA的音频播放器设计

    主要是音频播放器设计不太会,想问各位大神怎么样可以实现用verilog语言实现音频播放,通过串口输出
    发表于 01-03 13:54

    基于Linux下mp3播放器的研究实现

    电子发烧友网站提供《基于Linux下mp3播放器的研究实现.doc》资料免费下载
    发表于 10-25 10:13 0次下载
    基于<b class='flag-5'>Linux</b>下mp3<b class='flag-5'>播放器</b>的研究实现

    全志R128基础组件开发指南—RTOS多媒体解码

    介绍 FreeRTOS 下如何使用 rtplayer 的接口来开发播放器应用程序,方便播放器开发人员快速正确地开发,以及
    的头像 发表于 10-10 16:28 1684次阅读
    全志R128基础组件<b class='flag-5'>开发</b>指南—RTOS多媒体解码

    【悟空派H3开发板免费体验】03 体验音乐播放

    armbian-config,按照顺序依次选择 System -> Hardware -> analog-codec 最后是下载神器播放器mplayer sudo apt install
    发表于 10-06 20:17

    基于RTT-LVGL的音乐播放器设计案例

    此次项目主要是基于瑞萨HMI board 开发板实现音乐播放器功能,主要可以实现sd卡wav 文件扫描,音乐播放,音量调节、上一曲、下一曲音乐播放
    的头像 发表于 09-18 11:07 1110次阅读
    基于RTT-LVGL的音乐<b class='flag-5'>播放器</b>设计案例

    【FireBeetle 2 ESP32-S3开发板测评】MIDI音乐播放器

    本片我们使用PWM输出不同频率占空比的信号来驱动喇叭,实现MIDI音乐播放器的Demo。
    的头像 发表于 07-23 09:01 2168次阅读
    【FireBeetle 2 ESP32-S3<b class='flag-5'>开发</b>板测评】MIDI音乐<b class='flag-5'>播放器</b>

    【FireBeetle 2 ESP32-S3开发板测评】MIDI音乐播放器

    播放器
    jf_1137202360
    发布于 :2023年07月22日 23:30:44

    QT音乐播放器MusicPlayer#QT界面

    播放器
    暴风雨中的白杨
    发布于 :2023年06月13日 10:29:12

    在(Linux)ubuntu下通过GTK调用libvlc开发视频播放器

    本项目实现了一个基于GTK和libvlc的视频播放器。使用GTK创建GUI界面,使用libvlc播放视频。用户可以通过选择视频文件,然后启动播放器来观看视频。
    的头像 发表于 06-01 15:42 1342次阅读
    在(<b class='flag-5'>Linux</b>)ubuntu下通过GTK调用libvlc<b class='flag-5'>开发</b>视频<b class='flag-5'>播放器</b>

    MP3播放器,音质还是非常好的。#音乐播放器 #听音乐 #抖音小助手

    播放器
    学习电子知识
    发布于 :2023年05月31日 20:48:35

    Exoplayer 开发播放器,硬解码4K 60FPS 265编码,视频掉帧

    Exoplayer 开发播放器,硬解码4K 60FPS 265编码,视频掉帧 用安卓自带的播放其,不会掉帧 开发调用的omx标准库。有没有各位遇到过类似的问题,要怎么解决
    发表于 05-25 14:38

    DVD播放器骚扰功率整改

    摘要 : 此DVD播放器需要做CCC认证,需要满足GB13837-2012《声音和电视广播接收机及有关设备 无线电骚扰特性 限值和测量方法》国家标准。 关键词:DVD播放器;CCC认证;骚扰功率整改
    发表于 05-12 09:24

    如何通过串行驱动带有wemos的迷你DF播放器

    我想通过串行驱动带有 wemos 的迷你 DF 播放器。df 播放器使用十六进制数据序列来执行各种操作。例如,要播放歌曲 1,我将发送 7E FF 06 03 00 00 01 FE
    发表于 05-10 06:22

    如何驱动Linux开发板LED灯

    Linux下的任何外设驱动,最终都是要配置相应的硬件寄存器。前面的文章中介绍了新旧字符设备的驱动开发框架,也介绍了IMX6ULL处理器GPIO的工作原理及配置方法,本篇我们将实际操作一
    的头像 发表于 04-14 11:41 637次阅读
    如何<b class='flag-5'>驱动</b><b class='flag-5'>Linux</b><b class='flag-5'>开发</b>板LED灯