999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式Linux下音頻采集與遠程回放的實現

2017-08-08 03:01:08康敬欣
電子設計工程 2017年13期
關鍵詞:嵌入式

康敬欣,張 田

(北京化工大學 機電工程學院,北京 100029)

嵌入式Linux下音頻采集與遠程回放的實現

康敬欣,張 田

(北京化工大學 機電工程學院,北京 100029)

為了實現遠程通信發射系統的音頻遠程發射,提出了一種嵌入式Linux下音頻的本地采集并傳輸至遠端進行回放的設計方案。該方案采用ALSA完成本地音頻數據的采集,然后利用FFmpeg將其編碼為適合遠程傳輸的AAC格式數據,通過以太網基于UDP協議傳輸至遠端;同時在遠端對接收到的音頻數據,利用FFmpeg和ALSA分別完成音頻的解碼和回放。實驗結果表明,遠端回放的音頻信號流暢清晰,該方案執行穩定、可靠性高。

Linux;FFmpeg;UDP;ALSA

遠程通信發射系統通常包括本地控制單元和遠程發射單元,本地控制單元需要完成待發射音頻數據的采集,然后發送給遠程發射單元進行數據解碼、信號轉換和調制輸出,實現音頻信號的遠程發射。嵌入式Linux系統具有功耗低、較易開發和運行穩定等特點,以及較多成熟的技術應用[1],使之在通信領域的應用不斷擴展。因此,文中給出了一種嵌入式Linux下音頻信號的采集、傳輸和回放的解決方案,為遠程通信發射系統的音頻遠程發射提供一種新的實現方法。

1 研究現狀

隨著嵌入式解決方案和數字多媒體技術的不斷發展,嵌入式音頻信號處理相關技術得到廣泛應用。目前嵌入式操作系統中,處理音頻數據所采用的體系架構多數為 ALSA(Advanced Linux Sound Architecture)[2]。周鵬等在Linux系統環境下,基于ALSA框架完成了音頻處理芯片WM8976的驅動程序設計,得到了較好測試結果[3]。顏瑋等在CORTEX-A8平臺上,研究了編解碼芯片TLV320AIC3110基于ALSA框架的驅動實現,最后完成了音頻編解碼的穩定驅動[4]。不同芯片生產商按照相同的ALSA所定義的調用接口開發音頻接口驅動,此時應用程序只需要調用ALSA庫中提供的API,就可以實現對底層不同音頻硬件的控制。

通常情況下,直接利用ALSA獲得的音頻數據量較大,不利于嵌入式環境下的存儲和遠程傳輸。此時需要使用編解碼功能,對采集到的原始音頻數據進行壓縮,并在音頻回放前解碼還原。目前最常用的音視頻編解碼技術為FFmpeg,它是一個技術領先的、多平臺的開源多媒體處理框架[5]。胡聰等利用FFmpeg首先在嵌入式ARM9客戶端上采集數據并完成編碼工作,然后發送給Windows服務端進行解碼與回放,取得了較好實驗結果[6]。李軍延基于FFmpeg技術搭建了集音視頻轉換和上傳發布為一體的轉換與發布系統,經實驗證明,該系統的音視頻轉換速度非常高,接近實時轉換,提高了網絡傳輸速率[7]。由此可見,FFmpeg用于音視頻編解碼具有較好的性能,得到了廣大應用研究者的認可。

音頻數據的網絡傳輸具有數據量大、實時性要求高等特點,與之對應的網絡傳輸協議也要具備高實時性的能力[8,9]。UDP協議常用于基于網絡的語音傳輸,收發雙方不用事先建立連接,只需知道收方IP地址即可[10,11]。禹華鋼等在電臺通信中,給出了一種基于UDP協議的多線程語音通信方法,實現了兩種電臺工作模式的仿真[12]。趙付軒等實現一種WiFi語音通信方法,該方法基于UDP協議發送音頻數據,利用Qt完成了實時音頻傳輸軟件的開發[13]。由上可知,UDP協議廣泛用于音頻數據的網絡傳輸。

綜上所述,利用ALSA完成音頻信號的采集與回放,利用FFmpeg完成音頻數據的編解碼,基于UDP協議完成數字音頻的網絡傳輸,每種技術都得到了廣泛的實際應用。因此,本文將3種技術結合在一起,得到一種可靠的音頻采集、傳輸和回放的解決方案。

2 軟件設計

實現整個功能包括兩部分軟件設計:一個是本地機軟件設計,需要實現音頻信號采集、編碼和基于UDP協議的客戶端的功能;一個是遠地機軟件設計,需要實現基于UDP協議的服務器、音頻數據的解碼和音頻的回放的功能。

2.1 本地機軟件設計

本地機軟件采用多線程編程,其軟件流程圖如圖1所示。包括三種不同狀態,首先是模塊初始化,包括建立遠程連接、音頻設備和編碼器初始化打開;然后定義相關變量,執行音頻采集、編碼和傳輸;最后在模塊關閉前,清除定義的相關變量,釋放內存空間。

圖1 本地機軟件流程圖

2.2 遠地機軟件設計

為了提高信號質量,降低誤碼率,遠地機軟件采用多線程與緩沖池的方法,開啟了三個線程。一個線程用于監聽是否接收到數據,并將其放入待解碼隊列。一個線程用于解碼,一旦待解碼隊列有數據時,就開始解碼并將數據放入已解碼隊列中。一個線程用于音頻回放,該線程一直等候已解碼隊列中的數據并及時進行回放,其工作流程如圖2所示。

圖2 遠地機軟件流程圖

2.3 音頻信號的采集與回放

在PCM接口下,開發音頻信號處理的程序流程一般可用圖3表示。首先打開待操作的音頻設備獲得句柄,根據實際情況設置工作參數,需要設置的硬件參數包括樣本長度、采樣率、聲道數、幀大小和周期等。完成相關設置后,音頻接口便可當做流來使用,錄音即為讀數據,回放即為寫數據。

圖3 PCM接口下音頻處理軟件流程圖

根據上述開發流程,具體的實現步驟如下

第一步打開音頻設備接口

利用結構體snd_pcm_t定義設備句柄指針*handle,使用ALSA提供的設備打開函數

snd_pcm_open(&handle,"default",mode,0);

參數mode本文使用了代表回放的SND_PCM_STREAM_PLAYBACK,以及代表錄音的SND_PCM_STREAM_CAPTURE,該函數表示以某種模式,打開系統中默認的音頻設備,若成功打開則獲得設備的操作句柄保存到參數handle中。

第二步設置音頻設備硬件參數

首先用結構體snd_pcm_hw_params_t定義設備參數描述變量 *params,并用snd_pcm_hw_params_alloca函數給該變量分配內存空間,再使用snd_pcm_hw_params_any函數初始化該變量。對于各參數的設置,ALSA中對應的API分別如下所示

參數Para1為設備操作句柄handle,參數Para2為設備參數描述變量params,參數Para3對應了不同變量具體的參考值。調用snd_pcm_hw_params(handle,params)函數,作用到實際音頻設備完成參數設置工作。

第三步 音頻設備的錄音/回放

Linux系統中每個具體硬件的操作等同為文件操作,PCM音頻設備的錄音就等同于讀取PCM音頻流到內存,回放就對應于內存音頻數據輸出給PCM音頻流。ALSA中音頻設備的錄音和回放對應的API接口分別如下

snd_pcm_readi(handle,abuffer,frame_size);

snd_pcm_writei(handle,inbuf,frame_size);

參數abuffer開始錄音前事先定義的數據緩沖區,它的大小可根據錄音或回放的時間、采樣率和楨長度確定,參數inbuf為解碼后待回放的音頻數據,參數frame_size表示一次處理的楨數。

第四步關閉音頻設備接口

模塊運行結束前,需要將所有掛起沒有傳輸完的數據傳輸結束,然后關閉音頻流釋放之前動態分配的緩沖區,ALSA中對應的接口API分別如下

snd_pcm_drain(handle);/完成數據傳輸

snd_pcm_close(handle);/關閉音頻流,清除緩沖區

2.4 音頻數據的編解碼

基于FFmpeg實現音頻數據從PCM編碼轉換為AAC[14]編碼的程序流程可用圖4表示,整個流程主要分為3個階段:編碼器初始化打開,流程為查找編碼器,定義AVCodecContext變量設置編碼器相關參數,然后打開編碼器;編碼前相關變量的定義,包括用于存儲編碼前音頻數據的AVFrame類型變量,并指向音頻數據緩沖區,以及用于存儲編碼后音頻數據的AVPacket類型變量;關閉編碼器,清除定義的相關變量并釋放相應的內存空間。

圖4 FFmpeg音頻編碼流程圖

根據以上開發流程,基于FFmpeg的音頻編碼程序具體的實現步驟如下

第一步,編碼器初始化打開,其關鍵代碼如下

參數AV_CODEC_ID_AAC表示編碼器以AAC協議進行編碼;給avcodecontext分配內存后,需要對其相關參數設置,一般情況下需要設置的變量有平均采樣率、采樣模式、聲道布局等;avcodec_open2是指以avcodecontext的設置打開AAC編碼器。

第二步,定義編碼前相關變量并執行編碼,其關鍵代碼如下

同樣給avframe分配內存后,需要設置其參數,包括 nb_samples(一次處理的幀數)、format(原始數據類型)、channel_layout,該參數設置好后利用avcodec_fill_Audio_frame使之與存儲原始音頻數據的緩沖區abuffer相關聯;avcodec_encode_Audio2利用編碼器avcodecontext將輸入的avframe音頻數據編碼后輸出給avpacket,成功編碼后output輸出為1否則為0。

第三步,通過調用 av_free_packet、av_frame_free、avcodec_close和av_free,清除相關變量同時關閉編碼器。

音頻數據的解碼流程和編碼流程相同,只是對應于不同功能調用的API不同。但解碼得到的數據類型與ALSA用于回放的數據類型不符,這里用到了libswresample庫中swr_convert函數進行數據轉換。整個轉換過程的具體實現如下

SwrContext*swr;

swr_convert(swr,p_buffer,out_cout,decodeddata,in_count)/轉換

swr_convert中第二個參數p_buffer待輸出緩沖區的指針,decodeddata表示解碼后的音頻數據,參數in_count和out_count分別表示轉換前后的音頻數據單個聲道的空間大小。

2.5 基于UDP協議的客戶端與服務器

文中利用Boost.Asio網絡庫[15]實現基于UDP客戶端與服務器的建立,得益于網絡庫中包含了大量網絡相關API,開發難度大大降低。客戶端建立關鍵步驟如下:

這種獲得服務器端點的方法為Asio給出的標準方法,在一些網絡通信程序中參數serverip為服務器域名,其IP地址并不唯一比如谷歌。此時利用解釋器resolver調用其成員函數query查找服務器IP和Port,并將得到的結果存入端點迭代器隊列,然后定義端點指針指向迭代器隊列方便后續使用。得到服務器端點后,調用socket.open與socket.set函數進行socket的打開與相關參數設置。當有音頻數據需要傳輸時,調用socket.send函數完成數據的發送。

基于UDP的服務器建立與上述過程類似,相關參數設置包括協議類型、端口號、緩沖區大小等。初始化完成后開始異步接收,將接收到的數據放入待解碼隊列FIFO1中,并按照圖2中的所示的流程開始執行解碼與回放。

3 實驗應用

該音頻采集與遠程回放軟件應用于遠程控制短波發射系統,適用于軍事、航空和航海等領域。在遠程控制短波發射系統中,采用的是帶有Intel N455處理器的嵌入式主控板。待發射數據從音頻接口進入主控板,設置音頻采樣參數,包括采樣頻率44.1KHz、雙聲道采樣、采樣精度為16位,每次采集1024個樣本,于是每次采集音頻數據大小為4 KB。同時設置編碼器比特率為64 kbps,則編碼壓縮后的數據大小約為185B。從而滿足實時性要求,遠地機回放流暢。如遇重大災情,遠程控制短波發射系統可快速組建緊急通信網絡,及時傳播現場狀況,其處理具有實時可操作性。

4 結 論

文中將ALSA、FFmpeg和UDP傳輸協議結合在一起,有效地實現了嵌入式Linux下音頻信號的采集與回放、音頻數據的編碼與解碼以及音頻數據的網絡傳輸。實驗測試表明,該方案執行效率高,滿足設計目標,具有一定的實際參考價值。

[1]周濤,項嶸,李浩,等.基于嵌入式Linux的工業控制系統設計與實現[J].電子設計工程,2016(7):23-25.

[2]余棉水,解曉萌.嵌入式系統ALSA聲卡驅動設計和實現 [J].計算機光盤軟件與應用,2012(10):180-181.

[3]周鵬,王承,湯銀煥,等.基于ALSA的WM8976音頻驅動的設計[J].武漢理工大學學報(信息與管理工程版),2011,33(4):517-520.

[4]顏瑋,鄭晉.基于TCC8801的嵌入式Linux ALSA音頻驅動設計與研究[J].科技信息,2013(23):100-102.

[5]LeiXiaohua,JiangXiuhua,WangCaihong.Design and Implementation of a Real-time Video Stream Analysis System Based on FFMPEG[C]//2013 Fourth World Congress on Software Engineering,2013(18):37-46.

[6]胡聰,周甜,唐璐丹.基于FFMPEG的跨平臺視頻編解碼研究[J].武漢理工大學學報,2011,33(11):139-142.

[7]李軍延.利用FFMPEG技術搭建流媒體服務器[J].現代電子技術,2014,37(18):23-25.

[8]黃云.基于CobraNet的網絡音頻傳輸的設計與實現[J].計算機與網絡,2015(24):66-69.

[9]王銳,趙紅東.一種網絡傳輸中實時音頻數據丟包恢復的方法[J].電子設計工程,2011(9):16-18.

[10]Botta A,Pescape A.IP packet interleaving for UDP bursty losses [J].Journal of Systems and Software,2015(109):177-191.

[11]B otta A,Pescape A.IP packet interleaving for UDP bursty losses [J].Journal of Systems and Software,2015,109:177-191.

[12]禹華鋼,周安棟,劉宏波.多線程語音通信在模擬電臺通信中的應用[J].火力與指揮控制,2010,35(3):42-45.

[13]趙付軒,楊斌.基于QT的WiFi語音通信系統[J].單片機與嵌入式系統應用,2012,12(9):63-66.

[14]Vladimir B.New fast algorithms for the low delay MDCT computation in theMPEG-4 AAC enhanced low delay Audio coding standard[J].Signal Processing,2014(105):410-418.

[15]吳克松,陳浩然,董建平.基于IOCP的Boost.Asio的研究及在高清MCU中的應用 [J].數據通信,2015(2):11-14.

Implementation of audio capture and playback remotely base on embedded Linux system

KANG Jing-xin,ZHANG Tian
(Mechanical and Electrical Engineering Institute,Beijing University of Chemical Technology,Beijing 100029,China)

In order to achieve the audio transmission remotely of the remote communication transmission system,the design of local audio capturing and transmitting to remote system to playback based on Embedded Linux system is designed in this paper.The ALSA is used to complete the local audio data collection,and the data will be encoded to AAC format which is suitable for remote transmission by using FFmpeg,then the AAC data will be transmitted to remote system via Ethernet based on UDP protocol.At the remote system,the FFmpeg and ALSA are used to complete the audio decoding and playback respectively.The experiment result show that the playback of audio signals is naturally and clearly,and the implementation of the program is steady and highly reliable.

Linux;FFmpeg;UDP;ALSA

TN919

:A

:1674-6236(2017)13-0130-05

2016-05-31稿件編號:201605308

康敬欣(1972—),女,河北定州人,博士,講師。研究方向:傳感與測控技術、武器系統仿真、信號分析與處理。

猜你喜歡
嵌入式
Focal&Naim同框發布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于嵌入式Linux內核的自恢復設計
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
嵌入式PLC的設計與研究
電子制作(2018年16期)2018-09-26 03:27:18
搭建基于Qt的嵌入式開發平臺
基于嵌入式系統Windows CE的應用程序開發
嵌入式單片機在電機控制系統中的應用探討
電子制作(2017年8期)2017-06-05 09:36:15
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 亚洲无码久久久久| 成人午夜视频网站| 一本一道波多野结衣av黑人在线| 国产成人精品一区二区不卡| 在线观看亚洲成人| 国产激情第一页| 尤物午夜福利视频| 亚洲欧洲自拍拍偷午夜色无码| 国产成年女人特黄特色大片免费| 亚洲日韩高清在线亚洲专区| 久久国产精品娇妻素人| 欧美亚洲激情| 黄色网站在线观看无码| 日韩无码视频专区| 国产一区二区三区免费观看| 国产在线自乱拍播放| 亚洲天堂精品视频| 欧美成人在线免费| 老司机aⅴ在线精品导航| 精品国产一区二区三区在线观看| 国产在线小视频| 日本www色视频| 国产精品99r8在线观看| 香蕉eeww99国产精选播放| 亚洲香蕉伊综合在人在线| 亚洲天堂久久久| 人妻精品久久无码区| 激情无码字幕综合| 波多野结衣无码AV在线| 亚洲精品自拍区在线观看| 国产91视频观看| 午夜精品久久久久久久99热下载| 91亚瑟视频| 免费毛片视频| 色综合中文综合网| 国产69精品久久久久孕妇大杂乱 | 中文字幕免费在线视频| 99热这里只有成人精品国产| 无码国内精品人妻少妇蜜桃视频| 亚洲精选无码久久久| 亚洲无码熟妇人妻AV在线| 日本一本正道综合久久dvd| 依依成人精品无v国产| 国产91色在线| 在线观看视频99| 免费毛片全部不收费的| 成年人福利视频| 九九热精品视频在线| 色婷婷色丁香| 国产无码网站在线观看| 国外欧美一区另类中文字幕| 欧美综合一区二区三区| 午夜视频www| 99久久精品国产自免费| 91啪在线| 91麻豆精品国产91久久久久| 国产精品无码制服丝袜| 国产成人精品亚洲日本对白优播| 国产综合网站| 欧美成人亚洲综合精品欧美激情 | 国产精品深爱在线| 超碰aⅴ人人做人人爽欧美| 全裸无码专区| 无码一区中文字幕| 91av国产在线| 久青草免费在线视频| 久久99国产精品成人欧美| 国产又黄又硬又粗| 三级国产在线观看| 在线播放精品一区二区啪视频| 国产白丝av| 青草免费在线观看| 亚洲天堂精品在线观看| 色网站在线免费观看| 亚洲天堂免费观看| 亚洲全网成人资源在线观看| 国产簧片免费在线播放| 首页亚洲国产丝袜长腿综合| 茄子视频毛片免费观看| 中文无码日韩精品| 亚洲福利视频网址| 免费人欧美成又黄又爽的视频|