謝超 蔣達先
摘 要:為了解決現(xiàn)代安防通信設(shè)備安裝復(fù)雜、排除故障難度高的問題,提出一款基于MTK平臺的無線語音終端,其以MTK8516嵌入式ARM開發(fā)板為硬件平臺,Linux系統(tǒng)為軟件平臺,通過移植開源流媒體軟件live555,以RTSP為主要通信協(xié)議實現(xiàn)語音通信功能。相比傳統(tǒng)有線通信,無線語音終端有著諸多優(yōu)點,如無需架設(shè)線路,信號范圍廣,不受地形影響,以及語音信號質(zhì)量高、排除故障方便等。系統(tǒng)測試結(jié)果表明,該終端能夠方便、快捷地滿足人們在醫(yī)院、辦公場所等局域網(wǎng)內(nèi)語音通話的要求,具有低成本、低功耗、高可靠性的優(yōu)點。
關(guān)鍵詞:無線通信;MTK8516;Linux;live555;語音終端
DOI:10. 11907/rjdk. 201229
中圖分類號:TP319文獻標識碼:A 文章編號:1672-7800(2020)010-0196-04
Abstract: In order to solve the problem of complex installation of modern security communication and high difficulty in troubleshooting, a wireless voice terminal based on WiFi is proposed. It uses MTK8516 embedded ARM development board as the hardware platform and Linux system as the software platform. By transplanting the open source streaming media software live555, the voice communication function is realized with RTSP as the main communication protocol. Compared with traditional wired communication, wireless voice terminal has many advantages, such as no need to set up lines, wide signal range, no affection by terrain, high quality of voice signal and convenient troubleshooting. Experiments prove that the terminal conveniently and quickly meets the requirements of people for voice calls in local area networks such as hospitals and offices, and has the advantages of low cost, low power consumption, and high reliability.
Key Words: wireless communication;MTK8516;Linux;live555;voice terminal
0 引言
社會經(jīng)濟在21世紀的發(fā)展異常迅速,人們也越來越迫切地需要更加方便、快捷的通信方式[1]。隨著國家對網(wǎng)絡(luò)基礎(chǔ)設(shè)施建設(shè)愈加重視,各種通信終端設(shè)備的應(yīng)用更加廣泛[2],各種無線產(chǎn)品在現(xiàn)代生活中發(fā)揮著越來越重要的作用[3-5]。
傳統(tǒng)語音通信終端應(yīng)用大多為有線通信[6-7]。如文獻[8]提出一種基于MCS-51與DTMF技術(shù)的醫(yī)院護理對講系統(tǒng),該系統(tǒng)由一個主機負責(zé)調(diào)度,還有多個分機。主機與分機之間的通信方式為CAN(Controller Area Network,控制器局域網(wǎng)絡(luò))總線通信,全部使用MCS-51單片機進行調(diào)度,主機通過分機上的唯一地址編號識別各個分機,并為分機提供電源。如鐵路系統(tǒng)、辦公場所等都使用的有線通信;文獻[9]-[11]介紹基于紅外線的語音通信系統(tǒng),但紅外線的缺點是穿透力不夠強,信號衰減較快;文獻[12]-[14]介紹基于藍牙的語音通信系統(tǒng),相比WiFi通信,其缺點是傳輸速度慢、電波覆蓋范圍小。
本文設(shè)計了基于MTK平臺的無線語音終端,通過WiFi實現(xiàn)設(shè)備之間的互聯(lián),借助于無線芯片技術(shù)和嵌入式實時操作系統(tǒng),大大簡化了無線終端設(shè)備安裝流程,還解決了傳統(tǒng)無線通信技術(shù)存在的紅外穿透力不夠強、信號衰減較快,以及藍牙傳輸速度慢、電波覆蓋范圍小,且價格昂貴的問題。
1 系統(tǒng)總體設(shè)計
本系統(tǒng)設(shè)計的基于MTK8516嵌入式開發(fā)平臺的無線語音終端,主要有以下幾個模塊:
(1)音頻信號采集模塊。麥克風(fēng)語音輸入控制與連網(wǎng)音頻產(chǎn)品包括一系列廣泛的接口,如2通道的PDM輸入、6通道的TDM麥克風(fēng)陣列、4通道的I2S*2等,無需額外的DSP,支持回聲消除與聲源定位。
(2)音頻編解碼模塊。從多路麥克風(fēng)陣列模塊采集實時語音信號,將其作為編解碼器的音頻源,采用內(nèi)置PowerAQ對音頻信號進行編解碼處理。
(3)WiFi模塊。開發(fā)板集成了WiFi(2.4GHz 802.11 bgn),采集到音頻數(shù)據(jù)編碼后,通過UDP/TCP網(wǎng)絡(luò)協(xié)議和實時傳輸協(xié)議RTP實現(xiàn)語音信號通信。
(4)控制模塊。MT8516 集成了四核 64 位的 ARM Cortex-A35 MPCoreTM,其運行速度高達 1.3 GHz。系統(tǒng)總體框架如圖1所示。
2 系統(tǒng)軟件實現(xiàn)
本文中的MTK8516開發(fā)板采用以Linux為內(nèi)核的Yocto開發(fā)平臺。移植了開源軟件live555并經(jīng)過交叉編譯后,MTK8516開發(fā)板和PC機同時作為發(fā)送端與接收端進行通信測試。
2.1 Yocto平臺搭建
Yocto平臺作為一個開源協(xié)作項目,可以不用過多地考慮硬件體系結(jié)構(gòu),而是通過提供組件和框架,為嵌入式產(chǎn)品提供定制的Linux系統(tǒng)[15]。
Yocto項目基于Poky編譯體系,其包括OpenEmbedded編譯系統(tǒng),以及編譯使用的Metadata(Configuration文件及Recipe文件等)[16]??梢岳斫鉃?,整個Yocto平臺是一個包含各種規(guī)則及工具的“機器”,通過添加Configuration文件、所需菜單文件及patch,這臺“機器”即會按照人們的需求生成整個系統(tǒng)的image。Yocto開發(fā)環(huán)境結(jié)構(gòu)如圖2所示。
需要重點關(guān)注的是metabase中的recipe文件,在Yocto Project里對應(yīng)的是以.bb 結(jié)尾的文件。.bb文件指定這一模塊從哪里獲得代碼(網(wǎng)絡(luò)或本地),如何config(配置),如何編譯,生成的文件如何部署到文件系統(tǒng)中,相當于makefile文件。最后生成的image存儲在Output Image Data中。
在平臺搭建過程中,首先要確定環(huán)境配置,至少要預(yù)留40G硬盤空間,內(nèi)存至少8G,最好為16G。其次,Yocto平臺可以選擇全部編譯,也可以選擇部分編譯。若全部編譯,最后生成的就是定制的Linux系統(tǒng)鏡像文件;若部分編譯,可以單獨編譯某一個模塊(以.bb為單位),例如后面需要的應(yīng)用程序live555,可以在部分編譯成功后,再選擇全部編譯,從而節(jié)省編譯時間,也可以單獨測試某一模塊,可在makefile文件或.bb文件中實現(xiàn)全部編譯或部分編譯。
2.2 live555移植
live555 作為一個流媒體開源項目,使用的開發(fā)語言為C++。其主要由幾個用于多媒體流的庫組成,live555 的庫可用于MPEG、h.265、h.264、h.263+、DV或JPEG視頻以及各種音頻格式[17]。它們還可以很容易地擴展到支持其它音頻或視頻編解碼器的格式,并可用于構(gòu)建基本的RTSP或SIP客戶機和服務(wù)器[18]。主要使用其中的4個目錄,分別對應(yīng)live555的4個模塊:
(1)UsageEnvironment模塊。其主要包含一些基本數(shù)據(jù)結(jié)構(gòu),以及實現(xiàn)功能所需的一些常見工具。編譯后生成的靜態(tài)庫是UsageEnvironment.lib。
(2)Groupsock模塊。主要是與RTSP、RTP等協(xié)議相關(guān)的類的定義及實現(xiàn),Yocto平臺交叉編譯后生成的靜態(tài)庫是groupsock.lib。
(3)liveMedia模塊。Yocto平臺交叉編譯后生成的靜態(tài)庫是liveMedia.lib,該模塊是live555最重要的部分。
(4)BasicUsageEnvironment模塊。Yocto平臺交叉編譯后生成的文件為BasicUsageEnvironment.lib,該模塊主要用于實現(xiàn)UsageEnvironment模塊中的一些功能。
對live555源碼進行修改與編譯后,使用ZELUS平臺自帶的編譯工具BITBAKE(相當于Linux下的make指令),將源碼編譯成開發(fā)板可識別的文件,得到可執(zhí)行文件。
基于Yocto平臺的.bb文件rtspserver.bb部分關(guān)鍵代碼如下:
WORKONSRC = “${TOPDIR}/../src/apps/aud-base/rtspserver”//源碼地址
do_install() {
install -d ${D}${libdir}
install -d ${D}${bindir}
install -m 755 ${S}/testH264/rtsp_server ${D}${bindir}
}
${D}指存放編譯后生成binary的地址;${bindir}指文件系統(tǒng)的 /usr/bin;${S}指source code存放的位置;install -d 指建立一個folder;install -m? 指將文件收集到指定目錄下,并修改權(quán)限,755為文件訪問權(quán)限。
最后成功編譯通過,在/home/ahua/zelus-8516-sdk/build/tmp/work/aarch64-poky-linux文件夾下生成rtspserver文件夾,以及可在開發(fā)板上執(zhí)行的可執(zhí)行文件,如圖3所示。
2.3 RTSP協(xié)議
RTSP(Real-Time Stream Protocol)協(xié)議是一個基于文本的多媒體播放控制協(xié)議,其屬于TCP/IP四層協(xié)議中的應(yīng)用層[19]。RTSP主要控制對象為流媒體,其主要有4種操作方式:回放、暫停、后退、前進。標準由IETF指定,協(xié)議為RFC2326。TCP/IP協(xié)議族是一個由數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層組成的四層協(xié)議系統(tǒng)。每個層執(zhí)行不同功能,并由幾個協(xié)議實現(xiàn),上層協(xié)議使用下層協(xié)議提供的服務(wù)。RTSP作為一個應(yīng)用層協(xié)議,為擴張?zhí)峁┝艘粋€框架,使流媒體控制成為可能。其主要用來控制數(shù)據(jù)發(fā)送的實時特性,但其本身并不用于傳輸流媒體數(shù)據(jù),而是必須依靠底層傳輸協(xié)議(RTP 服務(wù)器)提供的服務(wù)完成流媒體數(shù)據(jù)傳輸。RTSP負責(zé)定義特定的控制信息、操作方法、狀態(tài)代碼,并描述與RTP的交互 [20]。
RTSP報文請求常用方式如表1所示。
本文中移植的live555主要基于RTSP協(xié)議進行通信,因為開源的live555軟件只能實現(xiàn)對本地文件的傳輸,但是本文終端最終需要實現(xiàn)MTK平臺與PC機的雙向語音通信功能, 需要修改Live555 testProgs(示例程序)中提供的函數(shù)testMP3Receiver.cpp以及testMP3Streamer.cpp。testMP3Receiver.cpp 函數(shù)用來接收麥克風(fēng)陣列采集的語音數(shù)據(jù),testMP3Streamer.cpp函數(shù)用于實時發(fā)送采集好的麥克風(fēng)陣列數(shù)據(jù)。對原始testprog中的兩個函數(shù)按照功能需求進行改寫,然后使用多線程技術(shù)分別調(diào)用testMP3Receiver.cpp和testMP3Streamer.cpp。部分關(guān)鍵代碼如下:
(1)建立基本任務(wù):
TaskScheduler* scheduler = BasicTaskScheduler::createNew();
env = BasicUsageEnvironment::createNew(*scheduler);
(2)建立RTSP服務(wù)器:
RTSPServer* rtspServer = RTSPServer::createNew(*env, 554, NULL, 65);
if (rtspServer == NULL) {
*env <<“Failed to create RTSP server: ”<< env->getResultMsg() <<“\n”;
exit(1);
}
(3)通過HTTP隧道為RTSP創(chuàng)建HTTP服務(wù)器:
if (rtspServer->setUpTunnelingOverHTTP(sPort.usRTSPOverHTTP)) {
*env <<“(We use port ”<< rtspServer->httpServerPortNum() <<“ for optional RTSP-over-HTTP tunneling, or for HTTP live streaming (for indexed Transport Stream files only).)\n”;
} else {
*env <<“(RTSP-over-HTTP tunneling is not available.)\n”;
}
之后,需要將live555流媒體服務(wù)器程序與麥克風(fēng)陣列音頻數(shù)據(jù)采集程序結(jié)合起來??梢允褂脴藴蔭lsa接口獲得麥克風(fēng)采集的音頻數(shù)據(jù),并通過live555軟件進行語音信號傳輸。
2.4 麥克風(fēng)音頻數(shù)據(jù)采集
ZelusTek智能語音開發(fā)平臺的麥克風(fēng)陣列通過標準的TDM接口對接到MT8516芯片,本文可以使用標準alsa接口獲得麥克風(fēng)采集的音頻數(shù)據(jù)。開發(fā)板使用六路麥克風(fēng)陣列,本開發(fā)平臺的麥克風(fēng)數(shù)據(jù)采集流程如圖4所示。
麥克風(fēng)數(shù)據(jù)采集具體流程為:
(1)初始化并打開音頻采集設(shè)備:
int OpenAudioCapture(unsigned char bitsPerSample, unsigned char numChannels, unsigned int samplingFrequency)
(2)初始化緩沖區(qū),分配存儲空間:
g_pQueue = new DataQueue(); g_pQueue->set_databuffer_size(1280*6, 3);g_pQueue->init();
(3)調(diào)用音頻數(shù)據(jù)采集線程:
void *AudioCaptureThread(void *arg);pcm_read(fChunkSize, fReadBuf) != fChunkSize)
(4)開始音頻采集,讀取音頻數(shù)據(jù):
int StartAudioCaputre(unsigned char bitsPerSample, unsigned char numChannels, unsigned int samplingFrequency);GetPCMData(int nChannel, unsigned char *buf, unsigned int *bufLen, unsigned long *pts, unsigned char byWait)
本系統(tǒng)為了實現(xiàn)PC機與MTK開發(fā)平臺之間的雙向語音交流,客戶端和服務(wù)端都需要具有語音接收與發(fā)送功能的模塊,可通過多線程技術(shù)解決這一問題。在語音通信雙向模塊,用pthread_create()添加一個線程,從而實現(xiàn)兩端的雙向語音功能。
3 系統(tǒng)測試
圖5是組裝好的MTK8516開發(fā)板,包括開發(fā)板主體、電源、各類可支持接口,以及多路麥克風(fēng)陣列。
3.1 ADB連接MTK平臺
首先使用ADB連接MTK智能語音平臺和PC機,開啟MTK平臺電源鍵,啟動開發(fā)板,等待15s后,系統(tǒng)啟動完成。
然后在PC端的命令行端口輸入如下指令:
$ adb shell
連接成功即可通過PC機控制MTK平臺。
3.2 無線連接
下載好聯(lián)網(wǎng)腳本后,借助ADB工具把腳本push到MTK平臺:
$adb push wifi_connected.sh /data/
腳本push成功后,進入adbshell,執(zhí)行腳本:
$ sh /data/ wifi_connected.sh SSID PWD
SSID和PWD為連接的路由器賬戶及密碼。
3.3 麥克風(fēng)數(shù)據(jù)采集及音頻播放
將live555交叉編譯之后push到MTK平臺,然后將其與PC機進行通信。開發(fā)板能夠?qū)Ⅺ溈孙L(fēng)陣列采集到的數(shù)據(jù)經(jīng)過內(nèi)置音頻編解碼模塊,通過live555軟件發(fā)送給PC機。PC機也能將電腦上的音頻數(shù)據(jù)發(fā)送給開發(fā)板,從而實現(xiàn)語音通信功能。
4 結(jié)語
本文通過MTK平臺實現(xiàn)了無線語音終端設(shè)計,并通過開源軟件live555實現(xiàn)了無線語音終端通信。測試結(jié)果表明,該無線語音終端能夠很好地實現(xiàn)WiFi環(huán)境下的語音通信。不僅滿足了局域網(wǎng)下無線通信的需求,還可以減少繁雜的線路設(shè)計。后續(xù)可在此基礎(chǔ)上進一步開發(fā)與拓展相關(guān)功能,接入智能云語音平臺,實現(xiàn)語音控制啟動,還可通過相關(guān)算法進一步降低延遲和內(nèi)外噪聲干擾。
參考文獻:
[1] 段宇,戴舜華,付鵬飛,等. 基于STM32的無線語音交互系統(tǒng)設(shè)計[J]. 電子技術(shù)與軟件工程,2019(15):82-83.
[2] 黃立霞.? 嵌入式無線語音終端研究與設(shè)計[D]. 成都:電子科技大學(xué),2012.
[3] 王賽,劉子龍.? 基于4G 網(wǎng)絡(luò)的移動機器人遠程控制研究[J]. 軟件導(dǎo)刊,2019 (11):71-74.
[4] 馬瑜晨,許全宜. 基于模擬和數(shù)字技術(shù)相結(jié)合的視頻監(jiān)控系統(tǒng)[J]. 電子技術(shù)與軟件工程,2018,63(6):62-63.
[5] 劉歡,聶志剛. 基于嵌入式WiFi物聯(lián)網(wǎng)的無線家居監(jiān)控系統(tǒng)[J].? 物聯(lián)網(wǎng)技術(shù),2018(7):36-38.
[6] 劉錦. 鐵路有線通信的維護探討[J]. 科學(xué)技術(shù)創(chuàng)新,2018 (15):89-90.
[7] 張威, 王瑞東.? 鐵路有線通信傳輸系統(tǒng)的維護和管理[J].? 數(shù)字通信世界,2019(12):48.
[8] 黃修力,鄭發(fā)泰. 基于MCS-51與DTMF技術(shù)的醫(yī)院護理對講系統(tǒng)的設(shè)計[J].? 計算機測量與控制(7):187-189,192.
[9] 張紹頌.? 基于單片機的紅外通信系統(tǒng)設(shè)計[J].? 武漢生物工程學(xué)院學(xué)報, 2017(2): 23-26.
[10] 林章, 林海.? 射頻與紅外通信技術(shù)的實踐應(yīng)用研究[J].? 物聯(lián)網(wǎng)技術(shù), 2019, 9(8):31-32,36.
[11] 丁國臣, 姜玉紅, 王高翔.? PAM調(diào)制型語音紅外通信系統(tǒng)的設(shè)計[J].? 電腦知識與技術(shù), 2016, 12 (29):216-218.
[12] 陳曦, 徐鵬, 許曉蕾.? 基于藍牙通信技術(shù)的嵌入式工業(yè)控制系統(tǒng)的開發(fā)[J].? 儀表技術(shù)與傳感器, 2015(1):74-76.
[13] SAIRAM K V S,GUNASEKARAN N,REDD S R. Bluetooth in wireless communication[J].? IEEE Communications Magazine,2002,97(6):1-9.
[14] REN W,MIAO Z. A hybrid encryption algorithm based on DES and RSA in bluetooth communication[C]. 2010 Second International Conference on Modeling,Simulation and Visualization Methods, 2010:221-225.
[15] 杜登科,胡愛蘭,李林峰,等.? 基于Yocto訂制嵌入式Linux發(fā)行版[J].? 微型機與應(yīng)用,2016(14):68-70.
[16] BOVET D P,CESATI M. Understanding the Linux Kernel 3e[M].? Understanding the Linux kernel ,2006.
[17] 呂少君, 周淵平.? 基于Live555的實時流媒體傳輸系統(tǒng)[J].? 計算機系統(tǒng)應(yīng)用, 2015 (1):56-59.
[18] 喻煒. 新型數(shù)字可視對講系統(tǒng)的設(shè)計與實現(xiàn)[D].? 長沙:中南大學(xué),2014.
[19] RAO A, LANPHIER R, STIEMERLING M, et al. Real time streaming protocol 2.0 (RTSP)[Z].? 2014.
[20] 陳亮, 裴海龍.? 基于RTSP協(xié)議的實時視頻服務(wù)器實現(xiàn)[J].? 微計算機信息, 2009(15):65-66.
(責(zé)任編輯:黃 ?。?/p>