賈大偉 潘明照
(作者單位:平度市融媒體中心)
數字電視在給人民群眾帶來高質量的視聽節目的同時,也為相關從業者開展增值業務帶來可能。數字電視應急信息廣播系統是一種可行的應急廣播實現方式。其編輯制作端軟件的主要作用是制作要播發的應急廣播信息,使之適宜于接收端接收、處理和顯示。
編輯制作端的主要工作是編輯制作信息發送端所需發送的應急業務信息,主要包括以下幾個方面:開機畫面附加信息;主菜單、節目指南及節目切換時附加顯示的信息;用戶調整音量時,音量顯示界面附加顯示的信息;私有數據信息;游動字幕信息;其他信息,如可用于掛角顯示的天氣信息和其他適宜于掛角顯示的信息。
大部分應急信息是采用圖片形式顯示的。這些圖片本身可使用專用圖片制作軟件進行制作。如開機畫面、主菜單、節目指南、節目切換、音量顯示時附加顯示的圖片等都可由專業制作軟件制作完成。編輯制作端將其加密并上傳到數據庫服務器中,發送端讀取相關數據庫記錄就可以定時播發相應的信息。
私有數據信息是根據今后業務的需要,為實現未來機頂盒端的特定功能而播發的私有數據。本系統可支持這些私有數據的播發而不需要重新開發一套播發軟件。私有數據由業務提供者提供,私有數據的發送在發送端也只是將其分段打包,然后轉成傳送流(Transport Stream, TS)包進行發送。
游動字幕信息是可由本系統制作的信息。
編輯制作端的功能:錄入、編輯各類信息,上傳信息并存入數據庫系統;查詢各種歷史記錄;通知發送端發送緊急信息、重置發送端。
與發送端軟件的Win32 控制臺應用程序不同,編輯制作端使用圖形用戶界面(Graphical User Interface,GUI)。具有圖形用戶界面的Windows 程序依靠外部發生的事件來驅動。程序不斷循環以等待可能的輸入,然后做適當的處理。當前所有的GUI 系統,幾乎都是以消息為基礎的事件驅動系統[1-2]。
本系統使用Visual C++開發環境并借助微軟基礎類庫(Microsoft Foundation Classes, MFC)來開發編輯制作端軟件。使用MFC 對Win32 應用程序編程接口及相關機制進行封裝,以便應用程序的開發。
本系統的編輯制作端主要與數據庫打交道,操作的是數據庫記錄,編輯制作端將制作好的信息輸入數據庫中,由發送端取出使用,其查詢的也是數據庫記錄,因而編輯制作端軟件可以不需要文檔支持。同時,編輯制作端的設計也不采用基于對話框的應用程序,因為編輯制作端的應用程序需要菜單、工具欄等的支持,如果采用基于對話框的應用程序則加載菜單、工具欄等比較麻煩,工作量更大。本系統編輯制作端設計的用戶界面如圖1 所示:

圖1 編輯制作端用戶界面設計
在該界面中,主窗口左側為一樹型控件;下部為一排命令按鈕,用于添加、修改、刪除、查詢數據庫記錄。具體操作方法有以下幾種:一是使用基于文檔/視圖結構的單文檔界面(Single Document Interface, SDI)框架,在視圖中選擇CFormView 作為基類。在向導生成的應用程序中刪除與文檔相關的代碼,如文件新建、打開等,這種方式保留文檔/視圖結構的支持,也就是說有CDocument 類相關的開銷。二是不需要文檔/視圖結構的支持,使用MFC 窗口分割類CSpliterWnd來分割窗口,在向導生成的CMainFrame 類中添加CSpliterWnd 型的變量,在CMainFrame 類的OnCreate函數中添加生成分割窗口的代碼。三是采用“Using views effectively without the doc/view overhead”所提出的方法,該方法也不需要文檔/視圖結構支持,其思路是讓MFC Framework 解決由于CFormView 的構造函數和Create 成員函數被封裝為私有而難以使用的問題[3]。
此外,系統啟動時使用的登錄界面(見圖2)使得只有授權用戶才能使用系統。

圖2 登錄界面
在下面的論述中將重點關注業務邏輯,畢竟業務功能才是一個應用程序的靈魂。
編輯制作端將需要定時播發的應急業務信息存入數據庫,發送端軟件通過SQL 數據庫查詢得到當前要播發的應急信息并進行播發。以MySQL(關系型數據庫管理系統)為例,描述本系統使用的數據庫的設計[4]。根據發送端軟件的要求,主要使用以下數據表:
2.2.1 節目表和分組表
節目表(program)(見表1)提供了節目(以邏輯頻道號標識)的TS 流ID 及各種分組標識,即節目切換、音量調整、掛角時的分組標識。分組表(infoprogramgrouping)(見表2)標識了每個分組使用的包ID,為應急業務信息打包時提供包ID 信息。

表1 節目表(program)

表2 分組表(infoprogramgrouping)
節目表和分組表的作用是對不同的節目進行分組,不同的分組可以顯示不同的應急業務信息,即數字電視應急信息廣播系統中可以同時顯示不同的分類信息。使用時可以按節目的類型(如體育類、教育類、文藝類、娛樂類等)進行分類,相似的節目分為同一組。這樣的信息發布會更有針對性與靈活性,能同時發布的信息數量也會更多。
2.2.2 信息圖片表和信息時間表
信息圖片表的作用是保存應急業務信息的相關信息,由于圖片數據量較大,本系統不將圖片直接存儲于數據庫中,而是將其單獨存放于一個圖片目錄中。信息圖片表(infopicture)(見表3)中的picname保存的是圖片在圖片目錄中的名稱。信息時間表(picturetime)(見表4)說明的是圖片的組ID 和播發開始與結束的時間等信息。

表3 信息圖片表(infopicture)

表4 信息時間表(picturetime)
2.2.3 游動字幕相關表
游動字幕相關表包括游動字幕表(movetitle)(見表5)、游動字幕信息時間表(movetitletime)(見表6)、游動字幕屬性表(movetitleproperty)(見表7)。游動字幕的這三個表描述了游動字幕的相關信息。游動字幕表描述了字幕信息內容、字體大小、游動次數等的信息,游動字幕信息時間表規定了播發開始和結束的日期信息。游動字幕屬性表指定了字幕的位置信息和每天開始游動播出的時間。

表5 游動字幕表(movetitle)

表6 游動字幕信息時間表(movetitletime)

表7 游動字幕屬性表(movetitleproperty)
2.2.4 其他表
除上述數據庫表外,還有掛角信息表、操作員表等數據庫表。掛角信息表包括掛角位置信息表(logoposition)、掛角時段表(logogroupperiodoftime)兩個表。掛角位置指出了掛角的位置,掛角時段表表明了掛角的時間段信息。操作員表則描述了能夠操作系統的相關人員的口令等信息,能夠約束登錄系統的人員。
有了這些基礎表之后,就可以在這些基礎表上形成便于處理的數據庫視圖。視圖是一個內容由查詢定義的虛擬表。視圖具有簡單性、安全性等多種優點,但使用上也有一些限制。
Visual C++提供了多種數據庫訪問技術,常見的有開放數據庫連接(Open DataBase Connectivity, ODBC)、數據庫訪問對象(Data Access Object, DAO)、ActiveX數據對象(ActiveX Data Objects, ADO)等。本系統編輯制作端采用Visual C++的ADO 進行編程,將播發的信息存入數據庫中。ADO 具有強大的數據處理功能,它提供了十分簡單、易用的編程接口,是Windows 環境中比較常用的數據庫編程技術。
在使用ADO 進行編程時,首先需要引入ADO 類,并初始化COM,然后就可以使用_ConnectionPtr、_RecordsetPtr 和_CommandPtr 三個智能指針了。為了更易于使用,封裝前兩個智能指針的操作為CADOConnection和CADORecordSet 類。 為進一步簡化操作, 讓CADORecordSet 類繼承自CADORecordBinding,使得RecordSet 記錄集中的字段可以綁定到C/C++變量中。
使用數據庫時首先要連接數據庫,使用連接字符串與指定數據庫進行連接,連接時須提供用戶名和密碼。我們在CInfoeditApp 類(CWinApp 的派生類)中添加一個CADOConnection 型的變量MyConnection,在CDlgLogin 類中有這個變量的一個引用,本系統啟動時會打開一個CDlgLogin 類的對話框,提示用戶輸入用戶名和密碼,系統由此連接到指定數據庫。若用戶名和密碼組合輸入錯誤,就會導致連接失敗,若失敗的輸入次數超過三次,則會退出系統。
編輯制作端軟件除與數據庫通信外,還需要直接與發送端進行通信,所以需要使用Socket 編程。本系統編輯制作端與發送端的通信采用傳輸控制協議(Transmission Control Protocol, TCP)。TCP 通信分服務器端和客戶端,服務器端程序不能主動連接客戶端,在通信時必須先由客戶端去連接服務器端才能實現通信。服務器端程序要先啟動,等待客戶端的連接。其中,客戶端程序的基本操作過程為:socket,創建套接字;connect,連接服務器,向服務器端程序發出連接請求;與服務器端進行通信收發數據rend/recv;關閉套接字[5]。同時,針對客戶端生成CMyClientSocket 類,其主要函數為OpenConnection、SendData、ReceiveData 等。
圖片信息的編輯在CDlgPicInfoEdit 類中完成,CDlgPicInfoEdit 類繼承于CDialog。首先,在其中打開文件對話框,選擇已經制作好的要播出的圖片,系統會檢查圖片的寬度、高度、每像素位數、圖像數目(如gif 圖片可包含多幅圖片)等信息,并檢查其格式是否為接收端軟件支持的格式。若圖像寬高不是建議的寬高時,給出警告信息及建議的寬度、高度等信息。如果是合法的圖片,將在m_Picture 靜態控件中進行預覽,模擬演示其在電視上的接收顯示效果;如果是合法的多幅圖片格式,則會啟動一個多媒體定時器,模擬演示其動畫效果。其次,添加分組信息,并指定圖片在此分組的播出時間。本系統對同一圖片可以添加多個分組,不同的分組在同一時間段內也可以顯示不同的(信息)圖片。分組的使用擴展了同一時間系統能夠顯示的信息量。添加時間信息時可以直接指定開始時間和結束時間,也可以指定開始時間和播出天數。最后,點擊“確定”按鈕添加數據庫記錄。在添加數據庫記錄前需要先把圖片文件上傳到發送端(或者數據庫服務器)。上傳文件使用CMyClientSocket 類,連接成功后,通過SendData傳輸加密后的圖片數據。上傳文件時,需先把加密后的圖片內容讀入緩沖區,分多次發送到接收端,如每次上傳8 000 字節,所有內容全部上傳無誤后,即可添加此記錄。
2.6.1 游動字幕制作
不同于其他信息的制作,本系統編輯制作端使用單獨的一個類來進行游動字幕信息的制作。其編輯界面如圖3 所示:

圖3 游動字幕編輯界面
游動字幕信息的制作采用以下三種方式:一是純文本文件,即編輯制作端只提供要顯示文本及其字體大小、顏色等屬性,其顯示由接收端完成,接收端軟件根據接收到文本及字體大小、顏色等屬性生成字幕進行顯示。二是使用圖片文件的方式,將字幕制作成圖片,并指定一種透明色(可為任意一種字幕本身不使用的顏色,可指定為黑色或純藍色)。三是生成alpha 文件,這也是本系統推薦的方式。由于成本的限制,接收端的數字電視機頂盒配置不是很高,大多數的數字電視機頂盒只配置了點陣字庫而沒有矢量字庫,因此顯示效果較差,采用生成alpha 文件的方式能夠有效彌補這一不足。該方式可以根據文本信息生成相應的alpha 通道信息,alpha 通道可用來記錄圖像中的透明度信息,從而定義圖像中的透明、半透明和不透明區域,用8 位的灰度圖像就可保留字幕信息。alpha 通道疊加各種不同顏色信息后可生成豐富多彩的字幕圖像。在添加、修改數據時,同樣需要先將圖片文件上傳。
2.6.2 游動字幕演示
模擬演示游動字幕的效果在定時器回調函數FortyMilliSecondProc1 中實現。與普通顯示函數不同的是,這里的顯示要模擬背景圖層和當前圖層之間帶透明色的疊加,需要使用TransparentBlt 之類的函數來實現。本系統使用的是多媒體定時器,定時器的定時間隔設定為40 ms。多媒體定時器使用多線程編程方式,開辟一個獨立線程執行定時器回調函數,定時精度較高。這種定時器在安裝時要先調用timeGetDevCaps 函數來明確定時器服務支持的最小和最大定時器分辨率,然后調用timeBeginPeriod設置系統支持的最小分辨率,最后產生周期執行的定時器事件,啟動定時器。在回調函數FortyMilliSecondProc1 中,要根據當前字幕在顯示框中的位置,創建與背景靜態圖片框兼容的內存DC。在內存DC 中完成背景圖像與字幕圖像的混合,最后將(已經混合好的)內存DC 中的圖像BitBlt(塊拷貝)到背景靜態圖片的字幕顯示框中。
數字電視應急信息廣播系統編輯制作端是一個帶有用戶界面的應用程序。編輯制作端的業務邏輯本身并不復雜,但涉及用戶界面編程、數據庫編程、網絡編程等各個方面,所以開發此類應用程序需要熟悉用戶界面、數據庫、網絡等方面的知識。本文探討了編輯制作端應急信息的制作、上傳,介紹了游動字幕信息的演示,達到了“所見即所得”的效果。該系統的實際運行結果表明,系統運行穩定、可靠,達到了設計要求。