閆渠成,李勇
?。ㄉ虾:J麓髮W(xué) 物流工程學(xué)院,上海 201306)
摘要:提出了基于TMS320C6657的嵌入式Web視頻服務(wù)器設(shè)計(jì)方案。設(shè)計(jì)利用CGI接口實(shí)現(xiàn)瀏覽器端與服務(wù)器端的數(shù)據(jù)交互以及底層硬件的控制,采用H.264視頻編碼壓縮視頻,采用RTP/RTCP協(xié)議實(shí)現(xiàn)實(shí)時(shí)視頻傳輸。實(shí)驗(yàn)證明,基于TMS320C6657的嵌入式Web服務(wù)器性能可靠。
關(guān)鍵詞:TMS320C6657; 嵌入式Web視頻服務(wù)器; 網(wǎng)絡(luò)開(kāi)發(fā)工具包(NDK); H.264
0引言
在工業(yè)探測(cè)系統(tǒng)、工業(yè)控制、智能儀器、安全防衛(wèi)系統(tǒng)等領(lǐng)域中的嵌入式控制系統(tǒng),只要實(shí)現(xiàn)了與網(wǎng)絡(luò)的接入技術(shù),無(wú)論何時(shí)何地,都可以實(shí)現(xiàn)開(kāi)放的、基于網(wǎng)絡(luò)的、低成本的遠(yuǎn)程控制[1]。將嵌入式技術(shù)與 Web 技術(shù)聯(lián)合已經(jīng)成為嵌入式領(lǐng)域的研究熱點(diǎn)[2]。
本文提出了一種基于TMS320C6657的以雙核DSP為核心搭建視頻服務(wù)器平臺(tái)的方案,滿足工業(yè)現(xiàn)場(chǎng)實(shí)時(shí)傳輸視頻和遠(yuǎn)程控制的需求。TMS320C6657是定點(diǎn)/浮點(diǎn)數(shù)字信號(hào)處理器(DSP),基于KeyStone多核架構(gòu),內(nèi)核速度高達(dá)1.25 GHz,集成了C66X內(nèi)核、存儲(chǔ)器子系統(tǒng)、外設(shè)和加速器在內(nèi)的各種子系統(tǒng)。其中千兆以太網(wǎng)子系統(tǒng)具有一個(gè)SGMII端口,支持10/100/1 000 Mb/s操作[3]。內(nèi)置SYS/BIOS操作系統(tǒng),容易實(shí)現(xiàn)TCP/IP協(xié)議,降低了開(kāi)發(fā)難度,縮短了開(kāi)發(fā)周期。
1服務(wù)器硬件結(jié)構(gòu)
TMS320C6657外設(shè)千兆以太網(wǎng)接口和Flash存儲(chǔ)模塊。系統(tǒng)結(jié)構(gòu)如圖1所示。本設(shè)計(jì)中將TMS320C6657設(shè)計(jì)為嵌入式Web服務(wù)器,通過(guò)以太網(wǎng)接口接入上位機(jī)所在的同一個(gè)局域網(wǎng)中。系統(tǒng)運(yùn)行程序存入Flash+存儲(chǔ)模塊,系統(tǒng)上電后寫(xiě)入片上SRAM以及片外DDR3運(yùn)行程序。系統(tǒng)通過(guò)SRIO互聯(lián)方式,將經(jīng)過(guò)FPGA預(yù)處理的視頻碼流送到DSP中并進(jìn)行視頻H.264編碼,壓縮后的視頻碼流將以RTP/RTCP協(xié)議把數(shù)據(jù)打包傳輸給上位機(jī)。上位機(jī)可以在網(wǎng)頁(yè)瀏覽器上通過(guò)安裝插件對(duì)壓縮后的視頻碼流進(jìn)行解碼和遠(yuǎn)程控制Web服務(wù)器改變視頻處理參數(shù),實(shí)現(xiàn)Web視頻服務(wù)器的功能。
2服務(wù)器系統(tǒng)軟件設(shè)計(jì)
TMS320C6657內(nèi)置SYS/BIOS操作系統(tǒng),利用SYS/BIOS操作系統(tǒng)和TI的網(wǎng)絡(luò)開(kāi)發(fā)包NDK即可實(shí)現(xiàn)TCP/IP協(xié)議棧的配置、Web服務(wù)器搭建、多線程任務(wù)管理和用戶交互界面設(shè)計(jì)。通過(guò)H.264編碼器完成視頻編碼,由RTP/RTCP協(xié)議完成視頻流的實(shí)時(shí)傳輸,實(shí)現(xiàn)一個(gè)完整的嵌入式Web服務(wù)器設(shè)計(jì)。
2.1Web服務(wù)器搭建
圖2嵌入式Web視頻服務(wù)器軟件線程結(jié)構(gòu)圖搭建嵌入式Web服務(wù)器必須先配置SYS/BIOS和NDK的相關(guān)基礎(chǔ)模塊,并進(jìn)行必要的參數(shù)設(shè)置。
?。?)添加BIOS操作系統(tǒng)模塊、NDK模塊、EMAC模塊、IP模塊、TCP模塊、HTTP模塊以及添加啟動(dòng)函數(shù)。
?。?)配置IP地址和相關(guān)信息,創(chuàng)建靜態(tài)線程。
?。?)指定相應(yīng)的鉤子函數(shù)主體。
根據(jù)配置文件,只要添加了NDK相應(yīng)的模塊,就會(huì)執(zhí)行初始化網(wǎng)絡(luò)環(huán)境并開(kāi)啟堆棧線程,通過(guò)CfgNew()創(chuàng)建一個(gè)新的配置。一旦創(chuàng)建完畢就會(huì)執(zhí)行一個(gè)鉤子函數(shù),通常用這個(gè)函數(shù)來(lái)將瀏覽器的網(wǎng)頁(yè)以及CGI接口加入到程序中。堆棧線程還會(huì)根據(jù)配置文件將具體配置數(shù)據(jù)自動(dòng)生成并添加到CfgNew創(chuàng)造的配置文件中。
隨后線程會(huì)調(diào)用NC_NetStart()程序,該程序會(huì)在適當(dāng)?shù)臅r(shí)候調(diào)用相應(yīng)鉤子函數(shù)NetworkOpen(),其作用是加入后臺(tái)程序,實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)。當(dāng)程序監(jiān)聽(tīng)到IP地址發(fā)生變化時(shí),線程會(huì)調(diào)用NetworkIPaddr()函數(shù)。當(dāng)檢測(cè)收發(fā)性能時(shí),TCP、UDP收發(fā)錯(cuò)誤會(huì)調(diào)用NetworkClose()關(guān)閉開(kāi)啟的后臺(tái)線程并釋放相應(yīng)空間。調(diào)用Cfgfree()釋放CfgNew()創(chuàng)建的配置,最后關(guān)閉整個(gè)網(wǎng)絡(luò)線程。
2.2視頻編碼及實(shí)時(shí)傳輸設(shè)計(jì)
目前主流的視頻格式是1 080 p格式,在目前網(wǎng)絡(luò)環(huán)境下,原碼視頻傳輸速度是達(dá)不到實(shí)時(shí)性要求的。采用H.264編碼可以縮小視頻空間,提高傳輸效率。H.264標(biāo)準(zhǔn)汲取以往標(biāo)準(zhǔn)中的優(yōu)點(diǎn),編碼效率與過(guò)去相比最多可節(jié)省50%的碼率,存儲(chǔ)需求大大降低[4]。H.264獲得優(yōu)越性能的代價(jià)是計(jì)算復(fù)雜度的大幅增加[5]。為了滿足靈活性和適應(yīng)性要求,H.264設(shè)計(jì)包含視頻編碼層(VCL)和網(wǎng)絡(luò)抽象層(NAL)兩層[6]。VCL負(fù)責(zé)壓縮內(nèi)容,NAL負(fù)責(zé)傳輸格式化。
視頻源碼從FPGA收到并放入一個(gè)動(dòng)態(tài)創(chuàng)建的緩沖中,通過(guò)TI工具包中的H.264編碼器進(jìn)行編碼。先創(chuàng)建配置編碼器,并在配置完成后開(kāi)始編碼。編碼后經(jīng)壓縮的碼流由RTP模塊進(jìn)行打包發(fā)送。
2.3用戶交互界面設(shè)計(jì)
NDK操作系統(tǒng)庫(kù)中具有嵌入式文件系統(tǒng)(EFS),HTTP服務(wù)器通過(guò)該系統(tǒng)將網(wǎng)頁(yè)及相關(guān)的文件放入指定的存儲(chǔ)介質(zhì)中。先將HTML文件轉(zhuǎn)化成二進(jìn)制數(shù)組文件,調(diào)用EFS接口函數(shù)添加至系統(tǒng)中。
要實(shí)現(xiàn)動(dòng)態(tài)交互的功能,必須使用CGI接口。本設(shè)計(jì)采用網(wǎng)頁(yè)表單數(shù)據(jù)控制并修改TMS320C6657的相關(guān)設(shè)置,調(diào)用CGI程序處理相應(yīng)修改請(qǐng)求。具體實(shí)現(xiàn)如下:
(1)采用POST方式,根據(jù)POST內(nèi)容長(zhǎng)度動(dòng)態(tài)創(chuàng)建緩沖區(qū)大小,通過(guò)recv()函數(shù)讀取數(shù)據(jù)至緩沖區(qū)中。
?。?)通過(guò)cgiParseVars()函數(shù)依次解析數(shù)據(jù)內(nèi)容。
(3)根據(jù)數(shù)據(jù)內(nèi)容處理相應(yīng)請(qǐng)求。
(4)向客戶端發(fā)送HTTP相應(yīng)報(bào)文,動(dòng)態(tài)生成回復(fù)頁(yè)面報(bào)告處理結(jié)果。
?。?)完成并釋放創(chuàng)建空間。
2.4多線程任務(wù)設(shè)計(jì)
為了實(shí)現(xiàn)瀏覽器/服務(wù)器模式以及通過(guò)網(wǎng)頁(yè)對(duì)TMS320C6657底層硬件操作,需要設(shè)計(jì)一個(gè)多線程系統(tǒng)。SYS/BIOS的特點(diǎn)就是優(yōu)先級(jí)搶占式任務(wù)管理,將每一個(gè)線程作為一個(gè)模塊化函數(shù),并設(shè)置特定的優(yōu)先等級(jí),通過(guò)輔助模塊信號(hào)、事件、郵箱達(dá)到對(duì)不同進(jìn)程之間同步、阻塞、通信的目的。
2.4.1系統(tǒng)構(gòu)成
本設(shè)計(jì)的多線程任務(wù)流程如圖2所示。本系統(tǒng)分為3個(gè)部分,主線程用于初始化TMS320C6657硬件及外設(shè)資源,初始化配置文件開(kāi)啟網(wǎng)絡(luò)服務(wù)、后臺(tái)程序,執(zhí)行網(wǎng)絡(luò)基本服務(wù)、視頻編碼及傳輸;控制線程,由一個(gè)或者多個(gè)線程組成,按需動(dòng)態(tài)生成,結(jié)束時(shí)會(huì)向主線程發(fā)出信號(hào)報(bào)告任務(wù)完成。
2.4.2系統(tǒng)線程規(guī)劃
BIOS系統(tǒng)啟動(dòng)后,先會(huì)進(jìn)入主線程打開(kāi)網(wǎng)絡(luò)服務(wù)。配置完相關(guān)設(shè)置后,HTTP服務(wù)器就緒,靜態(tài)網(wǎng)頁(yè)即可打開(kāi),CGI程序等待接收請(qǐng)求。隨后開(kāi)啟后臺(tái)程序,創(chuàng)建緩沖空間執(zhí)行視頻編碼,數(shù)據(jù)打包發(fā)送。用戶打開(kāi)瀏覽器可以在特定頁(yè)面看到視頻流,當(dāng)進(jìn)行相關(guān)操作時(shí),服務(wù)器就會(huì)接收到請(qǐng)求,并在相應(yīng)的CGI 程序中動(dòng)態(tài)創(chuàng)建新的控制線程,等待控制線程的結(jié)束信號(hào)。系統(tǒng)會(huì)一直等待請(qǐng)求,直到網(wǎng)絡(luò)服務(wù)關(guān)閉。
當(dāng)有多個(gè)線程同時(shí)出現(xiàn)在同一個(gè)系統(tǒng)中時(shí)就要考慮優(yōu)先級(jí)關(guān)系。除了提前設(shè)定好優(yōu)先級(jí)以外,它還提供了一些專用模塊確保系統(tǒng)遵循設(shè)計(jì)者的意愿執(zhí)行。本設(shè)計(jì)中使用的是信號(hào)量模塊。信號(hào)量是調(diào)配多個(gè)任務(wù)之間調(diào)用或處理共享信息時(shí)的常用解決方案。信號(hào)量分為單值和多值兩種,本設(shè)計(jì)運(yùn)用單值信號(hào)量來(lái)確保用于底層硬件控制的那些參數(shù)和全局變量會(huì)在動(dòng)態(tài)創(chuàng)建的控制線程里處理完之后才會(huì)被主線程讀取,保證了共享數(shù)據(jù)的安全存取。
3結(jié)果與分析
為檢測(cè)嵌入式Web視頻服務(wù)器的功能,搭建了測(cè)試環(huán)境,分別檢測(cè)服務(wù)器通信速度和服務(wù)器功能。通過(guò)TMS320C6657的以太網(wǎng)接口和上位機(jī)的網(wǎng)口使嵌入式服務(wù)器與上位機(jī)處在同一個(gè)局域網(wǎng)中。
3.1Web服務(wù)器傳輸速度測(cè)試
為了檢測(cè)基礎(chǔ)TCP/UDP的收發(fā),在后臺(tái)程序中加入了檢測(cè)程序。檢測(cè)程序通過(guò)不斷請(qǐng)求發(fā)送和接收檢測(cè)傳輸速度。由于上位機(jī)和TMS320C6657配置的都是千兆網(wǎng)口,理論速度可以達(dá)到128 Mb/s。表1分別是接收和發(fā)送TCP/UDP數(shù)據(jù)的情況。
考慮到緩存大小以及數(shù)據(jù)存儲(chǔ)位置和中間過(guò)程,測(cè)試結(jié)果理想,滿足實(shí)時(shí)傳輸?shù)囊蟆?/p>
3.2Web服務(wù)器功能測(cè)試
為了測(cè)試Web服務(wù)器功能,設(shè)計(jì)了基礎(chǔ)的數(shù)據(jù)交互頁(yè)面,用以測(cè)試基本服務(wù)器功能。當(dāng)服務(wù)器開(kāi)啟時(shí),上位機(jī)打開(kāi)瀏覽器,輸入服務(wù)器的IP地址就可以進(jìn)入服務(wù)器中預(yù)設(shè)的測(cè)試網(wǎng)頁(yè)界面。測(cè)試界面提供了基本的網(wǎng)絡(luò)狀態(tài)信息,支持更改網(wǎng)絡(luò)參數(shù)。如若修改服務(wù)器IP地址,確認(rèn)后可以看到控制臺(tái)界面中服務(wù)器重啟初始化信息,如圖3(a)所示。安裝相應(yīng)的控件,通過(guò)鏈接進(jìn)入視頻流界面,如圖3(b)所示。
經(jīng)過(guò)上述測(cè)試基本功能成功實(shí)現(xiàn),均未出現(xiàn)錯(cuò)誤。網(wǎng)絡(luò)連接及服務(wù)器程序穩(wěn)定可靠。
4結(jié)論
本文分別從服務(wù)器搭建、瀏覽器網(wǎng)頁(yè)設(shè)置、視頻編碼及傳輸和多線程系統(tǒng)設(shè)計(jì)部分介紹了完成構(gòu)建嵌入式Web服務(wù)器的方案和流程,為進(jìn)一步開(kāi)發(fā)嵌入式Web服務(wù)器平臺(tái)提供了很好的指導(dǎo)方法。實(shí)驗(yàn)結(jié)果表明,運(yùn)用TMS320C6657雙核DSP作為嵌入式Web視頻服務(wù)器具有傳輸速度快以及遠(yuǎn)程操控服務(wù)器的優(yōu)點(diǎn),同樣兼顧搭建簡(jiǎn)單、易于維護(hù)和通用性強(qiáng)的特點(diǎn),利用優(yōu)先級(jí)搶占式特性,合理分配多線程能很好地依據(jù)開(kāi)發(fā)者的意愿開(kāi)發(fā)出相應(yīng)的功能,具有很強(qiáng)的實(shí)用性和參考價(jià)值。
參考文獻(xiàn)
?。?] 舒展.嵌入式系統(tǒng)綜述[J].現(xiàn)代計(jì)算機(jī),2011(5):4446.
?。?] 康文廣,胡利民.基于 W3150A+的嵌入式Web服務(wù)器設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010(6):4143.
?。?] TMS320C6657:1.25GHz DSP開(kāi)發(fā)方案[J]. 世界電子元器件,2014(2):1214.
?。?] 李飛,卿粼波,滕奇志,等.H.264高清視頻編碼器的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2015,34(6):4244.