劉 海
隨著多媒體戶外大屏的興起,公共場(chǎng)所、地鐵、廣場(chǎng)等地都紛紛投入了眾多媒體設(shè)備,這些設(shè)備不僅有效地提升了宣傳內(nèi)容的傳播效率,一些可交互式的智能屏設(shè)備更是提供了體驗(yàn)良好的公共服務(wù)。本文結(jié)合青島市廣播電視臺(tái)的應(yīng)用開發(fā)實(shí)例,分享在嵌入式系統(tǒng)中開發(fā)多媒體可交互式屏幕的經(jīng)驗(yàn)與應(yīng)用。
青島是多媒體起步較早的地區(qū),近年更是嘗試了多媒體門戶平臺(tái)、App與相應(yīng)網(wǎng)站、移動(dòng)電視與同頻數(shù)字廣播等各種技術(shù)傳播手段,于是開發(fā)一種基于IP網(wǎng)絡(luò)和廣播網(wǎng)絡(luò)雙網(wǎng)結(jié)構(gòu)的戶外大屏系統(tǒng),能集中展示青島臺(tái)多種媒體的綜合大屏的研發(fā)與實(shí)踐便隨之展開。最終我們交付了一套跨平臺(tái)的程序軟體以及幾種交互終端,它能將青島數(shù)字廣播、主流網(wǎng)站、青島臺(tái)多媒體平臺(tái)、以及日常公益信息的展示融為一體。圖1展示的終端高為2 300mm,寬為880mm,配以55寸3 000尼特高亮度交互觸摸屏。
圖1 高亮度交互觸摸屏
這款設(shè)備之所以設(shè)計(jì)成雙網(wǎng)結(jié)構(gòu)——IP網(wǎng)與數(shù)字廣播接收網(wǎng),目的在于通過終端內(nèi)置CDR(Convergent Digital Radio)廣播接收系統(tǒng)解碼出青島試播的數(shù)字廣播嵌入信息,該信息在災(zāi)害來臨時(shí),即使IP網(wǎng)斷開,仍能通過廣播這種災(zāi)害中被證明最有效的傳播方式,來提供緊急的應(yīng)急與服務(wù)信息[1]。CDR數(shù)字廣播系統(tǒng)智能屏實(shí)時(shí)接收同頻廣播信息,通過獨(dú)有芯片解碼出文字與圖片信息,軟件設(shè)定展示權(quán)限為最高級(jí)別,接收完整信息后屏幕將強(qiáng)制鎖定為應(yīng)急展示界面(圖2),同時(shí)系統(tǒng)聲音功放將播放相應(yīng)信息。當(dāng)無應(yīng)急事件時(shí),系統(tǒng)將使用高速IP網(wǎng)絡(luò)進(jìn)行工作,終端可進(jìn)入交互式界面(圖3),用以展示指定的鏈接內(nèi)容,鏈接功能使用了安全技術(shù),不可隨意輸入,不可下載資源或運(yùn)行腳本,技術(shù)上實(shí)現(xiàn)了瀏覽內(nèi)容的安全;同時(shí)界面可隨時(shí)更新,用以引導(dǎo)群眾多瀏覽公益知識(shí)、宣教內(nèi)容。
圖2 鎖屏應(yīng)急信息界面
圖3 交互界面
大屏同時(shí)支持播出單播放,在指定時(shí)段展示媒體內(nèi)容,包括指定的圖片、視頻、以及電視廣播節(jié)目,支持實(shí)時(shí)推流直播,可由后臺(tái)將各種直播信號(hào)推流到服務(wù)器,并由大屏幕展示。
多媒體系統(tǒng)邏輯上由顯示系統(tǒng)、CDR(Convergent Digital Radio)接收系統(tǒng)、狀態(tài)監(jiān)測(cè)系統(tǒng)三大部分構(gòu)造而成,如圖4所示,顯示系統(tǒng)負(fù)責(zé)所有的界面交互邏輯與平時(shí)公益信息的展示;CDR接收系統(tǒng)負(fù)責(zé)實(shí)時(shí)接收CDR廣播的內(nèi)容,并解壓提出相關(guān)的嵌入信號(hào),解壓后通過相應(yīng)的串口信號(hào)發(fā)送到顯示系統(tǒng);狀態(tài)監(jiān)測(cè)系統(tǒng)則時(shí)刻注意著設(shè)備自身的狀態(tài),通過浸水檢測(cè)器、煙火監(jiān)測(cè)器、防震檢測(cè)器等嵌入模塊,隨時(shí)監(jiān)控設(shè)備的狀態(tài),并將信息發(fā)送到監(jiān)控中心。這三部分各自由編寫的三個(gè)程序控制,并配有進(jìn)程狗,在各類Linux系統(tǒng)和Windows系統(tǒng)上均能良好的編譯運(yùn)行。
圖4 多媒體系統(tǒng)中配備的三個(gè)子模塊系統(tǒng)
三個(gè)系統(tǒng)互相獨(dú)立存在,通過連線與協(xié)議互相連接。CDR接收系統(tǒng)在得到報(bào)警信息后,還能直接輸出蜂鳴報(bào)警聲音,避免單獨(dú)一個(gè)系統(tǒng)損壞影響其它系統(tǒng)功能。
顯示系統(tǒng)是展示的核心,也是最為復(fù)雜的部分,在考慮到多平臺(tái)、易于開發(fā)部署、生態(tài)豐富等要求后,最終采用了Electron技術(shù)[2],這讓我們不僅可以方便測(cè)試,也便于在不同的系統(tǒng)下,讀取多種連接串口的輸入信號(hào)。
在實(shí)際開發(fā)中,我們運(yùn)用了Vue[3]與Electron結(jié)合的方式來進(jìn)行技術(shù)實(shí)現(xiàn),使用的Vue-Electron-builder[4]。之所以選擇Vue技術(shù),他有幾大優(yōu)勢(shì):
1)它賦予界面開發(fā)一個(gè)MVVM(Model,View,ViewModel)的架構(gòu)。
2)它將Electron中的多網(wǎng)頁(yè)結(jié)構(gòu)變成了SPA架構(gòu)(Single Page Application),單網(wǎng)頁(yè)架構(gòu)的最大好處在與它節(jié)省了Electron中各窗口之間的多線程通信,即再也不用使用多個(gè)ipcMain與ipcRender之間相互通信,降低了通信研發(fā)成本。
3)通過VUE的router機(jī)制,可以做出復(fù)雜的界面邏輯,并盡量保證其組件化,開發(fā)起來迅捷快速。
4)通過Vue搭建的VUEX,可以保持狀態(tài)的統(tǒng)一化以及通用功能在組件之間的復(fù)用。
從前文闡述中可知,我們的顯示系統(tǒng)一直在接收CDR接收系統(tǒng)解碼出來的串口信號(hào)。這里涉及兩個(gè)問題,一是廣播解碼下來的串口信號(hào)并不穩(wěn)定,偶有誤碼產(chǎn)生;一是我們需要在顯示中鎖屏,使得界面無法交互并立即顯示正確信息。
解決串口信息不穩(wěn)定的情況要從我們的實(shí)際測(cè)試中來尋找比較合適的辦法。CDR嵌入信號(hào)目前傳輸?shù)膫鬏攷挒?10Kbps,當(dāng)傳輸文字信息時(shí),一般不會(huì)超過500字,假設(shè)我們?cè)O(shè)定重復(fù)播發(fā)信息的周期為1S,并在信息的發(fā)端將文字分段標(biāo)識(shí)并配置驗(yàn)證碼,比如將字符串“information1information2”分成兩段加上標(biāo)識(shí):“
在Vue-Electron架構(gòu)中,我們把這段串口的解析程序單獨(dú)做成一個(gè)線程,按照Electron推薦的方法[5],我們單獨(dú)創(chuàng)立一個(gè)不可見的子窗口,并運(yùn)行這段程序,設(shè)置窗口崩潰時(shí)自動(dòng)重啟。通過這樣的方式,我們就可以在后臺(tái)運(yùn)行一個(gè)一直監(jiān)聽串口接收信號(hào),并在接收完整后立即鎖屏切換的線程。
為了做到界面之間根據(jù)狀態(tài)的切換,實(shí)際上我們使用的是Vue Router,以及VUEX。當(dāng)我們有鎖屏的需求時(shí),事實(shí)上我們其實(shí)是在router中做了一個(gè)“/locking-screen”的路徑,并配置一個(gè)沒有任何界面響應(yīng)的“l(fā)ocking-screen.vue”文件,這樣當(dāng)我們?cè)谌魏吻闆r與條件下,只需調(diào)用this.$router.push(‘/ locking-screen’),就能夠進(jìn)入到這個(gè)界面中,完成了鎖屏預(yù)警信息的展示。
同時(shí)我們還需要一個(gè)退出的機(jī)制,如倒計(jì)時(shí)60秒,此時(shí)再無CDR信息輸入,那么我們就調(diào)用this.$router.push(‘/‘),返回屏幕初始狀態(tài)。而這個(gè)倒計(jì)時(shí)則返回的功能,以及一些狀態(tài)我們會(huì)在全局中經(jīng)常用到。比如正在瀏覽,人走后需要過段時(shí)間自動(dòng)切回;如長(zhǎng)時(shí)間無人互動(dòng)屏幕,則播放播單等等。由于這個(gè)功能在此系統(tǒng)中如此常見,而且需要很多的全局狀態(tài),我們選擇使用了Vuex,優(yōu)點(diǎn)是代碼條理清晰,遠(yuǎn)勝于Electron各窗口進(jìn)程的獨(dú)自管理。
如上,在vuex的actions中設(shè)置異步函數(shù),各個(gè)組件通過讀寫state來掌控頁(yè)面的狀態(tài),同時(shí)傳入closeFunc作為倒計(jì)時(shí)結(jié)束后的執(zhí)行動(dòng)作,達(dá)到了功能復(fù)用,狀態(tài)唯一。
縱觀本程序,由于選用了Vue-Electron的方式,我們可以使用很多NPM組件[6],比如串口就可以使用SerialPort這個(gè)組件[7],樣式則可以使用Vuetify[8],這里需要注意的一點(diǎn)是,當(dāng)使用SerialPort這種組件時(shí),需要在vue.config.js中添加如下配置。
系統(tǒng)主要構(gòu)成由硬件和軟件組成,硬件部分采用ESP32+STM32雙芯片共同服務(wù)模式。ESP32主要功能是將數(shù)據(jù)上傳到MQTT服務(wù)器(圖5),同時(shí)還負(fù)責(zé)對(duì)光照,電壓,空氣質(zhì)量,液晶顯示屏的處理。STM32負(fù)責(zé)溫濕度,門磁,漏水,振動(dòng)開關(guān)的處理及繼電器的操作,STM32通過串口與ESP32通信。采用雙芯片工作模式的優(yōu)點(diǎn)是提高系統(tǒng)可靠性,數(shù)據(jù)采集更準(zhǔn)確,靈活性更高。ESP32將采集到的數(shù)據(jù)上傳到MQTT服務(wù)器,MQTT服務(wù)器將數(shù)據(jù)轉(zhuǎn)發(fā)到后臺(tái)的設(shè)備GIS監(jiān)控服務(wù)器,這樣我們就可以在后端的地圖監(jiān)控系統(tǒng)中看到設(shè)備運(yùn)行時(shí)的監(jiān)控指標(biāo)了。
圖5 MQTT服務(wù)器基本通訊簡(jiǎn)圖
CDR接收系統(tǒng)(圖6)核心芯片是我國(guó)自主知識(shí)產(chǎn)權(quán)的芯片,單芯片集成400MHZ、32位MIPS指令集的龍芯處理器,芯片集成射頻調(diào)諧器、CDR/FM解調(diào)和AD/DA電路,并具有射頻信號(hào)處理專用的DSP電路和USB接口電路。
圖6 CDR接收系統(tǒng)工作流程圖
CDR接收系統(tǒng)將數(shù)字音頻信號(hào)中的嵌入信息不斷解碼,通過程序驗(yàn)正完整性后,將信息傳遞給顯示系統(tǒng),得以優(yōu)先展示。
多媒體大屏嵌入式系統(tǒng)原型試成并運(yùn)行,有效的整合了青島臺(tái)平臺(tái)資源,在公眾展示屏這一概念下,拓展了資訊的展示渠道,添加了新的賽道與舞臺(tái)。綜合本系統(tǒng)來說,使用的硬件與軟件都具有跨平臺(tái)性,在自研成品能良好展示、完成目標(biāo)功能的同時(shí),與第三方合作共同開發(fā)下,也有著強(qiáng)大的整合與移植能力,如在Windows系統(tǒng)下的公交亭系統(tǒng)(圖7),我們可以迅速改造與融合??梢哉f為青島廣電的嵌入式產(chǎn)品開發(fā),打下了一個(gè)良好的開端。
圖7 Windows系統(tǒng)公交亭展示屏產(chǎn)品