摘 要 在TI 最新的TMS320DM8168開發(fā)平臺(tái)上實(shí)現(xiàn)了高質(zhì)量視頻服務(wù)器設(shè)計(jì),從工程層面分析DaVinci平臺(tái)的硬件系統(tǒng)、架構(gòu)和組件,解釋達(dá)芬奇資源、系統(tǒng)移植、流媒體應(yīng)用搭建及中間件概念,提出利用DaVinci架構(gòu)和嵌入式Linux設(shè)計(jì)高質(zhì)量、低成本的基于SIP的流媒體傳輸系統(tǒng)的方法,重點(diǎn)闡述DaVinci平臺(tái)的特點(diǎn)、開發(fā)方法和監(jiān)控中心軟件的實(shí)現(xiàn) ,解決該芯片內(nèi)部DSP端和ARM 端之間的雙核通信及視頻服務(wù)程序的應(yīng)用問(wèn)題。
【關(guān)鍵詞】DaVinci 視頻服務(wù)器 視頻編碼 SIP
1 DaVinci系統(tǒng)介紹
TMS320DM8168是德州儀器公司最新推出的一款DaVinci芯片,是當(dāng)前最合理的單片實(shí)時(shí)多格式編碼轉(zhuǎn)換解決方案, 其雙核結(jié)構(gòu)使得其開發(fā)過(guò)程為:其平臺(tái)程序的執(zhí)行都先由ARM 端操作系統(tǒng)執(zhí)行,而后由ARM端操作系統(tǒng)通過(guò)特定API函數(shù)調(diào)用DSP內(nèi)置編解碼引擎與操作系統(tǒng)服務(wù)結(jié)構(gòu)來(lái)觸發(fā)DSP 端的程序完成。從應(yīng)用的角度上來(lái)看,介于應(yīng)用與驅(qū)動(dòng)之間的軟件模塊Codec Engine是用來(lái)例化和調(diào)用xDAIS算法的一組用戶編程接口。xDAIS是德州儀器公司的一種算法標(biāo)準(zhǔn),并在XDAIS基礎(chǔ)上補(bǔ)充雙核通信后的算法封裝標(biāo)準(zhǔn)是XDM。運(yùn)行在遠(yuǎn)端或本地,并與操作系統(tǒng)無(wú)關(guān)的Codec Engine API 調(diào)用的算法,無(wú)論Codec Engine 運(yùn)行在ARM 端還是DSP上, 對(duì)應(yīng)的用戶編程接口函數(shù)都是完全一樣。通過(guò)stub接口和skeleton接口調(diào)用Engine SPI函數(shù)訪問(wèn)實(shí)際算法VISA API函數(shù),其可為VISA process / create / control /delete四個(gè)子函數(shù),分別完成程序數(shù)據(jù)的處理、創(chuàng)建、控制和刪除四種應(yīng)用。Codec Server運(yùn)行在DaVinci平臺(tái)的數(shù)字信號(hào)處理器端,其內(nèi)核為DSP/BIOS,控制實(shí)際的特殊功能寄存器, 編譯生成數(shù)字信號(hào)處理器端可執(zhí)行的鏡像程序。ARM端服務(wù)器與DSP端編解碼引擎相當(dāng)于服務(wù)器和客戶機(jī)之間的關(guān)系,ARM 端的應(yīng)用程序通過(guò)自定義接口或者VISA接口發(fā)出連接信號(hào)到DSP 端,并傳遞相關(guān)數(shù)據(jù),然后由DSP 端的Skeleton 接口送出相應(yīng)算法,反過(guò)來(lái)通過(guò)Skeleton接口將DSP端運(yùn)算后的結(jié)果交由Stubs接口 送到ARM端操作系統(tǒng)實(shí)現(xiàn)交互。
2 DaVinci視頻編碼實(shí)現(xiàn)
2.1 程序的結(jié)構(gòu)
由于DSP端的特殊數(shù)據(jù)處理架構(gòu),所以在DSP端運(yùn)行視頻編解碼算法的核心程序,來(lái)提高運(yùn)算速度,ARM端負(fù)責(zé)芯片、接口的通信及對(duì)控制DSP端程序, DSP端完成分析編碼類型、視頻解碼和儲(chǔ)存參考幀等處理,ARM 端應(yīng)用網(wǎng)絡(luò)完成整理的源圖像數(shù)據(jù)、儲(chǔ)存?zhèn)鬏斁幋a后的文件及寫入的編解碼數(shù)據(jù), ARM端在寫入一幀圖像后,通過(guò)VISA 函數(shù)接口,調(diào)用DSP端的用戶接口函數(shù)完成一次編碼。
2.2 算法開發(fā)流程
先在CCS 工程下進(jìn)行H.264 編碼程序移植,應(yīng)用DSP 端硬件完成仿真編碼,而后再通過(guò)DVSDK 的開發(fā)來(lái)實(shí)現(xiàn), 并在三個(gè)不同的文件夾進(jìn)行處理,分以下三個(gè)步驟:
第一步, 在TI提供的編譯軟件文件夾example/ti/sdo/ce/example/codec下,生成可被Codec Engine 調(diào)用package,由源程序和配置文件生成xDAIS 文件、ARM 端及DSP 端庫(kù)等封裝程序。把在CCS 下實(shí)現(xiàn)的視頻編解碼算法中編碼一幀算法拷貝到此文件夾下, 編譯生成一個(gè)編解碼算法的庫(kù)文件,并更改package.xdc、package.xs、H264ENCODE.xdc、H264ENCODE.xs、package.bld等文件。
第二步, 調(diào)用軟件的example/ti/sdo/ce/example/server文件夾,編譯生成DSP 端可執(zhí)行文件,并配置與鏈接.tcf、link.cmd、.cfg、main.c等函數(shù)文件。
第三步,應(yīng)用軟件的example/ti/sdo/ce/example/App 文件夾,編譯生成ARM 端可執(zhí)行程序,其中含對(duì)XDM 接口調(diào)用、.cfg配置、makefile等文件。
最后,將運(yùn)算得到的codec 包、DSP Server 和Engine 配置文件*.cfg,通過(guò)編譯、鏈接,生成ARM 端的可執(zhí)行文件。
2.3 雙核通信方法
雖然通過(guò)上述配置實(shí)現(xiàn)了關(guān)聯(lián)配置文件夾,但要程序執(zhí)行過(guò)程中能D ARM端和SP 端的數(shù)據(jù)正常通信,還要以下兩種數(shù)據(jù)的傳遞:
(1)編碼參數(shù):DSP 端進(jìn)行視頻算法編碼時(shí)需傳遞大量的數(shù)據(jù), 其傳遞初始化算法的相關(guān)數(shù)據(jù)為VISA 接口中的*_create()函數(shù)的第三個(gè)數(shù)據(jù), 這些數(shù)據(jù)為一些通用的編碼數(shù)據(jù)。
(2)編碼前先將原圖像數(shù)據(jù)的存放地址等信息發(fā)送到DSP端,編碼結(jié)束后再將編碼數(shù)據(jù)發(fā)送回到ARM 端操作系統(tǒng), 通過(guò)VISA 接口中的*_process()函數(shù)來(lái)實(shí)現(xiàn)上述兩個(gè)過(guò)程的信息發(fā)送。
3 嵌入式系統(tǒng)的中間件
針對(duì)嵌入式系統(tǒng)架構(gòu)中諸如分布異構(gòu)、網(wǎng)絡(luò)訪問(wèn)等技術(shù)問(wèn)題,德州儀器公司將中間件和C/S框架引入到嵌入式系統(tǒng),針對(duì)音頻處理、圖像、話音和視頻搭建了VISA框架,包括達(dá)芬奇處理器平臺(tái)、實(shí)時(shí)操作系統(tǒng)、系統(tǒng)程序接口和應(yīng)用程序接口,中間件和符合XDIS或XDM規(guī)約的算法組件以及XDC集成工具箱。借助于嵌入式中間件,嵌入式系統(tǒng)由原來(lái)的“服務(wù)響應(yīng)+應(yīng)用請(qǐng)求”的兩層結(jié)構(gòu)轉(zhuǎn)變成為“服務(wù)響應(yīng)+嵌入式中間件+應(yīng)用請(qǐng)求”的三層結(jié)構(gòu)。
4 達(dá)芬奇子系統(tǒng)實(shí)現(xiàn)
子系統(tǒng)硬件部分采用DaVinci技術(shù)的TMS320DM8168為核心,外設(shè)包括視頻編碼芯片SAA7121H、視頻解碼芯片SAA7115H、ATA硬盤、64M bit SDRAM、Flash 單元、電源模塊、外接時(shí)鐘及以太網(wǎng)接口等構(gòu)成。軟件部分由 DM8168初始化程序、外圍設(shè)備驅(qū)動(dòng)程序、MontavistaLinux嵌入式操作系統(tǒng)以及應(yīng)用層程序等組成。初始化程序?qū)崿F(xiàn)設(shè)置系統(tǒng)初始化、DSP和ARM啟動(dòng)方式、工作模式等工作,驅(qū)動(dòng)程序完成連接底層硬件和操作系統(tǒng)API函數(shù);嵌入式操作系統(tǒng)管理系統(tǒng)資源及調(diào)度多任務(wù);應(yīng)用層程序完成音頻和視頻采集、播放、處理及存儲(chǔ)。endprint
流媒體程序部分通過(guò)在主程序加入線程RTP/RTCP 線程和SIP 控制實(shí)現(xiàn)對(duì)視頻流數(shù)據(jù)的控制和傳輸,關(guān)健代碼流程如圖2所示。SIP_init()實(shí)現(xiàn)了對(duì)數(shù)據(jù)流的實(shí)時(shí)傳輸和對(duì)SIP協(xié)議棧的初始化,采用oRTPT 和eXoSIP兩個(gè)開源的協(xié)議棧解決兩個(gè)協(xié)議棧在系統(tǒng)中的實(shí)現(xiàn),通過(guò)交叉編譯可以把這兩個(gè)協(xié)議編譯成ARM-Linux 下運(yùn)行的庫(kù)。
4.1 RTP/RTCP 實(shí)現(xiàn)
把oRTP 移植到DaVinci系統(tǒng)后就可以展開RTP/RTCP 模塊的編程任務(wù),采用一個(gè)全局結(jié)構(gòu)指針prtpstat對(duì)RTP/RTCP 模塊的訪問(wèn)和控制。
struct RTP_stat * prtpstat
#define STREAME_COUNT 100
#define PACKET_SIZE 100000
struct RTP_stat{
int runcond;
int channels;
SessionSet *set;
RtpSession *session[STREAMS_COUNT];
Unsigned char *buffer[STREAMS_COUNT];
int user_ts[STREAMS_COUNT];
int connected[STREAMS_COUNT];};
4.2 SIP 信號(hào)控制模塊的實(shí)現(xiàn)
oSIP2用C 語(yǔ)言編寫,是一個(gè)開放源代碼的SIP 協(xié)議棧,具有短小簡(jiǎn)潔的特點(diǎn),專注于SIP 底層解析使得它的效率比較高,應(yīng)用eXoSIP2可以很方便地創(chuàng)建一個(gè)完整的SIP 程序。
5 PC子系統(tǒng)實(shí)現(xiàn)
系統(tǒng)中PC子系統(tǒng)作為用戶端的,通過(guò)IP網(wǎng)絡(luò)獲得達(dá)芬奇服務(wù)器端的視頻資源,并實(shí)現(xiàn)對(duì)視頻資源的回放、存儲(chǔ)管理等功能。要在Windows環(huán)境使用eXosip和oRTP庫(kù),因此也需要它們?cè)赪indows 下的庫(kù)文件,可以從互聯(lián)網(wǎng)上下載或源文件自己編譯。用Sun的Java 開發(fā)平臺(tái)開發(fā)用戶端軟件,網(wǎng)絡(luò)傳輸模塊的結(jié)構(gòu)和ARM 下SIP 服務(wù)器的網(wǎng)絡(luò)傳輸模塊基本相同,不同之處是SIP消息循環(huán)中消息處理過(guò)程,用戶用鍵盤或鼠標(biāo)在程序界面上操作完成呼叫、SIP注冊(cè)、呼叫結(jié)束等過(guò)程。
6 結(jié)束語(yǔ)
由DaVinci平臺(tái)的特點(diǎn),借助 Codec Engine API 函數(shù)實(shí)現(xiàn)音視頻數(shù)據(jù)的壓縮、RTSP 狀態(tài)轉(zhuǎn)換的實(shí)現(xiàn)方法、RTSP 會(huì)話中信令的交互過(guò)程、使用音視頻驅(qū)動(dòng)程序捕獲實(shí)時(shí)數(shù)據(jù)的方法、使用 ffmpeg 解析多媒體文件的步驟、將多媒體數(shù)據(jù)打成 RTP 包發(fā)送、開發(fā) DirectShow 播放鏈路應(yīng)用等子系統(tǒng), 并對(duì)代碼在數(shù)據(jù)結(jié)構(gòu)、內(nèi)存管理、執(zhí)行效率等方面進(jìn)行優(yōu)化,將流媒體系統(tǒng)的開發(fā)分解為媒體文件解析模塊、RTSP 信令模塊、DirectShow 播放模塊、RTP 網(wǎng)絡(luò)發(fā)送模塊和實(shí)時(shí)數(shù)據(jù)處理模塊,由此提出基于DaVinci技術(shù)的DM8168的嵌入式視頻服務(wù)器在處理復(fù)雜環(huán)境監(jiān)控下完整實(shí)現(xiàn)方案。
參考文獻(xiàn)
[1]TMS320DM8168 Digital Media System-on-Chip(SPRS403A)。
[2]程曉東,黃根勇.嵌入式DaVinci平臺(tái)視頻服務(wù)器的設(shè)計(jì)[J].內(nèi)蒙古大學(xué)學(xué)報(bào),2010(40):309-313.
[3]陳冒銀.DAVINCI技術(shù)在便攜式視頻偵察系統(tǒng)中的應(yīng)用[J].數(shù)據(jù)采集與處理,2008(29):23-26.
[4]吳駿,楊照選.ARM與DSP雙核視頻交通檢測(cè)系統(tǒng)通信接口設(shè)計(jì)[J].計(jì)算機(jī)工程,2007(13):33-35.
作者簡(jiǎn)介
黃根勇(1982-),男,碩士學(xué)位。講師。主要研究方向?yàn)榍度胧较到y(tǒng)。
作者單位
江西制造職業(yè)技術(shù)學(xué)院 江西省南昌市 330095endprint