首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于PXA270平台的嵌入式流媒体播放器设计之二

基于PXA270平台的嵌入式流媒体播放器设计之二

  RM文件解压


  组成RM文件的基本部件是块,每个块包括三个字段:指明块标识符的四字符编码、块中限定数据大小的32 位数值和数据块部分。块标识符用来唯一的标识每一个块。同样地,RM文件的高层逻辑结构也由三部分组成:文件报头部分、文件数据部分和文件索引部分。因为RealMedia 文件格式是一种加标志的文件格式,块的顺序没有明确规定,但RealMedia 文件报头必须是文件的第一个块。

  MPEG- 4 视频图像的解压


  在几种开放源代码的MPEG- 4 解码软件中,作者选择xvidcore 作为系统中视频图像解压模块的核心算法。xvid 是一个高效且可移植的编码软件,系统采用的是目前最新的版本xvidcore- 1.1.0。xvid 支持SimpleProfile 和Advanced Profile,支持I/P Frames、B -Frames、Interlacing 和GMC,是目前比较流行的MPEG- 4 编码软件。对xvidcore- 1.0.1 进行交叉编译有以下主要步骤:

  1) 解压缩xvidcore 源代码tar- zxvf xvidcore- 1.1.0.tar;

  2)设置环境变量export xvidcore= “the path of xvidcore”;

  3)生成makefile ./configure- - host="localhost-" - build="arm-" linux- gcc;

  4) 编译源代码make;make install;

  将交叉编译生成的库文件libxvidcore.so.* 拷贝到交叉编译器工作目录的./local/lib 子目录中,该库文件为系统的其它模块提供了编程接口。

  解码格式的可扩展性

  播放器支持的文件格式越多,其生命力也就越强大,PXA270 嵌入式处理器加上2700G 多媒体加速芯片的搭配方案为媒体播放提供了强大的硬件支持,通过软件升级,理论上可以支持任何媒体格式。本方案的做法是:在播放器中实现一个索引表类,将来根据需要新添加的编码格式作为独立的类注册到索引表中。基于linux 的c++解码类源代码可以由网上开放源码的解码器网站下载,系统中的MP1,MP2,MP3 和WAV 的解码就是采用这种方法实现的。

  播放模块实现

  文件的输入

  在播放器系统中,文件的来源有两种:由网卡读入存储器后播放或通过其它数据传输途径写入存储器,在存储器中直接播放。sophia 板提供了网卡的驱动模块,可以使用命令modprobe usbcore 和modprobe usbwlnc动态加载,为数据从网卡经由操作系统到达播放进程提供一个全双工的通道。数据的处理由播放器中的stream input 类来实现。

  流媒体协议


  实现流式传输有两种方法:实时流式传输和顺序流式传输,系统使用的是实时流式传输,需要标准化的流媒体协议来保证客户机和专用的流媒体服务器之间进行通信。根据流媒体协议的功能可以分为两类:

  基本网络协议


  为媒体传输提供基本的网络服务支持,由于TCP需要较多的开销,不太适合传输实时数据。在流式传输的实现方案中,采用RTSP/TCP 来传输控制信息,而用RTP/UDP 来传输实时声音、图像数据。

  传输协议


  传输协议包括RTP、RTCP、RTSP 和RSVP,RTP和RTCP 控制端到端网络数据的传输,RTSP 提供话路控制的功能,RSVP 是可选的,它为播放进程在网上预先申请一部分网络资源( 即带宽),能在一定程度上为流媒体在Internet 上的传输提供特殊服务质量QoS。为流媒体设计的协议栈如图3 所示:从UDP/TCP层得到的数据包处理后得到打包的RTP 数据流,通过RTP/RTCP/RTSP 层分离出定时和同步信息以及包的序列号,将读出的流文件交给ASF 和RM解码模块。

  媒体的播放


  播放器以自由软件mplayer 为蓝本,处理流程如图4所示:

  1) 如果数据是从网卡获得的,调用stream input模块进行处理。Stream input 模块根据流媒体协议,使用socket 和多媒体服务器进行通信,输入的流数据放入缓冲池中并根据流文件的格式对它进行ASF 或RM解压缩;

  2) 解压后的文件根据文件的类型查找索引表调用不同的解码类将数据转化为一种统一的中间格式raw,生成相应的file,由播放器main 函数播放。如果文件已保存在存储器中,可以跳过第一步,直接执行第二步流程。

  小结


  本文提出了一种基于Intel PXA270 嵌入式微处理器和嵌入式Linux 的流媒体播放器系统实现方案,特有的索引表结构使得播放器可以通过软件升级增加新的编码格式,纯软件的实现方式大大缩减了研发周期。经测试,在带宽50Kb/s~100Kb/s、缓存256k 的条件下,系统对CIF(352288) 视频格式、QCIF(176144)视频格式和音频格式的文件播放失帧率在5%以下,播放流畅,满足了目前车载终端中嵌入式流视频播放的要求。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表