2020-02-07 10:38:45 stars_moon1024 阅读数 679

搭建家庭影院系统,适用于网页在线播放,APP,TV盒子

环境:Centos7+docker+jellyfin

效果:

 

 一、安装软件

1、官网直达链接,选择下载,从Docker安装稳定版,按官网提示输入命令

2、前2个命令不变,第三个命令要注意,请替换“资源磁盘目录为自己的目录”,其他不用更改

docker run -d -v /srv/jellyfin/config:/config -v /srv/jellyfin/cache:/cache -v /资源磁盘目录:/media --net=host jellyfin/jellyfin:latest 

3、增加media文件

 在根目录创建文件,如果有就更改用户组为jellyfin,此步很重要,不更改权限,添加不了媒体库

mkdir /media

chown jellyfin:jellyfin /media

chmod 777 /media

 二、访问jellyfin

防火墙允许8096端口访问

浏览器输入http://IP地址:8096,例如http://192.168.1.2:8096

进入后按提示完成(这里的访问和基础设置网络上有,不再叙述),然后添加媒体库,找到/media,这里会映射到你的磁盘资源目录

 然后等待扫描完成,会在首页展示所有电影。

 

2017-08-09 11:25:48 happypant 阅读数 346

linux的软件安装

软件名称识别

[abrt-addon-ccpp]-[2.1.11-19].[el7].[x86_64].rpm ##rpm结尾的适用与redhat操作系统

如何安装软件

1.rpm安装

rpm -ivh name.rpm ##安装 ,-v显示过程,-h指定加密方式为hash
-e name ##卸载
-ql name ##查询软件生成文件
-qlp name.rpm ##查询软件安装后会生成什么文件
-qa ##查询系统中安装的所有软件名称
-qa |grep name ##查询软件是否安装
-q name ##。。。。
-qp name.rpm ##查询软件安装包安装后的名字
-qf filename ##查看filename属于那个安装包
-ivh name.rpm –force ##强制安装
-qi name ##查看软件信息
-Kv name.rpm ##检测软件包是否被篡改
-qp name.rpm –scripts ##检测软件在安装或卸载过程中执行的动作

2.yum安装

上层软件管理工具,最重要的功能是可以解决软件的倚赖关系
yum能够投入使用的前提是必须要有yum源,以及配置源的指向文件

yum命令

yum install softwarename ##安装
repolist ##列出设定yum源信息
remove softwarename ##卸载
list softwarename ##查看软件源中是否有次软件
list all ##列出所有软件名称
list installd ##列出已经安装的软件名称
list available ##列出可以用yum安装的软件名称
clean all ##清空yum缓存
search softwareinfo ##根据软件信息搜索软件名字
whatprovides filename ##在yum源中查找包含filename文件的软件包
update ##更新软件
history ##查看系统软件改变历史
reinstall softwarename ##重新安装
info softwarename ##查看软件信息
groups list ##查看软件组信息
groups info softwaregroup ##查看软件组内包含的软件
groups install softwaregroup ##安装组件
groups remove softwaregroup ##卸载组件

从网络上下本机系统版本匹配的iso镜像文件
rhel-server-7.1-x86_64-dvd.iso

yum clean all ##清空yum缓存识别新配置

vim /etc/yum.repos.d/xxxx.repo ##仓库指向文件位置
[xxxx] ##自定义软件仓库名称
name=xxxx ##自定义软件仓库描述
baseurl=ftp://|http://|file:// ##仓库位置
gpgcheck=0 ##不检测gpgkey
##gpgkey表示软件的出品logo

1.本地配置
把rhel-server-7.1-x86_64-dvd.iso挂在到/mnt以便访问镜像中的文件
mount rhel-server-7.1-x86_64-dvd.iso /mnt

配置本机yum源指向

vim /etc/yum.repos.d/yum.repo###必须以repo为后缀表所yum源配置文件

[Server]
 name=rhel7.1
 baseurl=file:///rpm          ###file://为从本地获取,/rpm根下的rpm
 gpgcheck=0

实验截图
安装资源共享服务(以安装httpd为例)
yum install httpd -y###安装httpd,-y表示确认安装
systemctl stop firewalld
systemctl disable firewalld ###关闭防火墙
systemctl start httpd
systemctl enable httpd ###开启httpd
表示安装htpd时所需要用到的依赖文件

2.运用httpd网络配置yum源以及安装
将yum仓库挂载到http中
mkdir /var/www/html/rhel7.1
umount /mnt
mount rhel-server-7.1-x86_64-dvd.iso /var/www/html/rhel7.1

配置yum源
vim /etc/yum.repo.d/yum.repo

[Server]
name=rhel7.1
baseurl=http://172.25.18.10/rel7.1
gpgcheck=0
实验截图
测试
在浏览器中输入:http://172.25.18.10/rhel7.1
可以看到镜像中的内容
实验截图
3.开机自动挂在iso(mount是暂时性的挂载)
vim /etc/rc.d/rc.local

mount rhel-server-7.1-x86_64-dvd.iso /var/www/html/rhel7.1

chmod +x /etc/rc.d/rc.local ###给予文件执行的权力

4.第三方软件仓库的搭建
把所有的rpm软件包放到一个目录中,这个目录中只能存在rpm文件
createrepo -v /rpm存放目录
vim /etc/yum.repos.d/xxx.repo

[desktop]
name=software
baseurl=file:///rpm
gpgcheck=0

实验截图

2017-11-16 15:24:51 horotororensu 阅读数 1382

  参考文章:http://blog.csdn.net/kof98765/article/details/18264859

  SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。
  基于SDL库目前已提供丰富的函数库,非常方便开发者使用。常用的如下:
    1、SDL_Image:提供显示多种格式的图像显示接口,它支持bmp,png,jpeg,gif,tiff等.
    2、SDL_Draw:提供画点线圆等几何图形的接口.
    3、SDL_ttf:提供显示TTF文字的接口.
    4、SDL_mixer:提供播放各种声音文件的接口.
    5、SDL_net:提供网络通信的接口.

1、SDL的移植

  下载地址 http://www.libsdl.org/download-1.2.php 。使用版本:SDL-1.2.15.tar.gz。

1.1 配置
$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-pulseaudio --disable-video-nanox \
-disable-video-qtopia --disable-static --enable-shared --disable-video-photon --disable-video-ggi \
--disable-video-svga --disable-video-aalib --disable-video-dummy --disable-video-dga --disable-arts \
--disable-esd --disable-alsa --disable-video-x11 --disable-nasm --disable-joystick --disable-input-tslib \
-enable-video-fbcon --host=arm-linux
1.2 编译
$ make
1.3 安装
$ make install

  

2、libjpeg的移植

  libjpeg是一个用c语言编写支持jpeg解码、编码的库。下载地址:http://linux.softpedia.com/get/Programming/Libraries/libjpeg-160.shtml 。使用版本:jpegsrc.v9.tar.gz。

2.1 配置
$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-static --enable-shared \
--host=arm-linux cc=arm-linux-gcc
2.2 编译
$ make
2.3 安装
$ make install

  

3、libconv的移植

  libiconv库为需要做转换的程序,实现了一个字符编码到另一个字符编码的转换。下载地址 http://www.gnu.org/software/libiconv/#downloading 。使用版本:libiconv-1.9.2.tar.gz。

3.1 配置
$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-static --enable-shared \
--with-libiconv-prefix=/home/horo/arm/software/sdl_arm \
--host=arm-linux cc=arm-linux-gcc
3.2 编译
$ make
3.3 安装
$ make install

  

4、libpng的移植

  libpng是多种应用程序所使用的解析PNG图形格式的函数库。下载地址 http://www.libpng.org/pub/png/libpng.html 。使用版本:libpng-1.6.34.tar.xz。

4.1 配置
$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-static --enable-shared \
--host=arm-linux cc=arm-linux-gcc
4.2 编译
$ make
4.3 安装
$ make install

  

5、SDL_image的移植

  SDL_image是用于处理图形文件的开源函数库,依赖SDL、libpng、libjpeg。下载地址 http://www.libsdl.org/projects/SDL_image/ 。使用版本:SDL_image-1.2.12.tar.gz。

5.1 配置
$ ./configure --prefix=/home/horo/arm/software/sdl_arm --host=arm-linux --disable-static \
--enable-shared --with-sdl-prefix=/home/horo/arm/software/sdl_arm \
CPPFLAGS=-I/home/horo/arm/software/sdl_arm/include/SDL  \
LDFLAGS=-L/home/horo/arm/software/sdl_arm/lib
5.2 编译
$ make
5.3 安装
$ make install

  

6、SDL_gfx的移植

  图形库,也就是传统的一些图形操作,几个基本的功能包括了缩放,旋转,几何图形绘制,FPS控制。依赖SDL。下载地址 http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.22.tar.gz 。使用版本:SDL_gfx-2.0.22.tar.gz

6.1 配置
$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-static --enable-shared \
--with-sdl-prefix=/home/horo/arm/software/sdl_arm \
CPPFLAGS=-I/home/horo/arm/software/sdl_arm/include/SDL  \
LDFLAGS=-L/home/horo/arm/software/sdl_arm/lib --host=arm-linux  --enable-mmx=no
6.2 编译
$ make
6.3 安装
$ make install

  

7、SDL_ttf的移植

  SDL_ttf是让应用程序能渲染汉字的扩展库,依赖SDL、freetype、libiconv。下载地址 http://www.libsdl.org/projects/SDL_ttf/ 。使用版本:SDL_ttf-2.0.11.tar.gz。
  
  freetype是矢量字库处理工具,下载地址http://www.linuxfromscratch.org/blfs/view/6.2.0/general/freetype2.html 。使用版本:freetype-2.1.10.tar.bz2。安装SDL_tty之前必须先安装freetype。

7.1 配置

freetype

$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-static \
--enable-shared --host=arm-linux

SDL_ttf

$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-static --enable-shared \
--disable-sdltest --with-sdl-prefix=/home/horo/arm/software/sdl_arm \
--with-freetype-prefix=/home/horo/arm/software/sdl_arm \
CPPFLAGS=-I/home/horo/arm/software/sdl_arm/include/ \
LDFLAGS="-L/home/horo/arm/software/sdl_arm/lib -liconv" --host=arm-linux

  修改Makefile,去掉OpenGL相关处理(我编译的时候没有遇到前三种情况,可能和版本有关):
    1、删除CFLAGS中的-I/usr/include -DHAVE_OPENGL
    2、将GL_LIBS = -L/usr/lib -lGL修改为GL_LIBS =
    3、将glfont_LDADD = libSDL_ttf.la -L/usr/lib -lGL -lm修改成glfont_LDADD = libSDL_ttf.la -lm
    4、将glfont.c.全部清空,修改为int main(int argc ,char **argv) { return 0;}

7.2 编译
$ make
7.3 安装
$ make install

  

8、SDL_mixer的移植

  SDL2_mixer对于音频的处理,依赖SDL、libmad、libmikmod。下载地址:http://www.libsdl.org/projects/SDL_mixer/ 。使用版本:SDL_mixer-1.2.12.tar.gz。

  libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好。安装SDL_mixer前先安装libmad。下载地址:http://www.linuxfromscratch.org/blfs/view/6.3/multimedia/libmad.html 。使用版本:libmad-0.15.1b.tar.gz。

libmikmod是SDL_mixer所依赖的对MID格式的音频的支持的底层库。安装SDL_mixer前先安装libmikmod。下载地址http://mikmod.sourceforge.net/ 。使用版本:libmikmod-3.3.11.tar.gz。

8.1 配置

libmad

$ ./configure --prefix=/home/horo/arm/software/sdl_arm --host=arm-linux

  修改Makefile,删除CFLAGS中的-fforce-mem。gcc3.4或者更高版本已经将其删除。
libmikmod

$ ./configure --prefix=/home/horo/arm/software/sdl_arm --host=arm-linux

SDL_mixer

$ ./configure --prefix=/home/horo/arm/software/sdl_arm --disable-static --enable-shared \
--disable-sdltest --with-sdl-prefix=/home/horo/arm/software/sdl_arm \
--with-freetype-prefix=/home/horo/arm/software/sdl_arm \
CPPFLAGS=-I/home/horo/arm/software/sdl_arm/include/ \
LDFLAGS="-L/home/horo/arm/software/sdl_arm/lib -liconv" --host=arm-linux
8.2 编译
$ make
8.3 安装
$ make install

  

9、SDL_net的移植

  SDL_net用于网络通信,依赖SDL。下载地址http://www.libsdl.org/projects/SDL_net/ 。使用版本:SDL_net-1.2.8.tar.gz。

9.1 配置
$ ./configure --prefix=/home/horo/arm/software/sdl_arm --host=arm-linux \
--with-sdl-prefix=/home/horo/arm/software/sdl_arm \
CPPFLAGS=-I/home/horo/arm/software/sdl_arm/include  \
LDFLAGS=-L/home/horo/arm/software/sdl_arm/lib
9.2 编译
$ make
9.3 安装
$ make install

  
  
  至此,将SDL及其部分扩展库安装到/home/horo/arm/software/sdl_arm目录下,将目录下的所有文件拷贝到开发板中。

2011-10-29 16:40:46 HEN_MAN 阅读数 2691
摘要:本文以无线多媒体终端项目的需求为背景,提出了一种适用于嵌入式系统的媒体播放器架构设计方案。论文给出了一种嵌入式系统中音视频同步的解决方案, 有效的提高了嵌入式媒体播放器软件的音视频同步性能,在此基础上设计并实现了基于Linux/Qt的嵌入式媒体播放器,实现了基于Qt的嵌入式媒体播放器 系统。 
关键词:Qt;嵌入式Linux;媒体播放器;音视频同步 

1引言

随着用户要求的不断提高,越来越多的嵌入式设备使用功能强大、价格低廉的嵌入式Linux作为操作系统并开始采用较为复杂的图形用户界面。Qt以其 强大的功能、良好的可移植性逐渐成为一种被广泛使用的GUI系统。正是由于嵌入式操作系统及其相应图形用户界面的不断发展,嵌入式软件的开发显得越来越重 要。其中嵌入式媒体播放器由于能够满足人们的视听享受已经逐渐成为了系统中不可或缺的重要组成部分,在嵌入式系统上开发媒体播放器已经成为了一个技术热 点,当前许多嵌入式产品中都包含媒体播放器。因此在基于Qt的嵌入式系统中实现媒体播放器具有深刻的意义和实用价值。

2 嵌入式媒体播放器系统设计

2.1架构设计

嵌入式媒体播放器架构设计方案如图1所示。通过使用纯C++语言开发来支持嵌入式Linux系统,采用Qt/Embedded作为GUI来提供强大 的用户界面,实现一个开放式的插件接口来增强扩展性,利用内核帧缓冲来输出,消除对特定架构的依赖,从而保证可移植性。媒体播放器属于上层应用程序,位于 Linux用户空间。这样设计的目的是为了系统移植性。

图形用户界面窗口以Qt/Embedded为基础开发,通过调用Qt/Embedded提供的类库根据需要设计可以管理多媒体文件的基本窗口,包括 打开、删除、显示文件长度、显示播放时间等窗口,以及为方便用户设定的管理播放列表、进行播放控制的窗口,这些都是直接和用户打交道的。由于采用了 Qt/Embedded作为GUI,移植性可以得到保证。

文件输入主要是对用户指定的文件进行读取和解析,将获得的文件长度、播放时间、编码格式、音视频帧率、文件标题等内容,结合MIME的处理,显示在预先设计的窗口中。

插件接口调用主要是把所有对解码器的操作整合到一个统一的开放式接口当中,根据上一部分解析出的文件信息去查找相应的解码器插件并调用,如果没有找 到可用的解码器可以返回信息提醒用户添加相应的插件。通过实现这样一个接口可以使播放器的扩展性大大提高,因此本部分是媒体播放器的核心。

文件解码和输出主要负责通过调用解码器对音视频数据流进行解码,然后利用QT/Embedded可以直接操纵内核帧缓冲FrameBuffer的特 性,将解码之后的数据通过FrameBuffer直接送到输出设备输出,避免对DirectShow、OpenGL等特定架构的依赖,进一步增强可移植 性。

                                               

 图1 嵌入式媒体播放器的架构

3 插件接口模块和解码库模块

3.1插件接口模块设计

插件接口模块是整个播放器的核心部分,它封装了对具体解码器的操作,从而在输入和输出模块之间搭起一座桥梁,确保数据的正常流动。插件接口模块主要提供了以下方法来控制解码器:

1)文件支持性函数 bool isFileSupported(const QString&filename);

通过检查文件的扩展名来确定待播放的文件是否被播放器支持,若是返回真,否则返回假。可识别的扩展名有asf、avi、dat、mp2、mp3、 mpeg、mpg、ogg、wav等。如果添加了新的解码器插件以后可以识别新的文件格式,只需要将其扩展名添加到此函数的支持列表中

2)获取文件信息函数 const QString&  fileInfo();

用于获得文件的各种信息并将结果保存在一个常量字符串中,便于其他函数调用。这些信息包括:播放时间、音频格式、音频比特率、音频通道、音频频率、视频格式、视频比特率、视频高度、视频宽度等。

3)读取音频采样函数

bool audioReadSamples(short* output , int channels, long samples, long& samplesRead, int);

调用解码器对音频采样数据进行读取,是音频数据处理的核心部分。output表示待输出文件指针,channels表示通道数,samples表示采样数,samplesRead表示待读取采样数

4)读取视频帧函数

bool videoReadScaledFrame(unsigned char** output_rows, int, int, int in_w, int in_h,int out_w,int out_h,ColorFormat fmt,int);

调用解码器对视频帧进行读取,是视频数据处理的核心部分。参数output_rows表示输出列地址的指针,in_w、in_h、out_w、out_h分别表示输入和输出帧数据的宽度和高度,fmt表示采用的色彩模式,返回值用来判断执行是否成功。

5)音视频同步函数定义:int Sync(File*fp,int auIndex,struct timeval*vtime);

fp为打开的多媒体文件指针,vtime为当前正在播放的视频文件的帧头中提取的时间, auIndex指出当前的音频帧计数,即当前播放到了第几帧。通过这些参数就可以计算出希望跳到的帧数和当前帧数的差值,然后根据这个差值将音频流向前 (滞后)或向后(超前)跳即可。同时Sync函数还会将此差值int反馈给音频解码器,让音频解码器修正数据流的时间戳,如此循环,从而达到较好的音视频 同步效果。此函数的总体思想是在播放视频数据流的同时启动另一线程,打开对应的音频数据流播放,然后在视频线程中来同步音频数据。

此外还有插件初始化和注册函数 void pluginInit()、文件初始化函数 void fileInit()、查找函数 bool seek(long pos)、清空视频数据函数flushVideoPackets()和清空音频数据函数flushAudioPackets()、获取下一数据包函数 MediaPacket*getAnotherPacket(int stream)等,不再做详细介绍。

3.2解码库模块

解码库模块的主要作用是为插件接口模块提供解码器,考虑到播放器的可移植性和可扩展性,本系统采用了ffmpeg解码库。FFmpeg解码库是 Linux下的一个开源解码器集合,它支持多种音频和视频编解码标准,还支持转文件格式、制作avi等,功能十分强大。可以在windows下使用的 ffshow插件,linux下的mplayer播放器都是使用的ffmpeg解码库。

解码库又包含解码器和分离器。解码器就是对音视频数据流进行解码的组件,分离器就是把文件流中的数据分离为音频数据流和视频数据流的组件,音频数据和视频数据是分开解码的,所以二者缺一不可。

3 嵌入式媒体播放器系统实现

3.1 数据流程总体设计

图2为系统数据流程:首先输入模块从数据源(多媒体文件)读入数据,此时它将读入文件头,做一些基本的处理,如读出文件长度,获取此文件的编码类 型、比特率,判断能否播放等;然后插件接口模块会调用分离器插件将多媒体数据切分为视频数据流和音频数据流;再经过视频FIFO和音频FIFO,排序处 理;最后送入视、音频解码器调用相应的解码器进行解码,对于音频数据就会进行重采样,对于视频数据就会读取相应的帧,逐帧解码;之后经过采样的音频数据和 经过渲染覆盖的视频数据先进行音视频同步,再分别通过视、音频输出模块输出。这其中,数据的读入、分离、解码、输出都是通过Qt提供的类库以多线程同时进 行的,在解码得同时程序也在不断将数据读入缓冲区并排序等待处理,以提高效率。

输入模块的主要功能是将用户指定的多媒体文件读入。由于不同格式的多媒体文件需要调用不同的解码器才能正常打开,因此考 虑到程序的模块化将实际的文件打开工作交给插件接口模块调用相应的解码器进行,输入模块只对文件进行一些基本的处理并对文件内容进行缓存,然后为插件接口 模块输送原始数据流。用户首先通过图形用户界面选定待播放文件发出打开指令,这将会使输入模块接收到一个信号并通过用户界面传回的信息获得待播放文件的文 件路径和文件名。接下来输入模块会检查文件路径是否合法、文件是否为空,之后会向插件接口模块发出信号,通知插件接口模块查找可用的解码器,为文件解码做 好准备。下一步就是进行调用播放初始化函数init(),其具体过程下面会详细介绍,最后就是将工作移交给插件接口模块,让它调用对应文件格式的解码器的 open()函数。

输出模块的主要功能是将通过解码器解码之后的音频、视频数据送到输出设备(如LCD显示屏、扬声器)输出。根据输出内容的不同可以将输出模块划分为 音频输出和视频输出两个子部分。这两个部分基本上是相互独立输出的,通过插件接口模块的同步控制让它们在输出时保持同步。视频输出和音频输出稍有不同,它 利用Qt/Embedded可以直接控制FrameBuffer的特性来输出视频数据。帧缓冲区是显卡上的内存,使用帧缓冲区可以提高绘图的速度和整体性 能,与帧缓冲区有关的设备是/dev/fb0(主设备号29,次设备号0)。

图2 系统数据流程

4.2嵌入式音视频同步设计

本方法的基本思想是以视频流为主媒体流,音频流为从媒体流,视频的播放速率保持不变,根据本地系统时钟确定的实际显示时间,通过调整音频播放速度来 达到音视频同步。整个系统的音视频同步数据流程见图3。首先选择一个本地系统时钟参考(LSCR),要求本地系统时钟参考上的时间是线性递增的。然后将 LSCR分送到视频解码器和音频解码器,由这两个解码器根据各帧的PTS值对照本地系统时钟参考产生各帧准确的显示或回放的时间。也就是说,生成输出数据 流时依据本地参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间)。在播放时,读取数据块上的时间戳,同时根据本地系统时钟参考上的 时间来安排播放。

图3 音视频同步数据流程

基于时间戳的播放过程中,仅仅对早到的或晚到的数据块进行等待或快速处理,往往是不够的。如果想要更加主动并且有效地调节播放性能,就需要引入反馈 机制,也就是通过对比音视频的时间戳将当前数据流的播放状态反馈给上层的“源”。如果音频流滞后,就即时通知音频解码器加快音频流输出,但是如果滞后太 多,则直接将当前数据丢弃,直接跳到下一帧;如果视频流滞后,就通知音频解码器减慢音频输出速度等待视频流,如滞后太多也直接进行跳帧。数据流首先通过分 离器分解为视频数据流和音频数据流,然后经过对应的解码器,同时由本地系统时钟来进行时间戳控制;获得准确显示或回放时间以后进行时间戳比较;若同步则直 接输出,不同步则进行音频跳帧或等待,直到同步后输出。

 

5 总结

本文的创新点是系统具有很好的可移植性,它的实现过程以及核心的代码对类似应用具有很好的可重用性,只需通过较小的修改就能移植到不同的操作系统和 平台上,可以广泛使用在各种嵌入式系统中,如PDA,智能手机等方面,具有较高的经济价值,同时也可以为开发其他嵌入式系统软件提供参考意见;其次,本文 围绕用户的基本需求,提出了一个基于嵌入式Linux操作系统和图形用户界面QT/Embedded的媒体播放器设计方案。该设计方案具有低耦合、高内 聚、可扩展、可移植等良好特点,并在设计的基础上将该方案实现。该媒体播放器支持编码格式为MPEG-1、MPEG-2和MPEG-4的多媒体文件。同时 具有存储空间小,响应速度快的性能特点,并支持播放控制、播放列表等功能,可自由切换中英文双语界面,用户可以选择打开任意位置的文件。项目经济效益50 万元。

2019-06-10 08:28:40 Wangguang_ 阅读数 215

一、SDL的简介

SDL是一个自由的跨平台的多媒体开发包,适用于
游戏、游戏SDK、演示软件、模拟器、
MPEG播放器和其他应用软件。是为数不多的商业游戏开发公司使用的免费软件库之一。它提供跨平台的二维帧缓冲区图形和音频服务,它支持 Linux、Win32 和
BeOS。也不同程度地支持其它平台,包括 Solaris、IRIX、FreeBSD 和 MacOS。除了大量的服务,包括线程、独立于字节存储次序的宏和 CD
音频,SDL
 还提供了一个简单的 API,它允许您尽可能接近本机硬件。使用 SDL 有三重优点:稳定、简单和灵活。

  • 稳定
    如果 SDL 不向 API 提供可靠的支持,那么那些爱好者和商业公司就不能使用它。因为使用了
    SDL,就添加了错误修正并增强了性能,也就加强了 API 的强健性。就像内核开发是分步进行的,SDL 的开发也是分步进行的,其中一部分是可靠稳定的
    API,其它部分是新功能和构思的沙箱。
  • 简单
    SDL 被设计成一个简单的 API,以最少的代码实现您的构思。
  • 灵活
    返回到上面的 Optimum 演示代码示例,只要移植到 SDL,并确定一些数据假设,那么根本不必改动代码,演示就可以在
    Win32、BeOS 和 Linux 控制台上运行了。灵活性的另一方面体现在尽管代码完全是跨平台的,但不会把您和底层实现隔开。SDL 提供了函数
    SDL_GetWMInfo(),该函数可以让您访问底层驱动程序的专用窗口信息。

二、宿主机上安装SDL

SDL同样具有很强的移植性,我们可以在宿主机上编写应用程序,编译以后就可以交叉编译移植到ARM上执行可执行程序,为了提供SDL交叉编译所需的实验环境,在交叉编译SDL之前,应当先在宿主机安装SDL

终端输入:

sudo apt-get install libsdl1.2-dev

宿主机安装SDL之后,需要安装一些附加软件以满足宿主机对SDL的支持

终端输入:

sudo apt-get install libsdl-image1.2-dev

sudo apt-get install libsdl-mixer1.2-dev

sudo apt-get install libsdl-ttf2.0-dev

sudo apt-get install libsdl-gfx1.2-dev

安装SDL之后,我们执行一个测试程序来检验SDL是否安装成功

 

程序源码如下:

#include <stdio.h>
#include <SDL/SDL.h>
int main()
{
    SDL_Surface* hello = NULL;
    SDL_Surface* screen = NULL;
    SDL_Init( SDL_INIT_EVERYTHING );
    screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    hello = SDL_LoadBMP( "1.bmp" );
    SDL_BlitSurface( hello, NULL, screen, NULL );
    SDL_Flip( screen );
    SDL_Delay( 5000 );    
    SDL_Quit();
    SDL_FreeSurface( hello );
    SDL_Quit();
    return 0;

} 

在执行程序之前,先将一个bmp文件复制到程序目录,之后使用gcc将源程序编译生成可执行文件

终端输入:gcc -o run test.c -lSDL

 

程序执行结果如下:

程序运行成功

三、移植SDLARM

SDL同样具有很强的移植性,我们可以在宿主机上编写应用程序,编译以后就可以交叉编译移植到ARM上执行可执行程序

将下载的SDL的源码通过VMware的共享文件夹拷贝到Ubuntu下,并将其解压到指定目录(/nfsroot/SDL-arm)

之后进入相关目录,文件夹内容如下:

之后对源码进行配置:

./configure --prefix=/nfsroot/SDL-arm --disable-pulseaudio --disable-video-nanox -disable-video-qtopia --disable-static --enable-shared --disable-video-photon --disable-video-ggi  --disable-video-svga --disable-video-aalib --disable-video-dummy --disable-video-dga --disable-arts --disable-esd --disable-alsa --disable-video-x11 --disable-nasm --disable-joystick --disable-input-tslib  -enable-video-fbcon --host=arm-none-linux-gnueabi

命令执行结果如下:

之后便会在当前文件夹下生成Makefile文件

终端输入make对源文件进行编译,之后输入make install进行安装

之后便在指定文件夹下生成了相关文件

在当前目录下,编辑SDL的测试程序test.c

之后终端输入:arm-none-linux-gnueabi-gcc  test.c -o run -I/nfsroot/SDL-arm/include  -L/nfsroot/SDL-arm/lib -lSDL

成功编译之后,便会在当前目录下生成可执行文件run

接下来使用X-shell对ARM板进行连接,更改开发箱的ip地址,使其与宿主机的ip处于一个网段

例如:

开发箱下的终端输入:mountnfs 192.168.1.104:/nfsroot /mnt/nfs

之后执行交叉编译生成的可执行文件,并观察结果

结果如下:

程序运行成功,至此SDL的移植完成

 

ucweb6.7下载

阅读数 169

没有更多推荐了,返回首页