盧文豪,胡敏
(東源廣工大現(xiàn)代產(chǎn)業(yè)協(xié)同創(chuàng)新研究院,河源517500)
在當(dāng)今網(wǎng)絡(luò)數(shù)字音頻傳輸時代,嵌入式音頻傳輸在移動互聯(lián)網(wǎng)中得到了廣泛的應(yīng)用。目前數(shù)字音頻傳輸技術(shù)主要有三種,即基于物理層的音頻傳輸技術(shù)、基于鏈路層的音頻傳輸技術(shù)和基于IP 層的音頻傳輸技術(shù)。基于物理層的音頻傳輸技術(shù)缺乏數(shù)據(jù)交換能力,只能用于點對點的傳輸[1];基于鏈路層的音頻傳輸技術(shù)主要采用EtherSound、CobraNet 等技術(shù),其中Ether-Sound 技術(shù)采用的是菊花鏈拓?fù)浣Y(jié)構(gòu),在傳輸過程中容易出現(xiàn)單點故障,而且采用該技術(shù)的傳輸設(shè)備只能在專用的網(wǎng)絡(luò)中才能實現(xiàn)音頻數(shù)據(jù)的傳輸[2-3];而CobraNet 技術(shù)采用的網(wǎng)絡(luò)是采用星型拓?fù)浣Y(jié)構(gòu),傳輸?shù)臄?shù)據(jù)雖然不能跨越路由器,但是能夠?qū)崿F(xiàn)低延時和可靠穩(wěn)定的傳輸[4-5];基于IP 層的音頻傳輸技術(shù)可以將網(wǎng)絡(luò)中的數(shù)字音頻信號以特定的數(shù)據(jù)包格式進(jìn)行傳輸。目前用于IP 層數(shù)字音頻傳輸?shù)募夹g(shù)有Livewire 和Dante。其中Dante 技術(shù)融合了多種數(shù)字音頻傳輸技術(shù)的優(yōu)點,它能夠為點對點的音頻連接提供了一種低延時、高精度和低成本的解決方案。
本文基于H.323 協(xié)議對音頻會議的流程控制和嵌入式系統(tǒng)功耗性低、便捷性高的特點,設(shè)計了一種基于H.323 的嵌入式音頻傳輸系統(tǒng)。該系統(tǒng)利用海思HI3531A 多媒體處理芯片,從麥克風(fēng)或者音頻文件中獲取音頻裸流來進(jìn)行音頻編碼,然后通過RTP/RTCP實時流媒體傳輸協(xié)議進(jìn)行封裝,并將封裝后的RTP 數(shù)據(jù)包在局域網(wǎng)中傳輸給目標(biāo)終端。目標(biāo)終端對RTP 數(shù)據(jù)包進(jìn)行解封裝,然后將解封裝后的數(shù)據(jù)流進(jìn)行音頻解碼操作,從而獲取到音頻裸流可進(jìn)行播放或存儲。該系統(tǒng)可實現(xiàn)在局域網(wǎng)內(nèi)嵌入式設(shè)備之間進(jìn)行音頻文件下載及實時流式傳輸,適用于社區(qū)安保系統(tǒng)、施工現(xiàn)場指揮系統(tǒng)等場景。
由于嵌入式Linux 系統(tǒng)比常見發(fā)行版的Linux 版本(如Ubuntu、Fedora、CentOS 等)的一個很大的不同之處是前者所占用的內(nèi)存要遠(yuǎn)遠(yuǎn)小于后者,因此安裝了嵌入式Linux 系統(tǒng)的嵌入式單板的存儲資源較少,難以勝任程序的編譯調(diào)試等工作。為此,本設(shè)計需要借助能夠安裝發(fā)行版Linux 版本的PC 來進(jìn)行程序的編譯調(diào)試等操作。所設(shè)計的系統(tǒng)在嵌入式單板執(zhí)行啟動裝載的指令后,可將單板上的操作信息通過串口或者網(wǎng)絡(luò)的方式連接到PC,在PC 上進(jìn)行編譯完成后即可得到相關(guān)的可執(zhí)行文件,把可執(zhí)行文件傳輸?shù)角度胧絾伟逯芯涂梢詧?zhí)行相關(guān)操作。
在嵌入式Linux 中運行的開源庫需要經(jīng)過交叉編譯,且在交叉編譯H323Plus 時要先生成交叉編譯所需的配置文件。本系統(tǒng)使用Hisiv300 的交叉編譯鏈,同時禁用安全協(xié)議OpenSSL 和多媒體開發(fā)庫SDL,這樣就能夠交叉編譯出能在嵌入式單板中運行的H323Plus開源庫。在交叉編譯Ptlib 開源庫時除了需要以上的設(shè)置以外,還需要開啟wav 文件支持和Telnet 協(xié)議支持功能。
由于嵌入式單板中關(guān)于音頻相關(guān)設(shè)置都是默認(rèn)設(shè)置的,不能直接輸入音頻到嵌入式單板中。所以在設(shè)置涉及到音頻輸入輸出及傳輸過程的相關(guān)寄存器時,需要根據(jù)TW6874 芯片的寄存器設(shè)置手冊進(jìn)行操作,具體包括復(fù)位設(shè)置、音頻輸入通道選擇、音頻傳輸方式選擇、音頻輸出增益選擇等。
本系統(tǒng)為基于H.323 協(xié)議的嵌入式音頻傳輸系統(tǒng),其整體架構(gòu)如圖1 所示,該系統(tǒng)基于海思HI3531A SOC 芯片,采用Linux 操作系統(tǒng),在H.323 協(xié)議棧的基礎(chǔ)上通過其中的H.225 協(xié)議進(jìn)行呼叫連接,調(diào)用基于Ptlib 開源庫中的音頻I/O 插件和音頻編解碼插件獲取輸入聲音裸流并進(jìn)行編碼;再通過H.245 協(xié)議建立媒體傳輸通道,將編碼后的音頻流通過實時流媒體傳輸控制協(xié)議RTP/PTCP 進(jìn)行封裝,最后通過局域網(wǎng)網(wǎng)絡(luò)進(jìn)行傳輸,從而實現(xiàn)了基于H.323 協(xié)議的嵌入式音頻傳輸?shù)墓δ堋?/p>

圖1 嵌入式音頻傳輸系統(tǒng)整體架構(gòu)設(shè)計框圖
(1)呼叫控制模塊設(shè)計
呼叫控制模塊主要分為兩部分:主呼叫模塊和被呼叫模塊。當(dāng)使用者調(diào)用應(yīng)用程序選擇監(jiān)聽時則調(diào)用被呼叫模塊,如果選擇呼叫則會調(diào)用主呼叫模塊。
①主呼叫模塊
如圖2 的主呼叫模塊設(shè)計框圖所示,主呼叫模塊是用戶輸入時指定了要呼叫的目的終端地址后開始運行的。發(fā)起呼叫后,主叫方會先創(chuàng)建出一個H.225 呼叫線程并發(fā)送建立連接的消息給被呼叫方。其中,H.225 呼叫線程會一直監(jiān)聽H.225 信道中的消息,如果呼叫線程收到了來自被呼叫方的信令消息,呼叫終端就會根據(jù)收到的具體的信令消息執(zhí)行相對應(yīng)的操作。

圖2 主呼叫模塊設(shè)計框圖
②被呼叫模塊
如圖3 的被呼叫模塊設(shè)計框圖所示,被呼叫模塊在用戶輸入時選擇了監(jiān)聽的選項后被執(zhí)行的。首先創(chuàng)建TCP 的監(jiān)聽器,然后創(chuàng)建H.225 傳輸線程,當(dāng)H.225傳輸線程收到了來自呼叫方發(fā)送的Setup 消息時,就會執(zhí)行相對應(yīng)的操作,包括創(chuàng)建CallProceeding、Alert 等消息。然后就對來自呼叫方的呼叫進(jìn)行應(yīng)答,發(fā)送創(chuàng)建好的CallProceeding、Alert、Connect 消息。準(zhǔn)備正式建立連接。

圖3 被呼叫模塊設(shè)計框圖
(2)音頻編解碼模塊設(shè)計
如圖4 所示,音頻編解碼模塊的開啟是在媒體通道打開之前進(jìn)行的,當(dāng)打開音頻編碼器后,會先判斷當(dāng)前終端音頻的傳輸方向。如果是輸出音頻到遠(yuǎn)程終端的話,首先要從麥克風(fēng)或者音頻文件中獲取音頻裸流,然后將音頻裸流通過編解碼器進(jìn)行編碼,最后通過實時流媒體傳輸控制協(xié)議RTP/PTCP 進(jìn)行封裝。接著將封裝好的RTP 音頻數(shù)據(jù)包通過局域網(wǎng)發(fā)送到遠(yuǎn)程終端。如果是從遠(yuǎn)程終端接收音頻的話,首先要通過實時流媒體傳輸控制協(xié)議RTP/PTCP 進(jìn)行解封裝,然后將音頻編碼流通過音頻編解碼器進(jìn)行解碼,得到音頻裸流。最后將音頻裸流通過揚聲器進(jìn)行播放或者保存為音頻文件。

圖4 音頻編解碼器模塊設(shè)計框圖
(3)媒體通道控制模塊設(shè)計
如圖5 所示,當(dāng)開啟媒體通道后,本地終端先要選擇音頻數(shù)據(jù)的傳輸方向。如果音頻的傳輸方向是發(fā)送音頻到遠(yuǎn)程終端則先要從音頻編解碼器中獲取已經(jīng)編碼后的音頻數(shù)據(jù)流,然后再對編碼后的音頻流通過實時流媒體傳輸控制協(xié)議RTP/PTCP 進(jìn)行封裝。最后把封裝后的RTP 數(shù)據(jù)包通過局域網(wǎng)發(fā)送到遠(yuǎn)程終端。如果音頻的傳輸方向是從遠(yuǎn)程終端接收音頻則要先通過實時流媒體傳輸控制協(xié)議RTP/PTCP 進(jìn)行解封裝,然后將解封裝后得到的音頻編碼流傳輸?shù)骄幗獯a器中進(jìn)行解碼獲得音頻裸流,最后將音頻裸流通過揚聲器進(jìn)行播放或者保存為音頻文件。

圖5 媒體通道模塊設(shè)計框圖
由圖6 所示,程序運行時返回的調(diào)試信息可見,用戶輸入命令,要求作為監(jiān)聽方等待呼叫,而且在視頻傳輸過程中使用V4L2 視頻驅(qū)動,在音頻傳輸過程中使用PulseAudio 音頻驅(qū)動。

圖6 程序運行命令
如圖7 和圖8 所示,當(dāng)輸入命令后,程序會等待遠(yuǎn)程終端的呼叫,并選擇對應(yīng)的音頻驅(qū)動PulseAudio 作為音頻輸入輸出的驅(qū)動。然后會打印出當(dāng)前程序的系統(tǒng)版本、時間、可用視頻驅(qū)動及可用音頻編解碼器等相關(guān)信息。

圖7 程序運行后的打印信息

圖8 可用的音頻編解碼器
本文設(shè)計和實現(xiàn)了一種高效的嵌入式音頻傳輸系統(tǒng),該系統(tǒng)基于H.323 協(xié)議對呼叫和媒體數(shù)據(jù)進(jìn)行實時控制,利用Hi3531A 流媒體平臺對媒體數(shù)據(jù)進(jìn)行高效處理;在設(shè)計中主要使用了RTP/RTCP 協(xié)議作為嵌入式終端間進(jìn)行音頻傳輸?shù)牧鞒炭刂茀f(xié)議。在實際應(yīng)用中使用H.323Plus 和Ptlib 開源庫,通過Hi3531A 流媒體平臺進(jìn)行編解碼等操作,最終通過局域網(wǎng)傳輸實現(xiàn)嵌入式終端間的音頻傳輸。該系統(tǒng)可為日常工作和生活提供更高效便捷的音頻傳輸選擇。