劉偉東 楊俊康
(作者單位:紫金電視調(diào)頻轉(zhuǎn)播臺(tái))
廣播電視是引導(dǎo)全社會(huì)樹立正確價(jià)值觀,弘揚(yáng)社會(huì)主旋律、傳播正能量、推動(dòng)科學(xué)文化傳播和社會(huì)發(fā)展的重要媒介[1],也是黨和政府傳播意識(shí)形態(tài)、鞏固黨和人民共同思想基礎(chǔ)的有效途徑[2]。
在如今的數(shù)字化時(shí)代,媒體融合發(fā)展是傳統(tǒng)廣電創(chuàng)新轉(zhuǎn)型的趨勢(shì),也是國(guó)家戰(zhàn)略。要實(shí)現(xiàn)媒體融合,就需要在智慧廣電建設(shè)的路徑下去推動(dòng),媒體融合是方向,智慧廣電是實(shí)踐路徑。國(guó)家廣播電視總局也在2018年11月印發(fā)《關(guān)于促進(jìn)智慧廣電發(fā)展的指導(dǎo)意見》,為智慧廣電的發(fā)展指明了要點(diǎn),推動(dòng)智慧廣電建設(shè)[3]。
在智慧廣電建設(shè)中,智慧運(yùn)維又是重要環(huán)節(jié)。它通過數(shù)字化、網(wǎng)絡(luò)化、智慧化的方式助力廣播電視安全播出,是保障廣電視聽安全的重要舉措[4]。
發(fā)射臺(tái)智慧運(yùn)維一般過程是數(shù)據(jù)采集、存儲(chǔ)管理、處理分析、智能控制、可視化呈現(xiàn)、異態(tài)報(bào)警通知,涉及物聯(lián)網(wǎng)、流媒體、數(shù)據(jù)存儲(chǔ)、專用算法、萬維網(wǎng)(World Wide Web, Web)、移動(dòng)開發(fā)等技術(shù)??蓪?shí)現(xiàn)節(jié)傳設(shè)備、發(fā)射機(jī)、信源/節(jié)目、動(dòng)力環(huán)境等的智能監(jiān)管。但他們都是獨(dú)立的業(yè)務(wù)模塊,需要一個(gè)將分散業(yè)務(wù)整合起來的功能,這就需要提到本次介紹的全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖。
鏈路圖是一種圖形化表示系統(tǒng)內(nèi)組件間邏輯關(guān)系的展示方式。在鏈路圖中,通常通過節(jié)點(diǎn)或符號(hào)來表示一個(gè)組件,以組件之間的連線或者箭頭來表示組件間的邏輯關(guān)系。
發(fā)射臺(tái)的全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖(見圖1)能夠?qū)崿F(xiàn)對(duì)眾多節(jié)傳設(shè)備、發(fā)射機(jī)實(shí)時(shí)工況監(jiān)測(cè)、信源狀態(tài)監(jiān)測(cè)、節(jié)目播出情況監(jiān)測(cè)。同時(shí),展示頻點(diǎn)發(fā)射鏈路中信號(hào)的流向,即從衛(wèi)星、光纖、微波接收信號(hào)開始,到發(fā)射塔發(fā)射結(jié)束的全鏈路監(jiān)控展示。
全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖是發(fā)射臺(tái)智慧運(yùn)維系統(tǒng)的重要組成部分,它在全鏈路監(jiān)測(cè)環(huán)節(jié)具有如下三點(diǎn)重要作用:
(1)直觀展示廣電傳輸網(wǎng)絡(luò)的結(jié)構(gòu)和連接關(guān)系,使信號(hào)傳輸過程的監(jiān)測(cè)和管理變得更加方便。
(2)展示系統(tǒng)內(nèi)各設(shè)備節(jié)點(diǎn)的實(shí)時(shí)工況、信源/節(jié)目情況,幫助值班人員更簡(jiǎn)單、清晰地了解整個(gè)系統(tǒng)的運(yùn)行狀態(tài)。
(3)當(dāng)發(fā)生故障時(shí),可以協(xié)助值班人員快速定位故障點(diǎn),使故障能夠得到及時(shí)處理。
總而言之,全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖可以滿足全鏈路集中監(jiān)管需求,提高值班人員監(jiān)管效率,助力整套發(fā)射系統(tǒng)穩(wěn)定運(yùn)行,在一定程度上降低了播出風(fēng)險(xiǎn)。
系統(tǒng)總體為瀏覽器/服務(wù)器模式(Browser/Server,B/S)架構(gòu)。其中,瀏覽器作為全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖的用戶顯示前端,擺脫了固定在應(yīng)用程序(Application,App)上使用的限制,打開手機(jī)、平板或是計(jì)算機(jī)中的瀏覽器,使用局域網(wǎng),即可訪問全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖頁(yè)面,隨時(shí)隨地進(jìn)行監(jiān)測(cè)監(jiān)管。
全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖整合了節(jié)傳設(shè)備、發(fā)射機(jī)、信源節(jié)目等對(duì)象,每一個(gè)對(duì)象都擁有一個(gè)管理層,管理層獲取對(duì)象的實(shí)時(shí)工況信息、判斷報(bào)警,并與全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖共享數(shù)據(jù)、實(shí)時(shí)聯(lián)動(dòng)。
節(jié)傳設(shè)備在通信網(wǎng)絡(luò)中,一般充當(dāng)服務(wù)器的角色。也就是說,通信另一方的客戶端需要知道設(shè)備的網(wǎng)絡(luò)IP地址,然后才能進(jìn)行鏈接并通信。發(fā)射臺(tái)里節(jié)傳設(shè)備眾多,如果是手動(dòng)管理地址,那么需要逐個(gè)設(shè)置每個(gè)節(jié)傳設(shè)備的IP地址,這是一件相當(dāng)煩瑣、重復(fù)性高,且容易出錯(cuò)的事情。
更加方便快捷,并且更不易出錯(cuò)的IP地址管理方式應(yīng)該是啟用動(dòng)態(tài)主機(jī)配置協(xié)議(Dynamic Host Configuration Protocol, DHCP),讓DHCP服務(wù)器動(dòng)態(tài)分配IP地址給每個(gè)設(shè)備。但I(xiàn)P動(dòng)態(tài)分配后,設(shè)備管理端又無法直接獲取設(shè)備的IP地址,這時(shí)就需要通過設(shè)備發(fā)現(xiàn)來獲取。
IP地址動(dòng)態(tài)分配后,局域網(wǎng)內(nèi)每臺(tái)設(shè)備的IP地址就是變化的,設(shè)備就需要一種方式將自己的IP地址通知給管理端。傳輸控制協(xié)議(Transmission Control Protocol, TCP)只能在知道目標(biāo)IP端口的情況下,點(diǎn)對(duì)點(diǎn)通信,所以選擇用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol, UDP)下的廣播或組播進(jìn)行一對(duì)多通信。將自己的IP按一定協(xié)議封裝后,“喊”給局域網(wǎng)內(nèi)的所有通信對(duì)象“聽”,客戶端“聽到”后按預(yù)先約定協(xié)議解析后便能得到對(duì)方的IP地址。
由于廣播傳播數(shù)據(jù)時(shí),會(huì)把同一數(shù)據(jù)包復(fù)制給網(wǎng)絡(luò)中的所有主機(jī),浪費(fèi)了一定的帶寬,特定條件還可能造成廣播風(fēng)暴,引起網(wǎng)絡(luò)癱瘓。反觀組播,其數(shù)據(jù)只傳遞給加入該組的成員主機(jī),傳播過程中只有一份數(shù)據(jù),在臨近成員主機(jī)的組播路由器時(shí)才復(fù)制并分發(fā)數(shù)據(jù)給成員主機(jī),節(jié)省了網(wǎng)絡(luò)帶寬。選擇UDP組播方式傳遞IP地址給客戶端是最佳方案。
但UDP不提供傳輸可靠性,消息存在丟失的可能,需要在通信協(xié)議上確保通信的可靠性。因此,需學(xué)習(xí)TCP協(xié)議底層通信機(jī)制,即通過確認(rèn)應(yīng)答來相互確認(rèn)已收到對(duì)方發(fā)送的消息,同時(shí)聯(lián)合超時(shí)重傳機(jī)制,確保設(shè)備發(fā)現(xiàn)過程的可靠性。
最后,在數(shù)據(jù)通信時(shí)采用面向鏈接的、可靠傳輸?shù)腡CP協(xié)議,以便及時(shí)發(fā)現(xiàn)節(jié)傳設(shè)備損壞、斷電、斷網(wǎng)等突然“下線”的情況,發(fā)現(xiàn)流程如下:
2.2.1 設(shè)備端發(fā)現(xiàn)流程
(1)設(shè)備接入網(wǎng)絡(luò)并獲取DHCP動(dòng)態(tài)分配的網(wǎng)絡(luò)IP地址。
(2)空閑時(shí)主動(dòng)發(fā)送UDP組播消息,通告自己上線。
(3)利用定時(shí)器中斷的觸發(fā)時(shí)間,等待管理端回復(fù)上線確認(rèn)。
(4)如果中斷觸發(fā)前仍未收到管理端上線確認(rèn)消息,再次通告上線消息。
(5)否則,向管理端進(jìn)行UDP點(diǎn)對(duì)點(diǎn)回復(fù)上線完成消息,并關(guān)閉該中斷。
(6)開啟TCP服務(wù)等待管理端鏈接。
2.2.2 管理端發(fā)現(xiàn)流程
(1)管理端接入網(wǎng)絡(luò)并獲取分配的網(wǎng)絡(luò)IP地址。
(2)加入同一組播地址,接收設(shè)備上線通知。
(3)收到設(shè)備上線消息后,針對(duì)該設(shè)備進(jìn)行UDP點(diǎn)對(duì)點(diǎn)回復(fù)上線確認(rèn)消息。
(4)利用定時(shí)器,等待設(shè)備上線完成消息。
(5)如果超時(shí)前收到上線完成消息,以TCP客戶端身份鏈接設(shè)備端。
(6)否則,再次進(jìn)行UDP點(diǎn)對(duì)點(diǎn)回復(fù)上線確認(rèn)。
發(fā)射機(jī)廠家繁多,同一廠家的發(fā)射機(jī)協(xié)議版本也多,需要想辦法封裝發(fā)射機(jī)協(xié)議細(xì)節(jié),解耦通信上下游的協(xié)議依賴,將添加或改變協(xié)議的影響控制在最小范圍。
最終選擇在管理層與發(fā)射機(jī)之間添加嵌入式層來封裝協(xié)議細(xì)節(jié),嵌入式層對(duì)接發(fā)射機(jī),將各種各樣的發(fā)射機(jī)協(xié)議轉(zhuǎn)換為統(tǒng)一的協(xié)議后發(fā)送給管理層。
嵌入式層與管理端序列化協(xié)議設(shè)計(jì)如下:
(1)報(bào)頭/報(bào)尾:確定協(xié)議的開始/結(jié)束。
(2)消息ID:表示消息號(hào),是單調(diào)遞增的數(shù)字,具有唯一性、有序性的特點(diǎn),讓消息具有冪等性。
(3)模塊類型/模塊地址:用來區(qū)分功能模塊,將采集、控制、設(shè)置、空中下載(Over-the-Air,OTA)等劃分為獨(dú)立模塊,并通過模塊地址尋址。
(4)命令代碼:表示操作指令,用來區(qū)分協(xié)議類型。
(5)數(shù)據(jù)長(zhǎng)度:描述數(shù)據(jù)段的長(zhǎng)度(字節(jié))。
(6)數(shù)據(jù)段區(qū)域承載通信的內(nèi)容。
(7)檢驗(yàn)和:保證通信內(nèi)容的完整性、準(zhǔn)確性,通信的兩端均以消息相同部分作為計(jì)算參數(shù),使用相同的算法進(jìn)行計(jì)算,如果接收端計(jì)算的結(jié)果與校驗(yàn)和不同,則表明傳輸過程出現(xiàn)了差錯(cuò)[5]。
數(shù)據(jù)段為參數(shù)列表,其為封裝發(fā)射機(jī)協(xié)議細(xì)節(jié)的關(guān)鍵。
一個(gè)參數(shù)由參數(shù)代碼、參數(shù)長(zhǎng)度、參數(shù)內(nèi)容組成,參數(shù)列表表示多個(gè)參數(shù)的集合。
(1)參數(shù)代碼:描述參數(shù)值的類型。
(2)參數(shù)長(zhǎng)度:描述參數(shù)值占用字節(jié)數(shù)。
(3)參數(shù)值:表示參數(shù)的內(nèi)容。
通過列表化發(fā)射機(jī)屬性后,管理層以及后續(xù)層級(jí)看不到各式各樣發(fā)射機(jī)協(xié)議上發(fā)射機(jī)屬性的差異,只需統(tǒng)一以列表的方式識(shí)別參數(shù),通過參數(shù)代碼判斷參數(shù)類型,隨后進(jìn)行相應(yīng)邏輯處理即可。也就達(dá)成了封裝發(fā)射機(jī)協(xié)議細(xì)節(jié),解耦通信上下游的協(xié)議依賴的目的。
對(duì)比參數(shù)列表方案與常用方案,通過結(jié)構(gòu)體方式描述協(xié)議(在數(shù)據(jù)段填“普通舊數(shù)據(jù)”類型結(jié)構(gòu)體)。假設(shè)發(fā)射機(jī)生產(chǎn)廠家數(shù)為M,每個(gè)廠家有N種發(fā)射機(jī),通信鏈路有K層:
(1)結(jié)構(gòu)體方案:K層通信鏈路,序列化反序列化次數(shù)之和為2(K-1),接入全部N×M種協(xié)議。因?yàn)槊糠N協(xié)議發(fā)射機(jī)屬性不同,所以數(shù)據(jù)段承載的結(jié)構(gòu)體也必然不同,而每種結(jié)構(gòu)體都需要獨(dú)立的序列化與反序列化代碼。最終,序列化與反序列化代碼一共需要增加(N×M)×2(K-1)處。
(2)參數(shù)列表方案:K層通信鏈路,序列化反序列化次數(shù)之和為2(K-1),接入全部N×M種協(xié)議。由于以同樣的結(jié)構(gòu)傳遞N×M協(xié)議,所以反序列化處代碼可通用,僅需增加1處即可;序列化處需要將N×M種協(xié)議轉(zhuǎn)換為參數(shù)列表,需要增加(N×M)處代碼。最終,序列化與反序列化代碼一共需增加N×M+1處代碼。
參數(shù)列表化方案比常用方案減少了(N×M)×2(K-1)-N×M+1處代碼,提高了編碼效率,也減少了產(chǎn)生程序錯(cuò)誤的可能。
節(jié)目來自組播信源流,一個(gè)信源流內(nèi)包含多套節(jié)目。為了達(dá)到實(shí)時(shí)播放的目的,需要實(shí)現(xiàn)流媒體服務(wù)器推送視頻/音頻流,網(wǎng)頁(yè)前端播放器在下載的同時(shí)進(jìn)行播放。
國(guó)內(nèi)主流的直播流媒體協(xié)議有動(dòng)態(tài)碼率自適應(yīng)技術(shù)(HTTP Live Streaming, HLS)、實(shí)時(shí)消息傳輸協(xié)議(Real Time Messaging Protocol, RTMP)、HTTP-FLV(即將音視頻數(shù)據(jù)封裝成FLV,然后通過HTTP協(xié)議傳輸給客戶端)。
HLS通過超文本傳輸協(xié)議(Hypertext Transfer Protocol, HTTP)傳輸,優(yōu)點(diǎn)是能夠避免防火墻攔截,自帶動(dòng)態(tài)碼率自適應(yīng),支持平臺(tái)多。其缺點(diǎn)是播放時(shí)會(huì)不停獲取視頻切片,延遲較高。
RTMP通過TCP傳輸,延遲低,長(zhǎng)時(shí)間播放穩(wěn)定,計(jì)算機(jī)平臺(tái)普遍可播放,但不支持HTML5(構(gòu)建Web內(nèi)容的一種語(yǔ)言描述方式),也存在被防火墻攔截的可能。
HTTP-FLV通過HTTP傳輸,能夠避免防火墻攔截,播放時(shí)沒有復(fù)雜交互,延遲較低,支持HTML5。
對(duì)比之后,最終選擇HTTP-FLV方式實(shí)現(xiàn)流媒體服務(wù)器的推流。
流媒體服務(wù)器運(yùn)行流程如圖2所示:
圖2 流媒體服務(wù)器運(yùn)行流程
由于發(fā)射臺(tái)性質(zhì)的差異,各臺(tái)站的節(jié)傳設(shè)備種類、節(jié)目類型、信號(hào)傳輸拓?fù)浣Y(jié)構(gòu)均有所差異,為了適應(yīng)這種差異化,真實(shí)布局臺(tái)站的實(shí)際傳輸鏈路,全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖需要做到可編輯。
編輯主要涉及兩點(diǎn):一是管理鏈路與節(jié)點(diǎn)基本屬性,同時(shí)負(fù)責(zé)管理鏈路與節(jié)點(diǎn)間的歸屬關(guān)系、節(jié)點(diǎn)與具體節(jié)傳設(shè)備/發(fā)射機(jī)/節(jié)目的對(duì)應(yīng)關(guān)系;二是可拖拽式布局,主要負(fù)責(zé)節(jié)點(diǎn)在鏈路中的布局,反映鏈路節(jié)點(diǎn)的上下游關(guān)系。經(jīng)過編輯后,真實(shí)鏈路布局便以邏輯關(guān)系的形式映射在鏈路圖中。
在全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖中的每個(gè)設(shè)備節(jié)點(diǎn)、發(fā)射機(jī)節(jié)點(diǎn)、節(jié)目節(jié)點(diǎn)均有全局唯一的ID,數(shù)據(jù)在節(jié)傳設(shè)備、發(fā)射機(jī)管理層、流媒體服務(wù)器與全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖Web服務(wù)器間流轉(zhuǎn)時(shí),通過ID來將每個(gè)節(jié)點(diǎn)進(jìn)行區(qū)分。每當(dāng)節(jié)點(diǎn)對(duì)應(yīng)設(shè)備工況發(fā)生變化或報(bào)警發(fā)生時(shí),網(wǎng)頁(yè)前端根據(jù)唯一ID精準(zhǔn)顯示。
全節(jié)點(diǎn)動(dòng)態(tài)鏈路圖接入并聯(lián)動(dòng)了節(jié)傳設(shè)備、發(fā)射機(jī)、信源節(jié)目,將智慧運(yùn)維系統(tǒng)分散、獨(dú)立的業(yè)務(wù)模塊整合起來,直觀、實(shí)時(shí)地展示鏈路內(nèi)各節(jié)點(diǎn)設(shè)備的工況信息,實(shí)現(xiàn)全鏈路的集中監(jiān)管,使智慧運(yùn)維系統(tǒng)更加完善,定位排障更加容易,監(jiān)管更加高效,系統(tǒng)更加穩(wěn)定。