基于嵌入式linux的流媒体传输系统

2019-07-12 22:57发布

项目设计员姓名:朱炎顺 项目安排总体时间:一个月 嵌入式技术:按照PC机的特点,根据特定的应用需要,通过裁剪软硬件而组成的可以独立运行的系统的一门计算机技术。 流媒体的产生:随着Niternet宽带化的发展趋势,高速的实时传输已成为实现,传统的多媒体在网络上客户端必须把多媒体档全部下载完毕后,在客户端才能播放,而流媒体以流的形式进行数字媒体的传送,在客户端可以边下载边观赏媒体节目。 项目结构   服务器(流媒体服务器端)-------à客户端机(播放流媒体客户端) 技术和实验平台: Linux构建(实验平台的搭建),网络编程,应用软件的移植,Qt图形界面的开发。 ARM  ---  Mini2410     PC机(windows 系统),linux虚拟平台,linux 系统RedHat 5RedHat9 项目流程需求分析----概要设计------详细设计-----编程-----测试项目----修改完善 过程: 实验平台的搭建,bootloader的烧写,内核的烧写到flash,网络档系统的制作。 mplayer的移植,在linux x86上交叉编译mplayer,使得mplayer.能在ARM上运行。 服务器的搭建:搭建windowslinux 流媒体服务器,rtsp协议传输流媒体。 Qt图形界面的设计实现流媒体在客户端图形界面化操作和观赏。 Qt的移植。把在linuxwindow环境下开发出的QT应用程序移植的相应的嵌入式平台上。 实现嵌入式平台的流媒体播放,优化并改善传输性能和质量。 项目到今天终于结束了,回首这一个月,自己是那么的忙碌同时也是那么的艰难。一步一步的走过来,中间不知道遇上了多少困难,遇到困难,解决困难永远都是一件令人兴奋的事情。在这个项目当中付出了相当的汗水,同时也获得了不少的收获。使我从一个对嵌入乃至对计算机毫无了解的我磨砺成了对嵌入式有一定了解的我。做项目是在困难中寻找答案,提升自我。在IT技术上克服困难永远都是一件令人兴奋和快乐的事情。 项目第一步:实验平台的搭建 我们这个项目的实验平台是在EduKit-IV实验箱,   ARM Mini2410上面。  配置实验箱:烧写BootLoader,内核到flash 嵌入式linux系统在宿主机上编译后,会生产映像档。这个映像档一般来说需要烧写到flash中。如Noflash Nandflash ,一般来说,BootLoader具有擦写Flash的功能,也具有从宿主机上下载映像档的功能,因此我们一般应用BootLoader来固化内核和文件系统。 Linux 基本映像包含三部分:BootLoader,内核,档系统。其中BootLoader采用专门的硬件仿真器来固化。而内核和文件系统可以通过BootLoader来固化。 固化BootLoader ,安装好JTAG线,运行Flash Prammer for ARM软件。设置好软件参数。然后File>Open 选择vivi.cfg 随后选择vivi,点击program开始烧写vivi Vivi烧写成功后,就可以烧写内核和文件系统映像档了。 打开PC机的超级终端-,开启实验箱电源,同时按下空格键进入vivi的命令行。 bon part 0格式化flash 固化内核  可以按照vivi的固化方法固化linux内核zImage映像 固化ramdisk,可以按照vivi 的固化方法固化linux的档系统映像 这样一个最基本的linux系统就固化成功了。可以设置vivi启动参数来设置启动方式。(出厂采用默认yaffs档系统启动方式) 启动ramdisk档系统 vivi>param ramdisk vivi>param save 启动yaffs档系统 vivi>param reset   //设置启动参数为进入yaffs档系统 vivi>param save 如果vivi启动的时候使用网络档系统,则vivi参数应设置: 首先开启服务器nfs Service network start Service nfs start Ifconfig eth0 192.168.1.100 设置nfs服务器选项 系统->管理->服务器设置->NFS->添加 /home/rootfs   192.168.*.*   / 开启实验箱电源同时按下空格键进入vivi命令行 vivi>Param set linux_cmd_lineroot=/dev/nfs  Nfsroot=192.168.1.100:/home/rootfs  Ip=192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0:EDUK4:eth0:off Console=ttySAC1,11520 mem=64M init=/linuxrc noinitrd vivi>Param save Vivi>boot 如果挂不上param show 查看vivi启动参数  注意网络是否通  注意vivi的启动参数是否绝对正确  注意主机端服务是否已经开启,并设置好NFS的选项  注意修改rootfs里面的/etc/init.d/rcS  一般来讲,rcS档里有设置目标板的ip,因此要主机端的ip要与之在同一网络端。 默认情况下,vivi是启动yaffs档系统,但是如果我们想要更换yaffs档系统怎么办呢? 首先让vivi进入ramdisk档系统:vivi>param ramdisk vivi>boot  进入ramdik档系统    其次擦除原来的yaffs $flash_eraseall /dev/mtd3 MTD3分区映射到/mnt目录 Mount t yaffs /dev/mtdblock/3 /mnt 拷贝rootfs-eduk4-tsp-ys.gzU盘到实验箱并插其到Usb界面 U盘映射到/media目录 $Mount t vfat /dev/ub/a/part1 /media $tar xzvf  rootfs-eduk4-tsp-ys.gz C /mnt Umount /mnt Umount /media Mini2410 内核开发 Vivi 的编译与固化,kernel 的编译与固化,如何编译busybox,制作跟档目录,以及搭建nfs档系统。 清除前面的配置信息 Make distclean  配置信息 Make menuconfig Make  Make install 下载到flash 如果是用ubun tu  的超级终端minicom  用命令 load flash vivi x 如果是用windows的超级终端,用usb线下载 用命令 load flash vivi u 内核的编译与固化 内核是linux系统的核心,他与其他系统不同的是,linux系统允许用户根据需要对内核进行重新配置,增加或减少对某些特定设备的支持。 进入源代码 Make distclean 配置所需的功能 Make menuconfig 编译内核 Make  zImage 编译驱动模块 Make modules 固化内核映像 Vivi>load flash kernel x usb线下载 Vivi>load flash kernel u 档系统的制作 Busybox 编译 Busybox 是一个集成了一百多个常用命令和工具的软件,大小在1M左右, 解压busybox tar jxzv busybox-1.1.2.tar.bz2 Cp    .config  Make Distclen Make menuconfig  Make  Make install 生成_install 档夹 拷贝_install 目录档系统  档系统目录建立:可以用mkdir 命令一个一个的建立,也可以自己编写一个shell脚本档并执行来建立。 应该来说搭建根档系统是一件比较简单的事情,主要是要对档系统的结构要清楚。作为一个普通的作用的档系统,起主要作用的有一下目录: Sbin 目录,存放系统管理的常用命令 Bin 目录,存放用户管理的常用命令 Lib 目录,存放应用程序运行所需的动态链接库,c. Opt/Qtopia 存放的是档系统图形界面应用程序和库 Etc 目录,存放档系统启动初始化的一些档。用户的一些的基本信息。特别重要的档就是init.d/rcS Usr 目录,主要用来存放用户的应用程序。 移植开发篇 移植就是把运行于一个平台的应用程序经过相应编译器编译使之可以在相应平台上一运行起来的过程。 交叉编译器:指在一个平台上用一个编译器编译应用程序能够在另外一个平台上运行的的编译器。 比如在linux 下面的编译器为:gcc   或 g++ 但是在linux下的arm交叉编译器则为arm-linux- 交叉编译器一般会有多个版本,在开发时,要下载相应的版本安装。 交叉编译器的安装: 一、把交叉编译器源码包拷贝的linux的根目录 二、解包.tar zxvf arm-linux-gcc -4.3.2.tar.gz -C / 三、修改配置文件:/etc/profile /root/.bashrc Vim /etc/profile 添加  pathmunge /usr/local/arm/4.3.2/bin vim /root/.bashrc 添加  export PATH=/usr/local/arm/4.3.2/bin:$PATH 四、执行source /etc/profile   或 执行 source /root/.bashrc 五、查看交叉编译器的版本 arm-linux-gcc -v Linux系统的构成  BootLoader  Kernel  根文件系统 配置内核  X86 :make menuconfig Arm: make menuconfig ARCH=arm 编译内核 X86:make bzImage Arm:make uImage ARCH=arm  CROSS_COMPILE=arm-linux- 根文件系统:是linux启动的第一个文件系统,没有根文件系统linux无法正常启动。 编译内核模块:(linux 2.6.29) Make mudules ARCH=arm CROSS_COMPILE=arm-linux 安装内核模块 Make modules_install  ARCH=arm INSTALL_MOD_PATH=/XX/rootfs 配置busybox 进入busybox目录  Make menuconfig  进入Busybox Setting->build Opions->选择"Build busybox as a static binary"静态链接库 Cross Compiler prefix(arm-linux) Installation Option-> 选择"Dont use/usr"该选项可以避免busybox被安装到宿主机的/usr目录下面,破坏宿主机系统。 Busybox installation Prefix(/xx/rootfs) 该选项表明编译后的位置 编译安装busybox Make ARCH=arm  CROSS_COMPILE=arm-linux- Make install 把根文件系统制作成ramdisk文件系统 Genext2fs -b 8192 -d /xxx/rootfs ramdisk Gzip -9 -f ramdisk