張國(guó)超 金巧園 代中華
(中國(guó)船舶重工集團(tuán)公司第七二六研究所 上海市 201108)
計(jì)算機(jī)操作系統(tǒng)可以分為實(shí)時(shí)計(jì)算機(jī)操作系統(tǒng)和分時(shí)操作系統(tǒng)。分時(shí)操作系統(tǒng)的主要缺點(diǎn)是由于所有進(jìn)程根據(jù)相同的時(shí)間片進(jìn)行切換調(diào)度,用戶無(wú)法根據(jù)實(shí)際需求指定進(jìn)程優(yōu)先級(jí),這樣的設(shè)計(jì)會(huì)導(dǎo)致重要的工作任務(wù)可能被意外打斷,無(wú)法一些實(shí)時(shí)性要求比較高的應(yīng)用場(chǎng)景。與此對(duì)應(yīng)的實(shí)時(shí)操作系統(tǒng)為了解決上述問(wèn)題,允許用戶根據(jù)實(shí)際情況設(shè)定任務(wù)優(yōu)先級(jí),高優(yōu)先級(jí)的任務(wù)在沒(méi)有結(jié)束前,低優(yōu)先級(jí)的任務(wù)無(wú)法打斷,以此方式保證高優(yōu)先級(jí)任務(wù)能夠在規(guī)定時(shí)間內(nèi)完成,極大滿足了用戶對(duì)實(shí)時(shí)響應(yīng)的需求。VxWorks 操作系統(tǒng)是目前全球成熟度最高和應(yīng)用最為廣泛的嵌入式實(shí)時(shí)操作系統(tǒng)之一,并且以卓越的實(shí)時(shí)性和穩(wěn)定性在被廣泛的應(yīng)用在很多諸如醫(yī)療基礎(chǔ)設(shè)施、航空航天、船舶等關(guān)鍵基礎(chǔ)設(shè)施及軍事相關(guān)領(lǐng)域。幾乎所有操作系統(tǒng)的用戶都需要系統(tǒng)能夠運(yùn)行穩(wěn)定,同時(shí)由于不同的應(yīng)用場(chǎng)景千差萬(wàn)別,操作系統(tǒng)的模塊化和可裁剪性也越來(lái)越重要,而VxWorks 憑借著其超高可靠性、功能模塊的可裁剪性以及高實(shí)時(shí)性的卓越優(yōu)勢(shì)越來(lái)越贏得用戶的青睞。在功能組件的可裁剪方面,VxWorks操作系統(tǒng)給用戶提供非常靈活和簡(jiǎn)便的方式就能夠根據(jù)自己的實(shí)際需要配置一個(gè)屬于自己的操作系統(tǒng)內(nèi)核鏡像,默認(rèn)的VxWorks 系統(tǒng)內(nèi)核是非常小的,只有大約8KB 大小,功能也很有限,而功能強(qiáng)大的VxWorks 支持可裁剪的組件數(shù)量是非常龐大的,包括系統(tǒng)文件系統(tǒng)、網(wǎng)絡(luò)服務(wù)、多任務(wù)、多核態(tài)支持、圖形顯示控制、遠(yuǎn)程服務(wù)、域名解析服務(wù)、文件傳輸服務(wù)、外設(shè)支持等很多高級(jí)功能組件,用戶可以借助風(fēng)河公司提供軟件集成開(kāi)發(fā)工具Workbench 等工具來(lái)實(shí)現(xiàn)定制功能,首先創(chuàng)建內(nèi)核鏡像項(xiàng)目,然后通過(guò)圖形化方式非常容易的配置和定制所需要系統(tǒng)內(nèi)核,這種高度的靈活性能夠讓用戶非??旖莘奖愕母鶕?jù)實(shí)際應(yīng)用情況定制或者定制后二次開(kāi)發(fā)一款完全符合自己需求的操作系統(tǒng)鏡像,為用戶開(kāi)發(fā)軟件提供了很大的靈活和便利性,而且能夠節(jié)約磁盤(pán)空間,去掉冗余的功能模塊,節(jié)約系統(tǒng)資源的同時(shí)也提高了系統(tǒng)的運(yùn)行速度和性能。在系統(tǒng)的實(shí)時(shí)性方面,受益于VxWorks 操作系統(tǒng)的高度可裁剪性,系統(tǒng)自身的資源占有率為最小化的,開(kāi)銷可控,與此同時(shí)系統(tǒng)設(shè)計(jì)之初實(shí)時(shí)性就是重要的設(shè)計(jì)標(biāo)準(zhǔn)和要求,系統(tǒng)的中斷處理、任務(wù)調(diào)度算法、任務(wù)之間的通信等系統(tǒng)本身的時(shí)間開(kāi)銷很小,因此任務(wù)切換時(shí)間很少,為系統(tǒng)的實(shí)時(shí)性提供了基礎(chǔ)保障。鑒于物理世界是并發(fā)的而不是串行的,因此操作系統(tǒng)的多任務(wù)并發(fā)是真實(shí)世界重要的模擬,在多任務(wù)調(diào)度算法方面,VxWorks 操作系統(tǒng)采用的是任務(wù)輪轉(zhuǎn)方式和任務(wù)優(yōu)先級(jí)方式結(jié)合的設(shè)計(jì),這樣的設(shè)計(jì)能夠保證在相同的運(yùn)算性能的計(jì)算機(jī)具有更高的實(shí)時(shí)性和可靠性。
對(duì)基于VxWorks 操作系統(tǒng)開(kāi)發(fā)的很多軍工、航空、航天、船舶制造等專用設(shè)備的應(yīng)用軟件研究發(fā)現(xiàn),在這些應(yīng)用場(chǎng)景下尤其是顯示控制設(shè)備的軟件,通常需要將執(zhí)行任務(wù)的過(guò)程及操作過(guò)程的場(chǎng)景數(shù)據(jù)記錄下來(lái),同時(shí)在需要復(fù)盤(pán)分析時(shí)候再將記錄的場(chǎng)景數(shù)據(jù)利用特定軟件回放,分析任務(wù)執(zhí)行完成操作復(fù)盤(pán)。場(chǎng)景數(shù)據(jù)的記錄和回放傳統(tǒng)做法是基于網(wǎng)絡(luò)數(shù)據(jù)報(bào)文的方式,技術(shù)上一般利用交換機(jī)的匯聚口可以接收到經(jīng)過(guò)交換機(jī)全部網(wǎng)絡(luò)數(shù)據(jù)包的特點(diǎn)以及利用原始套接字能夠接收到網(wǎng)口的全部網(wǎng)絡(luò)數(shù)據(jù)的功能,并根據(jù)過(guò)濾條件捕獲通過(guò)交換機(jī)的符合過(guò)濾條件的全部網(wǎng)絡(luò)層數(shù)據(jù),通過(guò)軟件在原始報(bào)文前面增加時(shí)戳、報(bào)文唯一標(biāo)志等附件頭部后,將添加過(guò)頭部的數(shù)據(jù)包作為待記錄場(chǎng)景數(shù)據(jù),利用系統(tǒng)文件操作接口以純文本方式將場(chǎng)景數(shù)據(jù)存儲(chǔ)在本地硬盤(pán)中,在需要進(jìn)行場(chǎng)景回放時(shí),使用定制的場(chǎng)景回放軟件讀取記錄的文件到內(nèi)存中,回放軟件根據(jù)固定的網(wǎng)絡(luò)通信協(xié)議進(jìn)行數(shù)據(jù)報(bào)文分類和解析處理,將解析結(jié)果進(jìn)行業(yè)務(wù)代碼驅(qū)動(dòng),完成回放任務(wù)。
上述基于報(bào)文級(jí)別數(shù)據(jù)記錄重演做法弊端是無(wú)法針對(duì)記錄過(guò)程的操作進(jìn)行記錄和回放,失去重要的操作信息,并且記錄和重演的方式對(duì)通信協(xié)議依賴性比較強(qiáng),需要針對(duì)不同協(xié)議類型的項(xiàng)目分別開(kāi)發(fā)記錄和重演的軟件,實(shí)現(xiàn)代價(jià)較高且不具有通用性。鑒于報(bào)文級(jí)別記錄重演存在的問(wèn)題,本文提出一種屏幕錄取和回放的方式解決上述問(wèn)題。目前Windows 操作系統(tǒng)、Linux/Unix 操作系統(tǒng)都有比較專業(yè)的、成熟的配套軟件實(shí)現(xiàn)屏幕的錄制,同時(shí)有相應(yīng)的播放器實(shí)現(xiàn)錄屏數(shù)據(jù)的回放。然而VxWorks 操作系統(tǒng)對(duì)于視頻和圖形支持比較有限,目前基于VxWorks 的屏幕錄制和回放技術(shù)的研究成果也很少,因此本文采取周期性屏幕截屏并使用移植的x264 編碼器進(jìn)行圖像數(shù)據(jù)壓縮,形成場(chǎng)景數(shù)據(jù)的屏幕錄制文件,應(yīng)用移植的FFmpeg 提供的解碼器實(shí)現(xiàn)場(chǎng)景記錄的視頻文件的解碼和回放任務(wù)。
H.264 技術(shù)是新一代的視頻編碼和解碼技術(shù),它是由運(yùn)動(dòng)圖像專家組(MPEG)和國(guó)際通信聯(lián)盟(ITU)共同提出的,由于其具有較低的碼率、高峰值信噪比、強(qiáng)大的容錯(cuò)性能、靈活的網(wǎng)絡(luò)適配能力等從前或其他視頻解壓縮技術(shù)不具備的優(yōu)勢(shì),因此已經(jīng)成為了最為當(dāng)前全球應(yīng)用最為廣泛的視頻編碼和解碼技術(shù)。與以往的視頻編碼標(biāo)準(zhǔn)相比,H.264 標(biāo)準(zhǔn)采用優(yōu)化設(shè)計(jì)降低接口輸入?yún)?shù)的數(shù)量,使得應(yīng)用接口的使用更加便捷并且容易使用,同時(shí)比以前的視頻壓縮技術(shù)具有更高的壓縮能力?,F(xiàn)代社會(huì)隨著多媒體技術(shù)的蓬勃發(fā)展以及互聯(lián)網(wǎng)技術(shù)和移動(dòng)技術(shù)的廣泛普及,作為新一代視頻編碼技術(shù)的H.264 考慮到壓縮性能的同時(shí)考慮到了視頻會(huì)議等流行網(wǎng)絡(luò)應(yīng)用的網(wǎng)絡(luò)通信適配能力,能夠?qū)崿F(xiàn)在具有低誤碼率以及低丟包率的情況下支持多種不同的碼率以適應(yīng)網(wǎng)絡(luò)帶寬以及擁塞程度不同的網(wǎng)絡(luò)狀況,不同的網(wǎng)絡(luò)通信狀態(tài)可以切換不同的碼率。H.264 視頻編碼技術(shù)支持幀內(nèi)預(yù)測(cè)視頻編碼技術(shù)和幀間預(yù)測(cè)視頻編碼技術(shù)相結(jié)合的方式,針對(duì)于不同的視頻類型和實(shí)際視頻數(shù)據(jù)采用不同的預(yù)測(cè)技術(shù)能夠大大節(jié)約空間,提高壓縮效率。所謂幀內(nèi)預(yù)測(cè)是指利用圖像的空間相關(guān)性,假設(shè)在一個(gè)小鄰域內(nèi)的某個(gè)宏塊,像素點(diǎn)之間是具有很大的空間相關(guān)性的,與此同時(shí)劃分的宏塊之間也具有較大的空間相關(guān)性,所以編碼當(dāng)前宏塊時(shí)第一步可以根據(jù)上、下、左、右以及左上、左下、右上、右下八個(gè)周邊宏塊對(duì)當(dāng)前宏塊進(jìn)行預(yù)測(cè),第二步將真實(shí)值和預(yù)測(cè)值的差值(數(shù)據(jù)殘差)進(jìn)行數(shù)據(jù)壓縮,因?yàn)閿?shù)據(jù)殘差本身的數(shù)據(jù)稀疏性,因此在原有基礎(chǔ)上更進(jìn)一步提高了壓縮效率。利用離散余弦變換后可以將空間域的信息轉(zhuǎn)換到頻率域,由于空間的高相關(guān)性變換后的將會(huì)是一個(gè)稀疏的矩陣,即可以對(duì)其進(jìn)行相應(yīng)的壓縮處理,很明顯空間的相關(guān)性越強(qiáng)或者幀內(nèi)的宏塊劃分的越合理得到的頻率域矩陣會(huì)更加稀疏,壓縮效果也會(huì)更加好壓縮比更高。所謂幀間預(yù)測(cè)技術(shù)是指利用視頻幀與幀之間時(shí)間域上的相關(guān)性,去除冗余信息達(dá)到壓縮視頻的效果。由于人類眼球具有瞬態(tài)記憶的能力,利用這一特點(diǎn)視頻播放往往采用的播放頻率達(dá)到60 幀每秒或以上即可以滿足人類視覺(jué)需求,本來(lái)離散的視頻幀我們看起來(lái)將會(huì)像是連續(xù)的,由于每秒的視頻幀數(shù)量是高大60 幀甚至更高,因此視頻幀之間在時(shí)間域上面應(yīng)該是與上一個(gè)視頻幀以及下一個(gè)視頻幀之間比較相似,也就是具有高度的時(shí)間域的相關(guān)性,如果好好利用會(huì)最大限度的減少空間的數(shù)據(jù)冗余從而實(shí)現(xiàn)很高的壓縮比。與幀內(nèi)預(yù)測(cè)編碼技術(shù)相同幀間視頻編碼技術(shù)也是以宏塊作為編碼的最小單位的,首先進(jìn)行宏塊的切分,切分后根據(jù)幀間預(yù)測(cè)類型(包括前向參考預(yù)測(cè)、后向參考預(yù)測(cè)以及雙向參考預(yù)測(cè))在參考幀上面進(jìn)行宏塊的全局搜索,將搜索到宏塊作為參考宏塊,然后計(jì)算待編碼宏塊與參考宏塊的殘差,最后與幀內(nèi)預(yù)測(cè)編碼類似,也是針對(duì)殘差進(jìn)行離散余弦變換,然后對(duì)變換后的矩陣進(jìn)行壓縮。由于離散余弦變換后的矩陣是一個(gè)浮點(diǎn)數(shù)矩陣,為了提高計(jì)算機(jī)處理效率,在不影響視頻質(zhì)量的前提下H.264 視頻編碼技術(shù)應(yīng)用量化技術(shù)來(lái)對(duì)浮點(diǎn)數(shù)進(jìn)行量化處理,量化技術(shù)在一方面提高了計(jì)算機(jī)處理速度從而提高編碼速度的同時(shí),會(huì)導(dǎo)致有一部分?jǐn)?shù)據(jù)因?yàn)榱炕鴵p失,因此H.264 視頻編碼技術(shù)是一種有損的視頻編碼技術(shù),同時(shí)視頻編碼的質(zhì)量就可以根據(jù)原始視頻與經(jīng)過(guò)視頻編碼和解碼后的視頻之間的差異來(lái)衡量,主要的衡量方法包括兩個(gè)視頻間的平方誤差和(SSD)、均方差(MSE)、絕對(duì)誤差和(SATD)和峰值信噪比(PSNR),可以根據(jù)實(shí)際情況進(jìn)行選擇,平方誤差、均方差、絕對(duì)誤差越小或者峰值信噪比越高解碼后的視頻質(zhì)量越高或者視頻編碼損失最小。
H.264 視頻編碼技術(shù)有官方實(shí)現(xiàn)的版本JM86,具有很高H.264 的功能特性的完備性,學(xué)術(shù)研究的算法大多基于該版本代碼進(jìn)行功能性能測(cè)試,但是由于其功能過(guò)多、軟件復(fù)雜度很高、代碼冗長(zhǎng)不便于理解和移植,運(yùn)行效率也比較低。當(dāng)前全球應(yīng)用較為廣泛的視頻編碼器是x264,x264 是H.264視頻編碼器的一個(gè)開(kāi)源實(shí)現(xiàn)版本,是全球最優(yōu)秀的開(kāi)放源代碼的有損視頻編碼器之一。由于x264 視頻編碼器是一個(gè)純C 語(yǔ)言實(shí)現(xiàn)的函數(shù)庫(kù),為用戶提供一套便捷、統(tǒng)一的應(yīng)用程序用戶接口,用戶可以根據(jù)實(shí)際運(yùn)行環(huán)境非常方便的進(jìn)行x264 視頻編碼器的本地移植,具有很好的通用性。
在Linux/Unix 操作系統(tǒng)下x264 視頻編碼器是原生適配的,不需要移植,只需要根據(jù)運(yùn)行平臺(tái)的CPU 類型及系統(tǒng)版本選擇編譯好的軟件包即可,而對(duì)于VxWorks 操作系統(tǒng),x264 默認(rèn)是不支持的,需要經(jīng)過(guò)一定的軟件移植工作,才能夠運(yùn)行在VxWorks 操作系統(tǒng)。VxWorks 移植的主要步驟如下:
(1)在Windows 系統(tǒng)下安裝msys2(Minimal System2);
(2)打開(kāi)msys2 終端,進(jìn)入下載好的x264 源代碼目錄,輸入makefile 配置命令:./configure –enable-shared(生成共享庫(kù))–disable-asm(取消匯編功能),配置產(chǎn)生所需的makefile 文件;
(3)打開(kāi)Workbench3.2,新建DKM 模式的工程,將步驟2 所生成的文件拷貝到新建的工程源代碼路徑;
(4)構(gòu)建項(xiàng)目,產(chǎn)生VxWorks6.8 所需要的x264 函數(shù)動(dòng)態(tài)庫(kù)。
x264 僅完成解碼器功能,為了實(shí)現(xiàn)壓縮視頻的解壓縮本文選用目前應(yīng)用最為廣泛的開(kāi)源軟件FFmpeg作為解碼器。FFmpeg 是一套開(kāi)放源代碼的數(shù)字視頻工具套件,它的功能非常強(qiáng)大,不僅僅可以完成視頻的解碼功能同時(shí)還提供一系列工具庫(kù)用來(lái)實(shí)現(xiàn)數(shù)字視頻以及音頻相關(guān)處理轉(zhuǎn)換甚至記錄等強(qiáng)大功能。FFmpeg 在設(shè)計(jì)時(shí)為了保證用戶能夠根據(jù)需要安裝自己所需要的功能模塊,功能劃分非常合理和清晰,主要包括數(shù)字音頻及視頻格式通用模塊(實(shí)現(xiàn)對(duì)當(dāng)前應(yīng)用最為廣泛的通用數(shù)字音頻以及視頻格式的封裝)、數(shù)字視頻及音頻解碼器模塊(實(shí)現(xiàn)對(duì)主流數(shù)字音頻和視頻格式的解碼功能的封裝)、數(shù)字視頻及音頻字幕處理和濾鏡處理模塊(實(shí)現(xiàn)對(duì)主流數(shù)字音頻和視頻格式的字幕及濾鏡封裝)等很多功能模塊。用戶在應(yīng)用FFmpeg 的時(shí)候可以使用其自帶的工具,例如自帶的播放器或者編譯好的FFmpeg 工具程序等,通過(guò)命令行參數(shù)應(yīng)用不同的功能,另外一種使用FFmpeg 的方式也是應(yīng)用最為廣泛的方式是直接編寫(xiě)程序調(diào)用FFmpeg 提供的應(yīng)用程序用戶接口,鏈接時(shí)將編譯好的FFmpeg 功能模塊動(dòng)態(tài)函數(shù)庫(kù)鏈接到主程序中,這樣的方式更加靈活,極大的滿足用戶各種特定的需求,但需要進(jìn)行軟件的移植工作。本文使用第二種方法,進(jìn)行開(kāi)源軟件的移植,應(yīng)用程序調(diào)用庫(kù)函數(shù)接口。FFmpeg 主要是基于C 語(yǔ)言開(kāi)發(fā)的,在Linux 操作系統(tǒng)上是原生適配的,但由于其開(kāi)發(fā)語(yǔ)言主要是C 語(yǔ)言編寫(xiě)的,具有很高的可移植性,已經(jīng)被廣泛移植到Windows類操作系統(tǒng)、Mac OS 類操作系統(tǒng)等很多主流操作系統(tǒng)及各種硬件平臺(tái),但是目前針對(duì)VxWorks 操作系統(tǒng)FFmpeg 還沒(méi)有官方適配的公開(kāi)發(fā)行版本,為了完成在VxWorks 操作系統(tǒng)下使用FFmpeg 的功能模塊,必須首先完成FFmpeg 在VxWorks 操作系統(tǒng)下的軟件移植工作。移植過(guò)程中可以根據(jù)實(shí)際應(yīng)用的需要選取其中全部或者部分功能組件進(jìn)行配置,對(duì)于本文的情況,僅僅是場(chǎng)景回放時(shí)候需要應(yīng)用FFmpeg 的解碼功能對(duì)壓縮好的場(chǎng)景記錄文件進(jìn)行解碼和播放,因此只需要配置其中的視頻解碼器組件(libavacodec)和通用工具組件(libavutil)即可滿足需求。移植的主要步驟是首先從其官方網(wǎng)站上下載FFmpeg 軟件的開(kāi)源代碼壓縮包,由于各種更新的存在現(xiàn)在有很多版本的FFmpeg,作者下載的是應(yīng)用較多并且比較穩(wěn)定的一個(gè)發(fā)行版本v3.2.1,接下來(lái)的具體移植步驟與上文敘述的x264 軟件的移植步驟基本相同,利用Workbench 進(jìn)行植代碼的編譯,編譯結(jié)果為對(duì)應(yīng)接口模塊的靜態(tài)或者動(dòng)態(tài)函數(shù)庫(kù),完成移植后后續(xù)使用時(shí),在代碼中只需要包含特定的頭文件,加載相應(yīng)靜態(tài)或者動(dòng)態(tài)庫(kù)即可以使用相應(yīng)的函數(shù)接口。
按照本文章節(jié)2 和3 的軟件移植步驟分別完成視頻壓縮和解壓縮軟件的移植工作,形成VxWorks 操作系統(tǒng)下可用的靜態(tài)函數(shù)庫(kù),為后面的該系統(tǒng)下屏幕數(shù)據(jù)的記錄和回放做好準(zhǔn)備。在VxWorks 系統(tǒng)下屏幕錄取的基本思路是首先按照固定頻率(60Hz)截取當(dāng)前屏幕,并將截取結(jié)果暫存到全局緩存中,將解圖產(chǎn)生BMP 格式的截屏數(shù)據(jù)轉(zhuǎn)換為x264 所需YUV 格式,利用x264 視頻壓縮接口對(duì)截取的YUV 數(shù)據(jù)進(jìn)行視頻壓縮,并將視頻編碼結(jié)果存儲(chǔ)到本地硬盤(pán),保存格式為mp4,保存前首先檢測(cè)磁盤(pán)空間是否充足。屏幕錄取的主要流程如圖1所示。
圖1:VxWorks 系統(tǒng)下屏幕錄取流程圖
VxWorks 系統(tǒng)下屏幕錄取的關(guān)鍵代碼如下所示;
在VxWorks 系統(tǒng)下視頻記錄數(shù)據(jù)回放的基本思路是首先利用fread 函數(shù)讀取所需回放的視頻文件,利用FFmpeg函數(shù)庫(kù)中解碼器組件,進(jìn)行視頻解碼,解碼結(jié)果保存到Y(jié)UV 文件中,完成視頻的解碼階段。在視頻回放階段,利用視頻播放模塊進(jìn)行YUV 視頻的播放,主要步驟是,首先讀取YUV 文件,并將YUV 格式的數(shù)據(jù)轉(zhuǎn)換為BMP 格式,然后設(shè)置頻率為60Hz 的定時(shí)器,定時(shí)將產(chǎn)生的BMP 格式數(shù)據(jù)更新到需顯示的區(qū)域,并調(diào)用update 函數(shù)刷新界面,從而完成視頻的回放功能。屏幕錄制視頻回放的主要流程如圖2所示。
圖2:VxWorks 系統(tǒng)下視頻播放流程圖
其中關(guān)鍵代碼如下所示;
對(duì)于嵌入式操作系統(tǒng)其通常的開(kāi)發(fā)調(diào)試步驟是首先在本地安裝交叉編譯環(huán)境,編寫(xiě)好的代碼經(jīng)過(guò)交叉編譯后產(chǎn)生可以在目標(biāo)機(jī)器運(yùn)行的軟件可執(zhí)行程序,然后通過(guò)以太網(wǎng)絡(luò)或者串口的方式將本地主機(jī)和目標(biāo)設(shè)備連接在一起,將編譯好的可執(zhí)行程序通過(guò)網(wǎng)絡(luò)(文件傳輸協(xié)議)或者串口導(dǎo)入到目標(biāo)機(jī),然后目標(biāo)機(jī)可以編寫(xiě)啟動(dòng)腳本運(yùn)行編譯好的軟件,對(duì)于調(diào)試過(guò)程需要本地編譯環(huán)境特定工具的支持。這種傳統(tǒng)的調(diào)試方法主要缺點(diǎn)是需要一個(gè)配套的硬件設(shè)備平臺(tái)配合,開(kāi)發(fā)調(diào)試成本較高,如果在經(jīng)費(fèi)有限的情況下還需要進(jìn)行此類嵌入式系統(tǒng)應(yīng)用程序的調(diào)試任務(wù),一種便捷的方式是使用虛擬化技術(shù)虛擬嵌入式系統(tǒng),在虛擬機(jī)中進(jìn)行應(yīng)用軟件的調(diào)試。本文采用的是利用操作系統(tǒng)虛擬化軟件結(jié)合VxWorks鏡像來(lái)完成虛擬機(jī)的搭建工作。VxWorks 操作系統(tǒng)與很多嵌入式操作系統(tǒng)類似需要引導(dǎo)啟動(dòng),因此首先需要?jiǎng)?chuàng)建一個(gè)引導(dǎo)系統(tǒng),引導(dǎo)系統(tǒng)的配置主要步驟是首先打開(kāi)Workbench 集成開(kāi)發(fā)環(huán)境,使用默認(rèn)設(shè)置創(chuàng)建類型為引導(dǎo)系統(tǒng)的新項(xiàng)目,默認(rèn)配置情況下系統(tǒng)為最小內(nèi)核,不提供控制臺(tái)以及網(wǎng)絡(luò)等高級(jí)支持,如果需要增加一些高級(jí)配置需要修改配置文件,本文所需環(huán)境增加的配置包括控制臺(tái)、遠(yuǎn)程文件傳輸服務(wù)器、網(wǎng)絡(luò)協(xié)議棧的支持。在編譯好引導(dǎo)系統(tǒng)后下一步是制作BootRom 引導(dǎo)系統(tǒng)軟盤(pán),由于目前的計(jì)算機(jī)設(shè)備幾乎都不支持軟盤(pán)了,因此需要借助虛擬軟盤(pán)軟件利用硬盤(pán)資源模擬一個(gè)虛擬軟盤(pán),虛擬軟盤(pán)能夠?qū)崿F(xiàn)軟盤(pán)類似的功能。本文應(yīng)用的是應(yīng)用比較廣泛的虛擬軟盤(pán)軟件RamDiskNT,該軟件可以很好的在Windows 系統(tǒng)運(yùn)行,實(shí)現(xiàn)虛擬軟驅(qū)功能。其安裝過(guò)程如同其它應(yīng)用程序的類似,這里就不在展開(kāi)描述。制作好系統(tǒng)引導(dǎo)盤(pán)后打開(kāi)虛擬機(jī)軟件VMWare,使用默認(rèn)設(shè)置創(chuàng)建一個(gè)新的虛擬機(jī),磁盤(pán)設(shè)置8GB,選用橋接網(wǎng)卡模式。我們選擇配置方式為定制方式,現(xiàn)在只需要配置環(huán)境不需要安裝系統(tǒng),所以選擇暫不安裝系統(tǒng),操作系統(tǒng)的類型選擇其他設(shè)置系統(tǒng)啟動(dòng)順序修改為軟盤(pán)啟動(dòng)為第一啟動(dòng)項(xiàng),然后虛擬機(jī)開(kāi)機(jī),就可以加載引導(dǎo)系統(tǒng)。使用這種方式完成VxWorks 的虛擬機(jī)搭建,運(yùn)行軟件運(yùn)行環(huán)境為在x86 架構(gòu)下的VxWorks6.8 操作系統(tǒng),完成操作系統(tǒng)搭建后,啟動(dòng)系統(tǒng),將編譯好的軟件通過(guò)ftp 導(dǎo)入到VxWorks6.8 虛擬機(jī)中,輸入命令rtpSp"x264.vxe --fps 5 --crf 18 -o test.mkv,infile.yuv,352x288" 啟動(dòng)軟件,就可以完成屏幕錄制和壓縮,利用ftp將test.mkv 導(dǎo)出,播放效果如圖3所示。
圖3:場(chǎng)景回放test.mkv 播放效果截圖
本文給出了VxWorks 操作系統(tǒng)下,基于定時(shí)截屏技術(shù),結(jié)合視頻壓縮思想,利用優(yōu)秀的H.264 開(kāi)源編碼器x264 及開(kāi)源解碼器FFmpeg,實(shí)現(xiàn)了VxWorks 系統(tǒng)下屏幕的視頻記錄與重新播放的功能,利用虛擬機(jī)的方式模擬VxWorks 操作系統(tǒng)的軟件運(yùn)行環(huán)境并在給定的環(huán)境下完成VxWorks 操作系統(tǒng)下場(chǎng)景視頻級(jí)別的記錄和回放,文中提供了實(shí)施過(guò)程的關(guān)鍵實(shí)驗(yàn)步驟方法以及實(shí)驗(yàn)效果截圖。實(shí)驗(yàn)結(jié)果表明,本文提出的基于VxWorks 的視頻記錄重演系統(tǒng)具備工程實(shí)現(xiàn)條件,同時(shí)本文提出的方法,彌補(bǔ)了在VxWorks 系統(tǒng)下傳統(tǒng)場(chǎng)景記錄及回放方法即報(bào)文級(jí)別數(shù)據(jù)記錄重演方法的無(wú)法記錄用戶操作的關(guān)鍵缺陷,該方法能夠完全記錄用戶的全程操作步驟,為后續(xù)復(fù)盤(pán)現(xiàn)場(chǎng)提供了重要依據(jù)。由于本文提出的方法是一種純軟件的工程實(shí)現(xiàn),不需要新增加任何硬件的情況下,不需要修改原項(xiàng)目軟件源代碼,只需要運(yùn)行本文提出的軟件,即可實(shí)現(xiàn)場(chǎng)景數(shù)據(jù)視頻級(jí)別的記錄和回放,因此可以用于已經(jīng)存在的舊項(xiàng)目系統(tǒng)升級(jí)完成新功能,同時(shí)由于軟件所依賴的編程語(yǔ)言是c 或者c++編程語(yǔ)言,具有很高的跨平臺(tái)和可移植性,應(yīng)用前景非常廣泛,具有較好的工程實(shí)用性。但由于視頻錄制過(guò)程中應(yīng)用到視頻解壓縮算法,該算法具有較高的負(fù)責(zé)度,對(duì)所運(yùn)行的硬件環(huán)境有一定要求,與此同時(shí)視頻解壓縮算法的運(yùn)行需要一定時(shí)間,尤其是參數(shù)設(shè)置的如果是高分辨率和高碼率的情況下,算法的運(yùn)行時(shí)間會(huì)更加長(zhǎng),因此對(duì)于硬件配置較低的平臺(tái),視頻壓縮過(guò)程占用的CPU、內(nèi)存等硬件資源會(huì)導(dǎo)致用戶操作有卡頓感,針對(duì)以上出現(xiàn)的這種問(wèn)題,作者在后續(xù)研究過(guò)程中會(huì)持續(xù)優(yōu)化算法,爭(zhēng)取提出相應(yīng)的優(yōu)化解決方案,解決上述問(wèn)題從而提高用戶操作的體驗(yàn)。