基于Windows CE的嵌入式網(wǎng)絡(luò )收音機
2. 3 應用程序開(kāi)發(fā)
Windows CE應用程序使用Embedded Visual C++集成開(kāi)發(fā)環(huán)境,并且需要具體平臺的SDK支持。本系統利用Platform Builder定制生成的SDK直接進(jìn)行開(kāi)發(fā),有效地提高了開(kāi)發(fā)效率。目前,主要流媒體協(xié)議分為支持實(shí)時(shí)流式傳輸的RTSP協(xié)議和支持順序流式傳輸的 MMS協(xié)議。如rtsp://real.enr.cn:554/encoder/cnr2(中央人民廣播電臺2臺)的地址格式,這類(lèi)網(wǎng)絡(luò )數字廣播采用 RTSP協(xié)議來(lái)進(jìn)行數據傳輸;如mms://windows_media_server/sample.a(chǎn)sf的地址格式,這類(lèi)網(wǎng)絡(luò )數字廣播采用MMS協(xié)議來(lái)進(jìn)行數據傳輸。
為了盡可能接收到所有網(wǎng)絡(luò )電臺,系統設計兼容兩種傳輸協(xié)議。針對系統的特殊性,適用于該方案的系統設計框圖如圖3所示。系統通過(guò)
解析用戶(hù)輸入的網(wǎng)絡(luò )電臺網(wǎng)址,分辨出所訪(fǎng)問(wèn)電臺支持的流媒體傳輸協(xié)議,針對兩類(lèi)不同協(xié)議作出實(shí)時(shí)響應,接收數據并播放。

2.3.1 實(shí)時(shí)流式傳輸RTSP協(xié)議
實(shí)時(shí)流協(xié)議RTSP,用于建立和控制時(shí)間同步的連續媒體流,以及控制具有實(shí)時(shí)特征的數據發(fā)送。RTSP提供控制機制,能夠處理更高層的問(wèn)題(例如會(huì )話(huà)建立和注冊),在體系結構上工作在RTP、TCP、UDP等協(xié)議的上層。正因為如此,RTSP可以很好地利用人們對現有工業(yè)標準的改善和提高,而不需要額外的優(yōu)化工作。
本系統采用開(kāi)源軟件LIVE庫來(lái)實(shí)現RTP/RTCP協(xié)議,包括RTP/RTCP會(huì )話(huà)的建立、數據的接收。其主要任務(wù)是解析RTSP協(xié)議,通過(guò) DESCRI-BE、SETUP、PLAY請求來(lái)獲得音頻數據格式,并將RTP包解包獲得MP3幀數據,寫(xiě)入數據接收緩沖區。
LIVE庫僅包含4個(gè)基本的類(lèi):BasicUsageEnvironment、UsageEnvironment、groupsock以及 livemedia。BasicUsageEnvironment和UsageEnvironment負責任務(wù)的調度和環(huán)境的配置;groupsock負責socks套接字的創(chuàng )建以及相應信息(詢(xún)問(wèn)信息和數據信息)的發(fā)送接收;Live-
media是整個(gè)工程的核心,負責rtsp、session(subsession)和rtcpinstance的運轉。
在數據傳輸過(guò)程中,LIVE庫根據RTSP協(xié)議來(lái)建立會(huì )話(huà)描述。RTSP會(huì )話(huà)的建立分為以下幾個(gè)步驟:
①建立使用環(huán)境對象,創(chuàng )建客戶(hù)端。
②由RTSPClient對象向服務(wù)器發(fā)送OPTION消息并接收回應。
③發(fā)送DESCRIBE請求,并解析回應。
④根據SDPDescription在MediaSession中創(chuàng )建MediaSession對象。
⑤配置所有子會(huì )話(huà)對象。
⑥由RTSPClient對象向服務(wù)器發(fā)送SETUP消息并接收回應。
⑦由RTSPClient對象向服務(wù)器發(fā)送PLAY消息并接收回應。
接收到的經(jīng)過(guò)壓縮編碼的MP3音頻數據只有經(jīng)過(guò)解碼后發(fā)送給音頻設備,才能實(shí)現解碼播放。為了縮短開(kāi)發(fā)周期,本文使用LIBMAD庫來(lái)實(shí)現MP3解碼。LIBMAD庫是一個(gè)開(kāi)源的高精度MPEG音頻解碼庫,支持MPEG-Layer I、MPEG-Layer II和MPEG-Layer III。LIBMAD提供24位的PCM輸出,完全是定點(diǎn)計算,非常適合應用在沒(méi)有浮點(diǎn)支持的平臺上。使用LIBMAD提供的一系列API(應用程序編程接口),就可以非常簡(jiǎn)單地實(shí)現MP3數據解碼。
為了使系統接收到的音頻流數據能夠正常解碼并播放,系統采用雙線(xiàn)程(數據接收線(xiàn)程和音樂(lè )播放線(xiàn)程)、雙緩沖(數據接收緩沖和音樂(lè )播放緩沖)操作。兩個(gè)線(xiàn)程并發(fā)運行,且音樂(lè )播放線(xiàn)程運行速度較慢。如果網(wǎng)絡(luò )速度較快,數據接收線(xiàn)程的接收緩沖區已滿(mǎn),而當前音樂(lè )播放線(xiàn)
程正在播放音樂(lè ),那么數據接收線(xiàn)程必須停止接收數據。如果不讓數據接收線(xiàn)程進(jìn)入等待狀態(tài),它會(huì )一直輪詢(xún)音樂(lè )播放線(xiàn)程觀(guān)察其是否需要數據。簡(jiǎn)單的輪詢(xún)會(huì )浪費 CPU資源,在這種情況下,有必要讓數據接收線(xiàn)程進(jìn)入等待狀態(tài)。本系統使用信號量機制來(lái)動(dòng)態(tài)控制線(xiàn)程的運行,有效地提高程序執行效率。 linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論