论文部分内容阅读
随着网络传输带宽的增加,网络流媒体技术的应用越来越为广泛。流媒体是指用户可以边下载边播放的多媒体节目。在流媒体文件格式中,常见的有WMV、RM、FLV等等很多种。为了统一数字媒体的存储格式,国际标准化组织MPEG制定了MP4文件格式。MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术视听对象编码的第12部分:ISO基本媒体文件格式(Information technology Coding of audio-visual objects Part 12: ISO base media file format)。MP4文件格式是一个十分开放的容器,几乎可以用来描述所有的媒体结构,MP4文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。本文提出了基于MP4文件存储格式的高效实时流化技术。流化的本质就是按顺序提取音视频帧的过程,即计算每个数据帧在文件中的偏移量的问题。由于MP4文件的音视频帧在文件中的物理位置不是顺序存放,而是以一种相对凌乱的状态存在,若在媒体数据播放的过程中,计算每帧偏移量难以做到高效率。因为计算偏移量是个相对繁琐的过程,要计算多级偏移和很多其他数据。为了解决这个问题,本文提出预处理的方案,即在得到文件元数据信息(metadata)的时候,先不和服务器通信并播放每帧数据,而是预先把每帧数据的大小和相对于媒体文件的偏移地址都计算出来。这样虽然在流媒体播放之前要用一段时间计算数据,但在播放开始之后,将不再进行繁琐的计算偏移量过程。从而提高了MP4文件流化效率。将计算媒体数据偏移量这块工作拿到客户端来做也是本系统的另外一个特色。对于通常的流媒体系统,服务器做了更多的工作。首先媒体文件一定是存放在服务器端,通过流的方式发送给客户端。既然服务器有媒体文件,所以很自然地利用服务器来做流化。这种方案虽然可行,但在客户机比较多的情况下,服务器的负担将会增大很多,能否有效率地完成流化过程是一个待考虑的问题。相反,每个客户机都是独立的实体,若流化过程能在客户机上实现,则效果会好得多。所以流化MP4模块集成在每个客户机上,在播放前客户与服务器通信一次,拿到媒体元数据信息,然后客户端计算出每帧数据的偏移地址和大小,发给服务器。而服务器实现起来就相对简单,按客户的要求去指定偏移地址的地方取指定大小的数据即可。从这个意义上说,服务器相对“傻瓜化”了。更多的智能工作是分别在各个客户端完成的。同时本课题对网络流媒体视音频帧的同步、网络传输协议、如HTTP、RTSP、以及基于DirectX构架和Direct Show的媒体播放单元,都提出了两种不同方案,分析比较各自的优劣,最终选定基于HTTP和DirectX的技术方案,完成基于MP4文件格式的流媒体系统开发。最后,本课题对实验结果进行了分析比较,得出结论:MP4文件可以被高效地流化,而且DirectX播放效率高,HTTP协议适合本系统开发。