專利名稱:一種嵌入式平臺(tái)下播放swf文件的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于音視頻播放領(lǐng)域,尤其涉及一種嵌入式平臺(tái)下播放SWF文件的方法。
背景技術(shù):
目前,隨著網(wǎng)絡(luò)的普及,家電產(chǎn)品的功能已經(jīng)由原來(lái)的單一收看電視節(jié)目向多媒 體以及網(wǎng)絡(luò)方向發(fā)展,越來(lái)越多的電視已經(jīng)開始采用嵌入式系統(tǒng),使其多媒體功能以及能 支持越來(lái)越多的網(wǎng)絡(luò)多媒體文件,但由于嵌入式系統(tǒng)自身的裝置資源有限,對(duì)網(wǎng)絡(luò)上比較 流行的Flash播放器還沒有很好的支持,而且限于Adobe的版權(quán)限制,采用Adobe的Flash 播放器需要一定的許可費(fèi)用,不利產(chǎn)品成本的控制。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例的目的在于提供一種嵌入式平臺(tái)下播放SWF文件的方法,能夠利用 開源Flash播放器播放Flash文件,滿足嵌入式系統(tǒng)的應(yīng)用需要。本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種嵌入式平臺(tái)下播放SWF文件的方法,所述方法 包括以下步驟提取要播放的SWF文件;利用Gnash播放器對(duì)SWF文件進(jìn)行解碼;對(duì)解碼后的視頻數(shù)據(jù)幀進(jìn)行渲染;將渲染后的視頻數(shù)據(jù)幀在幀緩存中顯示。本發(fā)明實(shí)施例將開源gnash播放器移植到嵌入式平臺(tái)上,并對(duì)其進(jìn)行優(yōu)化,實(shí)現(xiàn) 了利用開源gnash播放器播放SWF文件,能夠滿足嵌入式系統(tǒng)的需要,并可以降低產(chǎn)品的成 本。
圖1是本發(fā)明實(shí)施例提供的Gnash播放器的邏輯結(jié)構(gòu)圖;圖2是本發(fā)明實(shí)施例提供的AGG渲染過(guò)程示意圖;圖3是本發(fā)明實(shí)施例提供的嵌入式平臺(tái)下播放SWF文件的方法的實(shí)現(xiàn)流程圖;圖4是本發(fā)明優(yōu)選實(shí)施例提供的嵌入式平臺(tái)下播放SWF文件的方法的具體實(shí)現(xiàn)流 程圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì) 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。本發(fā)明實(shí)施例將開源Gnash播放器移植到嵌入式平臺(tái)上,通過(guò)對(duì)Gnash播放器進(jìn) 行優(yōu)化實(shí)現(xiàn)了對(duì)Flash文件的播放。
Gnash播放器是一個(gè)發(fā)布在GPL許可下的SWF播放器,并為Firefox、Mozilla、 Konqueror等瀏覽器提供插件支持。除了能夠運(yùn)行在很多GNU/Linux發(fā)行版上外,Gnash播 放器還支持嵌入式GNU/Linux、FreeBSD、NetBSD、OpenBSD、非x86處理器及64位架構(gòu)。在本發(fā)明實(shí)施例中,Gnash播放器的移植和優(yōu)化在嵌入式平臺(tái)下進(jìn)行,嵌入式平臺(tái) 可以采用一顆雙mips核+DSP的硬件平臺(tái),該硬件平臺(tái)在電視中可以實(shí)現(xiàn)很好的網(wǎng)絡(luò)和多 媒體解碼功能。在對(duì)Gnash播放器進(jìn)行移植和優(yōu)化時(shí),首先對(duì)Gnash播放器進(jìn)行交叉編譯,在對(duì) Gnash播放器進(jìn)行交叉編譯前,需有相應(yīng)平臺(tái)上的交叉編譯工具,本發(fā)明實(shí)施例所依據(jù)的平 臺(tái)為misp交叉編譯工具鏈,其包括了用于在mips內(nèi)核平臺(tái)上的gcc(GNU的C語(yǔ)言編譯器), g++等交叉編譯器。在互聯(lián)網(wǎng)上下載一個(gè)Gnash播放器的源碼,例如選用Gnash播放器-0. 8. 5,先對(duì) Gnash播放器-0. 8. 5中的makefile文件進(jìn)行修改,其中makefile文件是gnu (GNU' s Not Unix的遞歸縮寫)用于大規(guī)模程序編譯的一種指令序列的腳本。在makefile文件中設(shè)置 好Gnash播放器需要依賴的響應(yīng)庫(kù)包以及制定交叉編譯工具鏈,設(shè)置完成后,可在Linux系 統(tǒng)下進(jìn)行make編譯,最終生成對(duì)應(yīng)的可執(zhí)行文件,將可執(zhí)行文件和其依賴的響應(yīng)庫(kù)包拷貝 到對(duì)應(yīng)的平臺(tái)上,就可以用相應(yīng)的shell腳本或者指令運(yùn)行Gnash播放器,這樣就可以在對(duì) 應(yīng)的平臺(tái)上用Gnash播放器去解碼SWF文件,但解碼的速度和音視頻是不同步的。如圖1所示,依據(jù)Flash播放器的架構(gòu)對(duì)Gnash播放器中的音視頻解碼進(jìn)行分析, Gnash播放器在對(duì)SWF文件進(jìn)行解碼時(shí),首先提取數(shù)據(jù)流,然后再對(duì)音視頻分流,然后同步, 最終達(dá)到播放的效果。目前,SWF文件的音頻信息主要以MP3的壓縮格式為主,所以在音頻解碼方面不需 要耗費(fèi)太多的系統(tǒng)資源,由于大部分的嵌入式平臺(tái)上都具備音頻軟解和硬解的功能,需要 解決的主要是視頻流的解碼。SWF文件中包含了圖片信息、文本字體,在將這些信息解碼完 成后還需要對(duì)其每一幀進(jìn)行畫面的渲染,本發(fā)明實(shí)施例在底層選用幀緩存(framebuffer) 顯示,渲染選用開源的AGG(Anti-Grain Geometry)為渲染加速器,將解碼出來(lái)的畫面畫到 畫布上。AGG是一個(gè)用標(biāo)準(zhǔn)的平臺(tái)無(wú)關(guān)的C++寫成的通用圖形工具包。它可以應(yīng)用在計(jì)算 機(jī)程序中需要高質(zhì)量的2D圖形的許多方面,例如AGG可以用于渲染2D地圖。AGG只使用了 C++和標(biāo)準(zhǔn)C的函數(shù),如memcpy,sin, cos, sqrt等。AGG能夠在大量的應(yīng)用軟件中使用,包 括嵌入式系統(tǒng)中。如圖2所示,頂點(diǎn)源(Vertex Source)存放了一堆2D頂點(diǎn)以及對(duì)應(yīng)的命令, 如"MoveTo"、“ LineTo"等,主要是進(jìn)行一些圖像的畫點(diǎn)和和畫線操作,因?yàn)镾WF文件 用了大量的矢量圖形來(lái)節(jié)省存放空間,Vertex Source主要是對(duì)其中的一些點(diǎn)線進(jìn)行渲染。坐標(biāo)轉(zhuǎn)換管道(Coordinate conversion pipeline)可以變換 Vertex Source 中 的頂點(diǎn),如矩陣變換、輪廓提取、轉(zhuǎn)換為虛線等。掃描線光柵化(Scanline Rasterizer)將頂點(diǎn)數(shù)據(jù)(矢量數(shù)據(jù))轉(zhuǎn)換成一組水平 掃描線,掃描線由一組線段(Span)組成,線段(Span)包含了起始位置、長(zhǎng)度和覆蓋率信息。 AGG的抗鋸齒(Anti-Aliasing)功能是在這時(shí)引入的。渲染器(Renderers)渲染掃描線(Scanline)中的線段(Span),最簡(jiǎn)單的就是為Span提供單一顏色,復(fù)雜的有多種顏色(如漸變)、使用圖像數(shù)據(jù)、Pattern等。渲染緩存(Rendering Buffer)用于存放像素點(diǎn)陣數(shù)據(jù)的內(nèi)存塊,是最終形成的圖 像數(shù)據(jù)。由于本發(fā)明實(shí)施例用的是framebuffer緩沖顯示,將顯示屏的顯示映射到了一段 內(nèi)存中。通過(guò)對(duì)AGG渲染主要耗時(shí)分析,可以看到一幅畫面從解碼到最終顯示在柵格區(qū)域 并填充像素,循環(huán),耗時(shí)多,即AGG渲染過(guò)程的Scanline Rasterizer這個(gè)過(guò)程是非常耗時(shí) 的,通過(guò)分析也可清晰的看到AGG渲染過(guò)程中,Scanline Rasterizer中的畫點(diǎn)線,由于用 到了浮點(diǎn)運(yùn)算,也是耗時(shí)的地方,Rendering Buffer是AGG渲染最后的數(shù)據(jù)結(jié)果,也需要進(jìn) 行優(yōu)化。根據(jù)Gnash播放器在解碼SWF文件中的步驟,以及在各部分所耗時(shí)的比例,將各個(gè) 解碼過(guò)程針對(duì)不同的平臺(tái)分配到平臺(tái)中的各項(xiàng)資源(由于在嵌入式平臺(tái)中所有的解碼操 作不能只是CPU來(lái)執(zhí)行,所以在嵌入式平臺(tái)上的MCU —般都配備有相應(yīng)音頻解碼器,視頻解 碼器和DSP解碼器)。本發(fā)明實(shí)施例在解碼優(yōu)化過(guò)程中,將音頻流通過(guò)CPU的解碼后就送到相應(yīng)音頻解 碼器進(jìn)行相應(yīng)的效果合成和數(shù)模轉(zhuǎn)換,這樣可以節(jié)約CPU的資源。在視頻流部分,因?yàn)镾WF 文件特殊性(文件小,壓縮大),SWF文件中有很多地方需要用到浮點(diǎn)運(yùn)算,這會(huì)加大CPU和 DSP資源的消耗。所以,本發(fā)明實(shí)施例在SWF文件的解碼中,針對(duì)Gnash播放器中對(duì)SWF文 件解碼中用到的浮點(diǎn)運(yùn)算進(jìn)行定點(diǎn)運(yùn)算的轉(zhuǎn)換。作為本發(fā)明的優(yōu)化實(shí)施例,在定點(diǎn)運(yùn)算轉(zhuǎn)換成浮點(diǎn)運(yùn)算后,通過(guò)對(duì)SWF文件中同 類結(jié)構(gòu)的畫面進(jìn)行適當(dāng)?shù)谋4婧唾N圖,不需要對(duì)很多矢量圖形進(jìn)行一步一步的重畫,這樣 節(jié)省了很多時(shí)間。由于資源消耗還與所畫圖形的大小有關(guān)系,在畫一張640*480的畫面是比 1024*768的畫面消耗的資源小的,所以本發(fā)明實(shí)施例在盡量保證SWF文件源質(zhì)量的同時(shí), 在后端使用平添的縮放控制器(scaler)工具對(duì)SWF文件中的圖像進(jìn)行放大,這樣又可以節(jié) 省很多資源。圖3示出了本發(fā)明實(shí)施例提供的嵌入式平臺(tái)下播放SWF文件的方法的實(shí)現(xiàn)流程, 詳述如下在步驟S301中,提取要播放的SWF文件;在步驟S302中,利用Gnash播放器對(duì)SWF文件進(jìn)行解碼;作為本發(fā)明的一個(gè)實(shí)施例,在對(duì)SWF文件進(jìn)行解碼時(shí),將浮點(diǎn)運(yùn)算轉(zhuǎn)換成定點(diǎn)運(yùn)
笪弁。作為本發(fā)明的一個(gè)優(yōu)選實(shí)施例,在將浮點(diǎn)運(yùn)算轉(zhuǎn)換成定點(diǎn)運(yùn)算后,對(duì)SWF文件中 同類結(jié)構(gòu)的畫面進(jìn)行保存和貼圖。在步驟S303中,對(duì)解碼后的視頻數(shù)據(jù)幀進(jìn)行渲染;作為本發(fā)明的一個(gè)實(shí)施例,選用開源的AGG為渲染加速器。在步驟S304中,將渲染后的視頻數(shù)據(jù)幀在幀緩存(framebuffer)中顯示。作為本發(fā)明的一個(gè)實(shí)施例,將音頻流通過(guò)CPU的解碼后送到相應(yīng)音頻解碼器進(jìn)行 相應(yīng)的效果合成和數(shù)模轉(zhuǎn)換,可以節(jié)約CPU的資源。圖4示出了本發(fā)明優(yōu)選實(shí)施例提供的嵌入式平臺(tái)下播放SWF文件的方法的具體實(shí)現(xiàn)流程,詳述如下在步驟S401中,提取要播放的SWF文件;在步驟S402中,從SWF文件中讀取第一幀數(shù)據(jù);在步驟S403中,將數(shù)據(jù)分流成音頻數(shù)據(jù)和視頻數(shù)據(jù);在步驟S404中,將音頻數(shù)據(jù)的浮點(diǎn)運(yùn)算轉(zhuǎn)換為定點(diǎn)運(yùn)算;在步驟S405中,將視頻數(shù)據(jù)的浮點(diǎn)運(yùn)算轉(zhuǎn)換為定點(diǎn)運(yùn)算;在步驟S406中,對(duì)音頻數(shù)據(jù)進(jìn)行音頻(Audio)解碼,即音頻解碼;在步驟S407中,對(duì)視頻數(shù)據(jù)進(jìn)行視頻(Video)解碼,即視頻解碼;在步驟S408中,對(duì)解碼后的視頻數(shù)據(jù)和音頻數(shù)據(jù)進(jìn)行同步;在步驟S409中,使用平添的scaler工具對(duì)視頻數(shù)據(jù)中的圖像進(jìn)行放大;在步驟S410中,輸出解碼后的音頻數(shù)據(jù);在步驟S411中,輸出解碼后的視頻數(shù)據(jù);在步驟S412中,判斷SWF文件解碼是否完成,如果是則結(jié)束,否則執(zhí)行S413 ;在步驟S413中,讀取下一幀的數(shù)據(jù),然后轉(zhuǎn)去執(zhí)行S403。在本發(fā)明實(shí)施例中,通過(guò)將gnash播放器優(yōu)化好后交叉編譯成相應(yīng)的靜態(tài)庫(kù)或者 動(dòng)態(tài)庫(kù),將其放到平臺(tái)上相應(yīng)的庫(kù)中,可以在開發(fā)過(guò)程中調(diào)用其可執(zhí)行文件完成其在嵌入 式平臺(tái)上解碼SWF文件的功能。本發(fā)明實(shí)施例將開源gnash播放器移植到嵌入式平臺(tái)上,并對(duì)其進(jìn)行優(yōu)化,實(shí)現(xiàn) 了利用開源gnash播放器播放SWF文件,能夠滿足嵌入式系統(tǒng)的需要,并可以降低產(chǎn)品的成 本。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種嵌入式平臺(tái)下播放SWF文件的方法,其特征在于,所述方法包括以下步驟提取要播放的SWF文件;利用Gnash播放器對(duì)SWF文件進(jìn)行解碼;對(duì)解碼后的視頻數(shù)據(jù)幀進(jìn)行渲染;將渲染后的視頻數(shù)據(jù)幀在幀緩存中顯示。
2.如權(quán)利要求1所述的方法,其特征在于,所述方法包括下述步驟 將Gnash播放器移植到嵌入式平臺(tái)上。
3.如權(quán)利要求2所述的方法,其特征在于,所述將Gnash播放器移植到嵌入式平臺(tái)上的 步驟具體為利用所述嵌入式平臺(tái)的交叉編譯工具對(duì)Gnash播放器進(jìn)行交叉編譯,生成對(duì)應(yīng)的可執(zhí) 行文件和所述可執(zhí)行文件依賴的響應(yīng)庫(kù)包;將所述可執(zhí)行文件和所述可執(zhí)行文件依賴的響應(yīng)庫(kù)包拷貝到所述嵌入式平臺(tái)上。
4.如權(quán)利要求1所述的方法,其特征在于,在對(duì)SWF文件進(jìn)行解碼時(shí),將浮點(diǎn)運(yùn)算轉(zhuǎn)換 成定點(diǎn)運(yùn)算。
5.如權(quán)利要求4所述的方法,其特征在于,在將浮點(diǎn)運(yùn)算轉(zhuǎn)換成定點(diǎn)運(yùn)算的步驟后,所 述方法進(jìn)一步包括下述步驟對(duì)所述SWF文件中同類結(jié)構(gòu)的畫面進(jìn)行保存和貼圖。
6.如權(quán)利要求1所述的方法,其特征在于,所述方法進(jìn)一步包括下述步驟 使用平添的縮放控制器對(duì)SWF文件中的圖像進(jìn)行放大。
7.如權(quán)利要求1所述的方法,其特征在于,在對(duì)解碼后的視頻數(shù)據(jù)幀進(jìn)行渲染時(shí),選用 開源的AGG為渲染加速器。
8.如權(quán)利要求1所述的方法,其特征在于,所述方法進(jìn)一步包括下述步驟 將解碼后的音頻流送到相應(yīng)音頻解碼器進(jìn)行相應(yīng)的效果合成和數(shù)模轉(zhuǎn)換。
全文摘要
本發(fā)明適用于音視頻播放領(lǐng)域,提供了一種嵌入式平臺(tái)下播放SWF文件的方法,所述方法包括以下步驟提取要播放的SWF文件;利用Gnash播放器對(duì)SWF文件進(jìn)行解碼;對(duì)解碼后的每一幀視頻數(shù)據(jù)進(jìn)行渲染;將渲染后的視頻畫面在幀緩存中顯示。本發(fā)明將開源gnash播放器移植到嵌入式平臺(tái)上,并對(duì)其進(jìn)行優(yōu)化,實(shí)現(xiàn)了利用開源gnash播放器播放SWF文件,能夠滿足嵌入式系統(tǒng)的需要,并可以降低產(chǎn)品的成本。
文檔編號(hào)H04L29/08GK101859314SQ20101015763
公開日2010年10月13日 申請(qǐng)日期2010年4月22日 優(yōu)先權(quán)日2010年4月22日
發(fā)明者丁新民 申請(qǐng)人:深圳創(chuàng)維-Rgb電子有限公司