新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Windows CE的嵌入式网络收音机

基于Windows CE的嵌入式网络收音机

作者: 时间:2011-01-17 来源:网络 收藏

2. 3 应用程序开发
Windows CE应用程序使用Embedded Visual C++集成开发环境,并且需要具体平台的SDK支持。本系统利用Platform Builder定制生成的SDK直接进行开发,有效地提高了开发效率。目前,主要流媒体协议分为支持实时流式传输的RTSP协议和支持顺序流式传输的 MMS协议。如rtsp://real.enr.cn:554/encoder/cnr2(中央人民广播电台2台)的地址格式,这类网络数字广播采用 RTSP协议来进行数据传输;如mms://windows_media_server/sample.asf的地址格式,这类网络数字广播采用MMS协议来进行数据传输。
为了尽可能接收到所有网络电台,系统设计兼容两种传输协议。针对系统的特殊性,适用于该方案的系统设计框图如图3所示。系统通过
解析用户输入的网络电台网址,分辨出所访问电台支持的流媒体传输协议,针对两类不同协议作出实时响应,接收数据并播放。
d.JPG

2.3.1 实时流式传输RTSP协议
实时流协议RTSP,用于建立和控制时间同步的连续媒体流,以及控制具有实时特征的数据发送。RTSP提供控制机制,能够处理更高层的问题(例如会话建立和注册),在体系结构上工作在RTP、TCP、UDP等协议的上层。正因为如此,RTSP可以很好地利用人们对现有工业标准的改善和提高,而不需要额外的优化工作。
本系统采用开源软件LIVE库来实现RTP/RTCP协议,包括RTP/RTCP会话的建立、数据的接收。其主要任务是解析RTSP协议,通过 DESCRI-BE、SETUP、PLAY请求来获得数据格式,并将RTP包解包获得MP3帧数据,写入数据接收缓冲区。
LIVE库仅包含4个基本的类:BasicUsageEnvironment、UsageEnvironment、groupsock以及 livemedia。BasicUsageEnvironment和UsageEnvironment负责任务的调度和环境的配置;groupsock负责socks套接字的创建以及相应信息(询问信息和数据信息)的发送接收;Live-
media是整个工程的核心,负责rtsp、session(subsession)和rtcpinstance的运转。
在数据传输过程中,LIVE库根据RTSP协议来建立会话描述。RTSP会话的建立分为以下几个步骤:
①建立使用环境对象,创建客户端。
②由RTSPClient对象向服务器发送OPTION消息并接收回应。
③发送DESCRIBE请求,并解析回应。
④根据SDPDescription在MediaSession中创建MediaSession对象。
⑤配置所有子会话对象。
⑥由RTSPClient对象向服务器发送SETUP消息并接收回应。
⑦由RTSPClient对象向服务器发送PLAY消息并接收回应。
接收到的经过压缩编码的MP3数据只有经过解码后发送给设备,才能实现解码播放。为了缩短开发周期,本文使用LIBMAD库来实现MP3解码。LIBMAD库是一个开源的高精度MPEG音频解码库,支持MPEG-Layer I、MPEG-Layer II和MPEG-Layer III。LIBMAD提供24位的PCM输出,完全是定点计算,非常适合应用在没有浮点支持的平台上。使用LIBMAD提供的一系列API(应用程序编程接口),就可以非常简单地实现MP3数据解码。
为了使系统接收到的音频流数据能够正常解码并播放,系统采用双线程(数据接收线程和音乐播放线程)、双缓冲(数据接收缓冲和音乐播放缓冲)操作。两个线程并发运行,且音乐播放线程运行速度较慢。如果网络速度较快,数据接收线程的接收缓冲区已满,而当前音乐播放线
程正在播放音乐,那么数据接收线程必须停止接收数据。如果不让数据接收线程进入等待状态,它会一直轮询音乐播放线程观察其是否需要数据。简单的轮询会浪费 CPU资源,在这种情况下,有必要让数据接收线程进入等待状态。本系统使用信号量机制来动态控制线程的运行,有效地提高程序执行效率。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)


关键词: 音频 嵌入式

评论


相关推荐

技术专区

关闭