欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

应用于嵌入式终端的MP3流服务器的设计*

时间:2011-04-23  作者:秩名
3、MP3流服务器设计
3.1、功能介绍
流服务器的主要功能是管理歌曲库,为各嵌入式节点提供广播和点播的MP3流,并对其进行控制管理。通过计算机技术和嵌入式技术的结合,实现高质量的音频效果,同时实现了上位机对接收节点的分区域、分组或任意节点控制。
3.2、系统组成框图
流服务器所在系统组成框图如图1所示:














3.3、功能实现
本文主要介绍用Delphi编程对MP3流的读取和利用TCP/IP协议与嵌入式节点进行流传输的后台技术的实现,这是整个MP3流服务器技术的关键和重点,流服务器窗体界面的设计属于比较简单的程序设计,此处就不做详细的叙述。下面,我们将分点叙述各主要功能模块的设计过程。
3.3.1、流的读取
通过上面的分析知道,MP3文件结构大体分为ID3V2,Frame,ID3V1三部分,要准确得读取MP3文件的数据帧Frame就必须计算出文件首部的ID3V2占用的字节数,ID3V2的下一个字节就是第一个帧的首字节。免费论文参考网。
计算ID3V2大小的函数GetTagSize前面章节已经介绍,在读取MP3文件前必须在内存里开辟出数据缓冲区以保存读取的流文件。具体实现函数如下:
Var
Mp3Stream: TMemoryStream; //声明流缓冲区
Num: integer;
Mp3Stream := TMemoryStream.Create; // 建立流
Function ReadFrameStream(constFileName: string; StreamSize: integer): Boolean;
var
SourceFile: file;
begin
Result :=True;
try
AssignFile(SourceFile, FileName);
FileMode := 0;
Reset(SourceFile, 1); //文件指针复位
Seek(SourceFile, GetTagSize(tag) + Num + 1); // 文件指针定位
Mp3Stream.Read(SourceFile, StreamSize); // 流读取
except
Result := False;
end;
end;
3.3.2、流的传输
流媒体协议已经有多种成熟方案,如实时流协议RTSP等,但使用范围都是限制在PC-PC传输的,无法实现对嵌入式终端的控制,因而必须自定义一种上位机与嵌入式终端通讯的协议。经过实验,现采用的自定义数据包协议如下:
Send + AA + BB +CC + MM // 发送包
Receive + AA +BB + MM // 接收包
其中:AA —— 命令字节
BB —— 包的总字节数
CC —— 序号
MM —— 主体数据
为了提高数据包传输的可靠性,我们选用实现高可靠性的包交换传输协议TCP协议来进行数据传输。数据流传送的主要实验过程如下:
procedure TFormMain.IdTCPServer1Execute(AContext:TIdContext);
var
Temp,HeadStr : string;
ClientIP:string;
ClientPort: integer;
Num:integer;
begin
Temp :=AContext.Connection.Socket.ReadLn;
ClientIP:= AContext.Binding.PeerIP;
ClientPort := AContext.Binding.PeerPort;
ifPos(Temp, 'ACK') = 1 then// 判断命令字
AContext.Connection.IOHandler.Write(Mp3Stream, Num) // 传送流
else ifPos(Temp, 'SONG') = 1 then
begin
{其他功能语句体}
end;
end;
3.3.3、流的传输间隔
嵌入式终端播放MP3流采用的是硬件解码方式,其工作机制是对接收到的MP3流进行即时播放,每段流数据播放完成时由解码芯片产生一个中断信号给MCU,再由MCU连接流服务器提出流数据申请。在两次流数据的传输就出现了时间间隔,这个时间关系到流服务器何时更新播放缓冲区里的流数据,关系到嵌入式终端播放MP3的连贯性。免费论文参考网。分析MP3文件格式知道,流的传输间隔由前次传输的流数据的播放时间决定。为了时间的准确,设置每次传输的流数据的大小均为数据帧Frame的整数倍n,故时间间隔计算公式如下:
t play = n * 26ms/frame (单位:毫秒)
由于该时间间隔一般为几十个毫秒,故服务器端计时程序必须满足高精度的要求,误差在一个毫秒之内。取系统级时间精度的计时函数如下:
var
c1: int64;
t1, t2: int64;
r1: double;
begin
QueryPerformanceFrequency(c1);// 获得系统的高性能频率计数器一毫秒内的震动次数
QueryPerformanceCounter(t1); // WINDOWS API 获取开始计数值
{执行要计时的代码}
QueryPerformanceCounter(t2); // 获取结束计数值
r1 := (t2- t1) / c1 * 1000; // 取得计时时间,单位毫秒(ms)
Result :=r1;
end;
3.3.4、误差分析
在实际情况中,可能由于网络线路的堵塞或远距离多层交换机的传递造成网络延时加大,出现数毫秒甚至数十毫秒的延时时间,这个时间是叠加在流的传输间隔内的,这就造成了播放时间衔接的不准确。经过分析研究和实验测试,我们采用二级数据缓冲区的办法减少了网络延时造成的传输间隔误差的可能性。二级数据缓冲区建立在嵌入式终端的内存,示意图如图2所示:

 

 
 







在MP3解码完成发出数据请求信号时,终端CPU将播放缓冲区的数据传给MP3解码器,同时将二级缓冲区内的数据存入播放器缓冲区,并同时向流服务器申请新的数据流。这样处理的结果将会多出一次传送流数据的时间作为缓冲时间,可以大大的减少网络延时造成误差的可能性。
4、结束语
应用于嵌入式终端的MP3流服务器主要用于智能化校园广播系统,结合控制部分模块的功能,能满足学校的现代化信息教学对广播系统的要求,具有教高的商业开发价值,也能给同类产品的开发提供技术参考。
参考文献:
[1]赛奎春,陈紫鸿,宋坤.Delphi数据库开发关键技术与实例应用[M].北京:人民邮电出版社,2004
[2]王春红.Delphi7程序设计[M].北京:清华大学出版社;北京交通大学出版社,2004.3
[3]Cervera,Teresa,The effect of MPEG audio compressionon multidimensional set of voice parameters,LogopedicsPhoniatrics Vocology,2001.8
[4]M.Nilsson,ID3 tag version 2.3.0 [DB/OL], http://www.id3.org/id3v2.3.0
 

查看相关论文专题
加入收藏  打印本文
上一篇论文:引入JAVASCRIPT框架解决WEB程序开发中浏览器兼容性问题
下一篇论文:用Authorware实现CAI课件中声音的交互播放(图文)
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文