殷軼鳴
摘要:文章詳細論述了熱線錄音系統(tǒng)的架構(gòu)設(shè)計及業(yè)務(wù)流程。該系統(tǒng)改進了之前的工作流程,解決了長期以來各個直播室分開錄音,且需要在錄音時人工干預的情況。之后介紹了熱線錄音服務(wù)器和錄音軟件的情況,最后對錄音系統(tǒng)的使用情況和未來發(fā)展進行了展望。
關(guān)鍵詞:直播室熱線 錄音系統(tǒng) Linux系統(tǒng)
近年來上海臺及一些外地臺上線使用了基于Telos Hx6新一代電話耦合器的熱線系統(tǒng)。新耦合器在支持傳統(tǒng)硬件接聽撥打熱線電話的同時還開放了電話控制器協(xié)議,我們基于此協(xié)議設(shè)計并實現(xiàn)了運用客戶端軟件來進行接聽撥打熱線電話,這個客戶端軟件大大擴展了傳統(tǒng)熱線系統(tǒng)功能。
隨著新一代熱線電話系統(tǒng)投入使用,用戶對熱線系統(tǒng)錄音也有了新的要求。之前的熱線錄音往往布置在各個直播室并且彼此相互獨立,這對系統(tǒng)的維護和管理不利。錄音時導播需要打開錄音軟件手動控制錄音過程,操作也不方便。為此我們提出一種新的直播室熱線錄音系統(tǒng),將原先各個直播實的錄音系統(tǒng)歸并到一個系統(tǒng)部署在一臺設(shè)備上。系統(tǒng)分為錄音服務(wù)器和錄音程序兩部分,錄音服務(wù)器最多支持32路電話錄音,配有2T硬盤存儲錄音文件。錄音服務(wù)器安裝Linux操作系統(tǒng),錄音程序基于Linux系統(tǒng)使用C語言編寫。錄音文件生成后存放在指定的文件夾下,使用Linux系統(tǒng)的Samba服務(wù)供用戶訪問。
系統(tǒng)的架構(gòu)設(shè)計
以往熱線電話錄音是在直播室進行電話線分線,一路接電話耦合器,另一路接裝有錄音程序的工作站。當導播需要錄音時,打開錄音軟件進行錄音,錄音文件保存在這臺工作站上。我們希望電話錄音這一過程能夠自動進行不需要人工干預,所有直播室的錄音在一臺服務(wù)器上進行,錄音文件保存在服務(wù)器上,用戶通過訪問服務(wù)器訪問錄音文件。經(jīng)過設(shè)計熱線錄音系統(tǒng)的整體拓撲如圖1所示。
直播室熱線電話由電信運營商提供并接入物業(yè)電話機房,我們設(shè)計將物業(yè)電話線架上的電話線一分二,一路接入直播室,另一路接入數(shù)控機房,通過轉(zhuǎn)換器將電話線接入錄音服務(wù)器。錄音服務(wù)器部署在數(shù)控機房內(nèi)網(wǎng),與用戶分離,確保了服務(wù)器的安全性和運維人員維護的便利性。錄音服務(wù)器通過內(nèi)網(wǎng)交換機經(jīng)防火墻與辦公網(wǎng)連接,使得直播室熱線電話客戶端可以與錄音服務(wù)器相互訪問。
我們希望錄音能由程序自動執(zhí)行。錄音程序偵測到聽眾來電后不立即錄音,等待導播拿起電話后才進行錄音。導播通話結(jié)束后錄音程序終止錄音過程,保存錄音文件。系統(tǒng)流程圖如圖2所示:
錄音卡會實時讀取每條熱線電話的狀態(tài),熱線有以下五種狀態(tài):0為空閑,1為振鈴,2為接起,3為撥打電話,4為掛斷。在每個直播室有一臺熱線客戶端裝有該直播室的熱線數(shù)據(jù)庫,記錄該直播室每條熱線電話的當前狀態(tài)和接聽記錄。錄音程序會實時將錄音卡讀到的熱線狀態(tài)寫入數(shù)據(jù)庫。當讀到導播接起聽電話的狀態(tài)后,錄音程序調(diào)用錄音卡開始錄音并生成文件。當導播掛斷電話,錄音程序終止錄音,將錄音文件保存在指定的文件目錄下。
錄音服務(wù)器
錄音服務(wù)器為一臺1U設(shè)備,分為左右兩部分。左半邊安裝服務(wù)器主板和硬盤存儲,安裝有Linux操作系統(tǒng),錄音程序就部署在該系統(tǒng)上,我們將程序設(shè)置為開機自啟動。操作系統(tǒng)我們選用CentOS 6.2,CentOS是Linux發(fā)行版本之一,它由來自于Red Hat Enterprise Linux提供的可自由使用源代碼所編譯而成,是一個企業(yè)級Linux發(fā)行版本。服務(wù)器配有一塊2T容量的硬盤存儲錄音文件,電話錄音文件通常采樣率不高,所以存儲空間基本能滿足用戶需求。
右半邊插有兩塊各16路的電話錄音卡,系統(tǒng)最多支持32路電話錄音,錄音卡后接有模擬電話線轉(zhuǎn)接的轉(zhuǎn)換器。系統(tǒng)使用前需要安裝錄音卡驅(qū)動并進行相關(guān)配置。錄音卡廠家提供的驅(qū)動目下ShConfig.ini文件是錄音卡驅(qū)動的配置文件,可直接通過系統(tǒng)自帶的Vi編輯器配置或者在CentOS圖形界面下通過ShCticonfig程序來配置。通常需要配置TotalBoards和TotalAppCh兩個參數(shù),前者表示錄音板卡數(shù)量,后者表示錄音通道數(shù)。此外驅(qū)動目錄下還提供了Test_gtk程序,在圖形界面下運行這個程序,可以測試外卡接線路的狀態(tài)。
服務(wù)器還需要安裝mysql客戶端,因為錄音程序需要連接導播室熱線客戶端電腦的mysql數(shù)據(jù)庫。對于用戶訪問錄音文件,我們使用了CentOS上自帶的Samba共享服務(wù)。Samba是在Linux系統(tǒng)上實現(xiàn)SMB協(xié)議的一個免費軟件,由服務(wù)器及客戶端程序構(gòu)成。SMB協(xié)議是一種在局域網(wǎng)上共享文件和打印機的一種通信協(xié)議,它為局域網(wǎng)內(nèi)的不同計算機之間提供文件及打印機等資源的共享服務(wù)。
錄音程序和配置
錄音程序用C語言編寫,主要通過調(diào)用錄音卡的接口程序來實現(xiàn)錄音功能。由于錄音程序需要控制所有直播室的熱線錄音以及將錄音文件保存在不同的文件夾下,所以必須讓程序知道每個直播室線路的分布狀況以及不同錄音文件存儲路徑。為此在錄音程序目錄設(shè)置有一個config.ini的配置文件,此文件寫有所有直播室熱線電話的情況和熱線數(shù)據(jù)庫的信息。這里以兩個頻率為例,配置文件結(jié)構(gòu)和注釋如下:
[init]
recisdo=1 //錄音標志 1為錄音,0為關(guān)閉。
maxtimes=3 //設(shè)置振鈴三秒,等待導播接起電話
rectype=0
mysqlcount=2 //配置連接數(shù)據(jù)庫數(shù)量,也就是頻率的數(shù)量。
[mysql] //數(shù)據(jù)庫配置
ip0= //數(shù)據(jù)庫地址,應該填寫頻率0熱線主機的ip0地址
username0= //數(shù)據(jù)庫用戶名,
password0= //數(shù)據(jù)庫密碼,
dbname0= //數(shù)據(jù)庫名稱,
ip1= //數(shù)據(jù)庫地址,應該填寫頻率1熱線主機的ip1地址
username1= //數(shù)據(jù)庫用戶名,
password1= //數(shù)據(jù)庫密碼,
dbname1= //數(shù)據(jù)庫名稱,
[channel] //配置頻率信息
mysql0=0 //第0號對應mysql配置中ip0的數(shù)據(jù)庫
linenum0=0 //錄音卡第0條線對應ip0數(shù)據(jù)庫所在頻率的電話耦合器的第0條線
recdir0= //頻率0錄音文件存儲位置
recdays0= //到期刪除設(shè)置
mysql1=0 //第1號對應mysql數(shù)據(jù)庫配置中ip0的數(shù)據(jù)庫
linenum1=1 //錄音卡第1條線對應ip0數(shù)據(jù)庫所在頻率的電話耦合器的第1條線
recdir1=
recdays1=60
錄音程序啟動后先初始化錄音板卡,再讀取config.ini文件,通過兩個函數(shù)分別從config.ini文件讀取字符串類型和整型類型數(shù)據(jù)。然后檢測各個直播室的熱線Mysql數(shù)據(jù)庫服務(wù)器是否能連接成功,如果連接不通,則不去連接mysql數(shù)據(jù)庫以防數(shù)據(jù)庫連接超時。錄音程序通過函數(shù)一直獲取錄音卡返回的各線路狀態(tài),當偵測到有線路振鈴后,經(jīng)過maxtimes等待,錄音程序通過調(diào)用函數(shù)在指定的路徑下生成錄音文件開始錄音,同時根據(jù)config.ini文件中的信息,拼出對應的文件名。文件名通常為線路號加上時間戳,以便于用戶查找。錄音程序循環(huán)(通常為2秒)會更新直播室的熱線Mysql數(shù)據(jù)庫中線路狀態(tài)。當導播掛斷電話后,錄音程序會將熱線狀態(tài)重置為空閑,等待該線路下一次來電。
錄音程序還設(shè)計了定期清除指定文件下文件的功能,以防止錄音文件過多導致磁盤空間不足。通過設(shè)置config.ini文件中recdays參數(shù),程序會自動刪除指定路徑下recdays天前的文件。
總結(jié)與展望
采用上述系統(tǒng)后,我們將所有直播室的錄音工作整合到一臺服務(wù)器上,不僅不需要人工干預程序就可以自動執(zhí)行,還有利于維護和管理。
在目前熱線錄音系統(tǒng)運行的基礎(chǔ)上,我們對系統(tǒng)的未來進行了展望。目前熱線電話的數(shù)據(jù)庫是分布獨立的,錄音程序需要將熱線電話的狀態(tài)分別寫入各個頻率的熱線數(shù)據(jù)庫。之后可以將各個頻率的數(shù)據(jù)庫合并成一個數(shù)據(jù)庫,這樣對維護和管理是有益的。
(作者單位:上海廣播電視臺)