应用于嵌入式终端的MP3流服务器的设计-_第1页
应用于嵌入式终端的MP3流服务器的设计-_第2页
应用于嵌入式终端的MP3流服务器的设计-_第3页
应用于嵌入式终端的MP3流服务器的设计-_第4页
应用于嵌入式终端的MP3流服务器的设计-_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、应用于嵌入式终端的MP3流效劳器的设计*论文导读:一种基于局域网传输并结合了嵌入式技术的智能播送系统得于实现。使用的是互联网上成熟的TCP/IP传输协议。并同时向流效劳器申请新的数据流。关键词:嵌入式,MP3文件格式,数据流,传输协议1、引言随着国家信息教育化的不断深入,多媒体教学在广阔中小学的不断普及,利用播送系统进行语音语言教学的需求在不断的增加,特别是音乐铃声的普及,英语听力考试的实施等,对学校播送系统的功能、容量、音质、智能化水平都提出了更高的要求。如何才能满足学校对现代化校园播送的要求,一直是相关技术人员的设计难题,传统的播送由于传输质量和智能化等模拟技术局限性的限制,已经难于符合学

2、校的数字化教学要求。随着学校校园网建设的普及,一种基于局域网传输并结合了嵌入式技术的智能播送系统得于实现。该种智能播送系统主要由MP3流效劳器和嵌入式终端组成,使用的是互联网上成熟的TCP/IP传输协议,具有稳定、高音频质量和高智能化等优点,由于该系统相关技术具有一定的技术难度和较高的商业性,成为当前播送产品方向各厂商争相研究开发的课题或产品。本文将介绍智能播送系统里主要技术如何用Delphi开发应用于嵌入式终端的MP3流效劳器,通过分析MP3格式和TCP/IP传输协议,给出流效劳器实现方案。2、MP3文件格式分析MP3文件是由帧(frame)构成的,帧是MP3文件最小的组成单位。MP3的全称

3、应为MPEG1Layer-3音频文件,MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音局部,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。我们的设计目的是读出MP3文件里的数据帧(frame)内容,并将其以流的形式传输到各个节点终端。MP3文件结构大体分为三局部:TAG_V2(ID3V2),Frame,TAG_V1(ID3V1)。所以下面对M

4、P3文件的三个局部进行简单分析。2.1、ID3v1ID3V1存放在MP3文件的末尾的128个顺序存放字节,主要包含了作者,作曲,专辑等信息,数据结构定义如下: Real structureof ID3v1 tag typeTagRecord= recordHeader:array of Char; / ID3v1头,必须为TAG;Title:array of Char;Artist:array of Char;Album:array of Char;Year:array of Char;Comment:array of Char;Genre:Byte;end;2.2、ID3V2ID3V2到现在

5、一共有4个版本,但流行的播放软件一般只支持第3版,既ID3v2.3。ID3V2包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。由于ID3V1已经记录在MP3文件的末尾,ID3V2就只能记录在MP3文件的首部了。因此,ID3V2结构比ID3V1的结构要复杂得多,但比前者全面且可以伸缩和扩展。要准确地读出MP3文件的音频实体数据,就必须要准确的知道位于MP3文件首部的ID3V2的长度。由于ID3V2长度不固定,所以必须对ID3V2的结构进行了解。每个ID3V2.3的标签都由一个标签头和假设干个标签帧或一个扩展标签头组成。关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标

6、签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3文件的首部,ID3V2.3标签头数据结构定义为: Real structureof ID3v2 header typeTagInfo = recordID:array of Char; / 必须为ID3;Version:Byte;Revision:Byte;Flags:Byte;Size:array of Byte;end;标签大小由四个字节组成,但每个字节只使用了低7位,最高位恒为0,格式如下:0 xxxxxxx 0 xxxxxxx 0 xxxxxxx 0 xxxxxxx计算标签大小时将最高位0去掉,得

7、到一个28位的二进制数,就是标签大小。计算标签大小的函数为:functionGetTagSize(const Tag: TagInfo): Integer;begin Gettotal tag size Result :=Tag.Size【1】 * $200000 +Tag.Size【2】 * $4000 +Tag.Size【3】 * $80 +Tag.Size【4】 + 10;if Result Tag.FileSize then Result := 0;end;2.3、帧FRAMEMP3文件的音频数据由一系列的帧组成,帧的总数由文件大小和帧长决定,每个帧的长度可能不固定,也可能固定,由位率

8、bit rate决定。每个帧分为帧头和数据实体两局部,帧头记录了MP3的位率,采样率,版本等信息,长度是4BYTE32bit,帧头后面可能有两个字节的CRC校验,这两个字节的是否存在决定于帧头信息的第16bit,为0那么帧头后面无校验,为1那么有校验,校验值长度为2个字节,紧跟在帧头后面。免费论文参考网。帧头后紧接着帧的实体数据,具体长度由帧头计算得出。值得注意的是,无论帧长是多少,每帧的播放时间都是26ms。MP3标准规定,不变位率的MP3文件称作CBR,而变化位率的MP3文件称作VBR,每个帧的长度都可能是变化的。CBR的位率和帧的大小是固定的,只要知道文件总长度,和帧长即可由播放每帧需2

9、6ms计算得出该MP3播放的总时间。VBR是XING公司推出的算法,所以在MP3的帧里会有XING;这个关键字,它存放在MP3文件中的第一个有效帧里,它标识了这个MP3文件是VBR的。同时,在第一个帧里存放了MP3文件的总帧数,乘上每帧需26ms即可计算出播放的总时间。3、MP3流效劳器设计3.1、功能介绍流效劳器的主要功能是管理歌曲库,为各嵌入式节点提供播送和点播的MP3流,并对其进行控制管理。通过计算机技术和嵌入式技术的结合,实现高质量的音频效果,同时实现了上位机对接收节点的分区域、分组或任意节点控制。3.2、系统组成框图流效劳器所在系统组成框图如图1所示:3.3、功能实现本文主要介绍用D

10、elphi编程对MP3流的读取和利用TCP/IP协议与嵌入式节点进行流传输的后台技术的实现,这是整个MP3流效劳器技术的关键和重点,流效劳器窗体界面的设计属于比拟简单的程序设计,此处就不做详细的表达。下面,我们将分点表达各主要功能模块的设计过程。通过上面的分析知道,MP3文件结构大体分为ID3V2,Frame,ID3V1三局部,要准确得读取MP3文件的数据帧Frame就必须计算出文件首部的ID3V2占用的字节数,ID3V2的下一个字节就是第一个帧的首字节。免费论文参考网。计算ID3V2大小的函数GetTagSize前面章节已经介绍,在读取MP3文件前必须在内存里开辟出数据缓冲区以保存读取的流文

11、件。具体实现函数如下:VarMp3Stream: TMemoryStream; /声明流缓冲区Num: integer;Mp3Stream := TMemoryStream.Create; / 建立流Function ReadFrameStream(constFileName: string; StreamSize: integer): Boolean;varSourceFile: file;beginResult :=True;tryAssignFile(SourceFile, FileName);FileMode := 0;Reset(SourceFile, 1); /文件指针复位Seek

12、(SourceFile, GetTagSize(tag) + Num + 1); / 文件指针定位Mp3Stream.Read(SourceFile, StreamSize); / 流读取exceptResult := False;end;end;流媒体协议已经有多种成熟方案,如实时流协议RTSP等,但使用范围都是限制在PC-PC传输的,无法实现对嵌入式终端的控制,因而必须自定义一种上位机与嵌入式终端通讯的协议。经过实验,现采用的自定义数据包协议如下:Send + AA + BB +CC + MM / 发送包Receive + AA +BB + MM / 接收包其中:AA 命令字节BB 包的总

13、字节数CC 序号MM 主体数据为了提高数据包传输的可靠性,我们选用实现高可靠性的包交换传输协议TCP协议来进行数据传输。数据流传送的主要实验过程如下:procedure TFormMain.IdTCPServer1Execute(AContext:TIdContext);varTemp,HeadStr : string;ClientIP:string;ClientPort: integer;Num:integer;beginifPos(Temp, ACK) = 1 then/ 判断命令字else ifPos(Temp, SONG) = 1 thenbegin其他功能语句体end;end;嵌入式

14、终端播放MP3流采用的是硬件解码方式,其工作机制是对接收到的MP3流进行即时播放,每段流数据播放完成时由解码芯片产生一个中断信号给MCU,再由MCU连接流效劳器提出流数据申请。在两次流数据的传输就出现了时间间隔,这个时间关系到流效劳器何时更新播放缓冲区里的流数据,关系到嵌入式终端播放MP3的连贯性。免费论文参考网。分析MP3文件格式知道,流的传输间隔由前次传输的流数据的播放时间决定。为了时间的准确,设置每次传输的流数据的大小均为数据帧Frame的整数倍n,故时间间隔计算公式如下:t play = n * 26ms/frame (单位:毫秒)由于该时间间隔一般为几十个毫秒,故效劳器端计时程序必须

15、满足高精度的要求,误差在一个毫秒之内。取系统级时间精度的计时函数如下:varc1: int64;t1, t2: int64;r1: double;beginQueryPerformanceFrequency(c1);/ 获得系统的高性能频率计数器一毫秒内的震动次数QueryPerformanceCounter(t1); / WINDOWS API 获取开始计数值执行要计时的代码QueryPerformanceCounter(t2); / 获取结束计数值r1 := (t2- t1) / c1 * 1000; / 取得计时时间,单位毫秒(ms)Result :=r1;end;在实际情况中,可能由于网络线路的堵塞或远距离多层交换机的传递造成网络延时加大,出现数毫秒甚至数十毫秒的延时时间,这个时间是叠加在流的传输间隔内的,这就造成了播放时间衔接的不准确。经过分析研究和实验测试,我们采用二级数据缓冲区的方法减少了网络延时造成的传输间隔误差的可能性。二级数据缓冲区建立在嵌入式终端的内存,示意图如图2所示: 在MP3解码完成发出数据请求信号时,终端CPU将播放缓冲区的数据传给MP3解码器,同时将二级缓冲区内的数据存入播放器缓冲区,并同时向流效劳器申请新的数据流。这样处理的结果将会多出一次传送流数据的时间作为缓冲时间,可以大大的减少网

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论