基于Android平台的流媒体播放器的
设计 刘洁彬,宋茂强
北京邮电大学
软件,北京(100876)
E-mail:liujiebin1986@126
摘要:随着移动
通信技术和多媒体技术的迅速发展,移动流媒体服务有这很大的市场潜力,结合FF
mpeg源码的解码流程设计出基于分层结构的流媒体播放器的
系统架构,并讨论了FFmpeg的修剪优化方法,使其效率等特性适用于移动终端,再将优化后的代码移植到Android手机开发平台。该播放器不仅支持本地文件及流媒体文件的播放,还提供了对外部摄像头的控制功能。关键词:Andorid;FFmpeg;PELCO-D协议中图分类号:TP393
1引言
随着移动通信技术和多媒体技术的迅速发展,融合手机、
网络、多媒体技术为一体的视频监控技术也有了长足的进步,通过移动通信网络提供流媒体服务已经成为可能。全球移动用户数非常庞大,因此移动流媒体服务具有巨大的市场潜力,也正成为移动业务的研究热点之一。在这一背景下,针对移动网络和移动终端的特点,提出移动流媒体客户端的解决
方案很有现实意义。本论文结合FFmpeg开
源代码中解码流程,提出了移动终端流媒体播放器基于分层体系架构的设计方案。该设计的特点是在底层屏蔽不同类型文件解码时对媒体流处理的差异,并且提供了对外部摄像头设备的控制功能,最终在Android平台[1]上实现该播放器。
2播放器整体设计方案
播放器无论播放本地文件或是网络流媒体文件,都需要有获取媒体数据,解码音视频媒体流,将解码后媒体数据显示给用户三个处理阶段,根据0文件播放的流程中这三个明显的处理阶段,本文提出基于层次的播放器结构设计。由于本地文件和网络流媒体文件的数据获取方式是不相同的,若要保持上层解码的一致性,需要对两类文件进行预处理,形成相同格式的数据提供给上层解码。根据以上特性,结合文件解码流程本文中面向实时监控的播放器设计采用分层结构,每层独立完成任务,使系统的耦合度降低,利于各层独立扩展而不影响上下层的应用。从下至上依次是数据提取层、数据预处理层、音视频解码层和用户界面。该流媒体播放器分层结构如图1所示。用户界面层主要提供用户和播放器之间的交互接口,如播放本地文件时可以实现暂停、快进、快退等功能,在观看流媒体文件时可以通过数字键、
导航键或者播放器上方向按钮控制摄像头的焦距、方向等信息。音视频解码层主要有解码选择组件、各种主流音视频格式的解码器和多路媒体流之间同步的功能。解码选择组件从本地文件或者流媒体文件头中获取到媒体的解码格式信息,根据该格式信息选择相应的解码器对
压缩后媒体流进行解码。该部分是由FFmpeg修剪优化后作
为播放器的解码模块的。多路媒体之间同步包括视频流和音频流的同步,在播放本地文件时可能还需要字幕的同步。
图1面向实时监控播放器的分层结构
数据预处理层对本地文件按照其媒体格式解封装,获取文件的音视频或字幕等信息并将其按帧放入相应上层待解码缓冲区。对流媒体文件将去除RTP的包头信息,并将RTP中音视频信息组帧,将完整的数据帧传给上层待解码缓冲区。而封装控制信息组件按照PELCO-D/P协议规定的文本格式封装用户的控制输入,并将控制信息传递给下层。数据获取层的功能包括本地文件、流媒体文件的获取和摄像头控制信息的发送,前者只需读取本地文件即可,流媒体文件的获取需要从流媒体服务器获取媒体数据信息。流媒体文件获取部分包括前期会话协商部分、数据发送部分和数据缓冲部分。其中媒体信息协商部分需要使用RTSP协议[2]协商媒体流常规信息,如媒体类型(视频和音频)、传输协议(RTP/UDP/IP…)和媒体格式(H263、mpeg…)和媒体传输端口等信息。
3FFmpeg到Android平台