一種微課播放引擎及微課播放方法
【專利摘要】本發(fā)明公開了一種微課播放引擎,包括:裝載器、邏輯控制器、資源堆棧單元、渲染控制器、計(jì)時(shí)器、音頻控制器;同時(shí),本發(fā)明在一種微課播放引擎的基礎(chǔ)上提出了一種微課播放方法,本發(fā)明通過(guò)優(yōu)化算法,避免在制作產(chǎn)品的過(guò)程中,出現(xiàn)零時(shí)間點(diǎn)和最末時(shí)間點(diǎn)暫停時(shí)錄制的無(wú)限制的清線、清屏、撤銷和恢復(fù)操作播放出現(xiàn)資源數(shù)據(jù)的丟失;將緩存數(shù)據(jù)與磁盤零時(shí)文件置換,防止在時(shí)長(zhǎng)超過(guò)三十分鐘以上的課件出現(xiàn)內(nèi)存泄漏,保證了可用性和穩(wěn)定性;設(shè)計(jì)多種隊(duì)列來(lái)保存不同動(dòng)作,并結(jié)合反向幀、全量幀來(lái)進(jìn)行性能提升,這樣縮短了用戶拖動(dòng)播放等待時(shí)間,在后續(xù)播放上能夠感覺無(wú)延遲。
【專利說(shuō)明】一種微課播放引擎及微課播放方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種微課播放引擎及微課播放方法,主要是在android平板終端播放錄制的微型課件,應(yīng)用于學(xué)校知識(shí)重點(diǎn)內(nèi)容的講解和企業(yè)員工培訓(xùn)。
【背景技術(shù)】
[0002]在PC終端有相應(yīng)的播放應(yīng)用,主要是對(duì)視頻文件或Flash動(dòng)畫文件,生產(chǎn)標(biāo)準(zhǔn)的多媒體文件,這類多媒體文件較大,幾分鐘的課件幾十兆,對(duì)數(shù)據(jù)傳送是個(gè)瓶頸,IOS平板終端的播放應(yīng)用是根據(jù)自己錄制引擎應(yīng)用產(chǎn)生的自定義多媒體文件格式進(jìn)行播放,但是終端對(duì)普通消費(fèi)者消費(fèi)能力是個(gè)瓶頸,在Android終端還未出現(xiàn)類似像IOS—樣的產(chǎn)品,可以對(duì)用戶在平板終端第一人稱錄制的多媒體內(nèi)容進(jìn)行播放。傳統(tǒng)的播放引擎存在渲染缺陷,會(huì)出現(xiàn)線條過(guò)細(xì)殘缺現(xiàn)象,由于存在性能缺陷,導(dǎo)致拖動(dòng)播放有幾百毫秒延遲,因無(wú)緩沖數(shù)據(jù)需要渲染界面和緩沖準(zhǔn)備,同時(shí)由于存在功能缺陷,需一次性裝載完后進(jìn)行播放。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的在于提供一種微課播放引擎及微課播放方法,能夠克服上述缺陷,使用了線程隊(duì)列管理池、紋理渲染引擎,用戶可以下載多媒體內(nèi)容,在平板終端隨時(shí)隨地播放,也可在線播放,填補(bǔ)了市場(chǎng)空白。
[0004]本發(fā)明通過(guò)以下技術(shù)方案實(shí)現(xiàn):
一種微課播放引擎,包括:
裝載器:與邏輯控制器相連接,用于讀取微課文件并將讀取的數(shù)據(jù)發(fā)送到邏輯控制
器;
邏輯控制器:分別與資源堆棧單元、渲染控制器相連接,用于把分類的資源數(shù)據(jù)進(jìn)行分類解析、數(shù)據(jù)運(yùn)算、將零時(shí)數(shù)據(jù)壓入資源堆棧、檢查數(shù)據(jù)堆棧是否達(dá)到閥值、發(fā)送數(shù)據(jù)、組裝數(shù)據(jù);
資源堆棧單元:用于接收邏輯控制器組裝好的零時(shí)數(shù)據(jù);
渲染控制器:用于控制渲染的方式和算法策略,對(duì)數(shù)據(jù)進(jìn)行渲染并顯示;
計(jì)時(shí)器:與邏輯控制器相連接,用于記錄從邏輯控制器獲得的時(shí)間點(diǎn)并計(jì)時(shí);
音頻控制器:與計(jì)時(shí)器相連接,用于接收計(jì)時(shí)器信息進(jìn)行微課播放或停止播放。
[0005]進(jìn)一步地,為更好地實(shí)現(xiàn)本發(fā)明,還包括置換器,所述置換器分別與邏輯控制器、資源堆棧單元相連接。
[0006]進(jìn)一步地,為更好地實(shí)現(xiàn)本發(fā)明,所述邏輯控制器將數(shù)據(jù)組裝為全量幀和反向幀,全量幀從零時(shí)間點(diǎn)且每隔10秒生成一個(gè)當(dāng)前時(shí)刻顯示數(shù)據(jù),反向幀每次撤銷操作前的那時(shí)刻顯示數(shù)據(jù)。
[0007]進(jìn)一步地,為更好地實(shí)現(xiàn)本發(fā)明,所述渲染控制器的渲染方式為顯示數(shù)據(jù)寫入位圖bitmap之后放入到畫布 canvas ο
[0008]進(jìn)一步地,為更好地實(shí)現(xiàn)本發(fā)明,所述渲染控制器的渲染策略為使用雙緩存,一個(gè)緩存記錄后續(xù)顯示數(shù)據(jù),另一個(gè)緩存當(dāng)前顯示渲染數(shù)據(jù),雙緩存交替工作。
[0009]進(jìn)一步地,為更好地實(shí)現(xiàn)本發(fā)明,還包括總控器,所述總控器分別與裝載器、邏輯控制器、資源堆棧單元、渲染控制器、計(jì)時(shí)器、音頻控制器、置換器相連接。
[0010]本發(fā)明在設(shè)計(jì)了一種微課播放引擎的同時(shí)設(shè)計(jì)了一種微課播放方法,包括以下步驟:
用戶啟動(dòng)微課文件時(shí),包括以下步驟:
(1)啟動(dòng):點(diǎn)擊微課文件,啟動(dòng)用例;
(2)讀取微課文件:裝載器讀取微課文件;
(3)分解資源數(shù)據(jù):根據(jù)文件規(guī)范協(xié)議進(jìn)行解析,動(dòng)作資源、聲音資源、圖片素材資源分類放入到待處理隊(duì)列,聲音和圖片生成零時(shí)緩存文件;
(4)發(fā)送資源數(shù)據(jù):裝載器把數(shù)據(jù)發(fā)送給邏輯控制器;
(5)數(shù)據(jù)運(yùn)算:邏輯控制器把分類的資源數(shù)據(jù)進(jìn)行分類解析,動(dòng)作資源解析成畫筆動(dòng)作、擦子動(dòng)作、撤銷動(dòng)作、恢復(fù)動(dòng)作、清線動(dòng)作、清屏動(dòng)作、插入圖片動(dòng)作、刪除圖片動(dòng)作、旋轉(zhuǎn)圖片、置前置后圖片;如果是圖片資源轉(zhuǎn)義成對(duì)應(yīng)的編號(hào)和引用地址;如果是畫筆動(dòng)作和擦子動(dòng)作把消息轉(zhuǎn)義成軌跡點(diǎn)坐標(biāo)數(shù)組存放到線條對(duì)象;
(6)壓入堆棧:邏輯控制器把組裝好的零時(shí)數(shù)據(jù)壓入到資源堆棧單元,為播放時(shí)提供待運(yùn)算處理的數(shù)據(jù);
(7)是否超過(guò)堆棧容量:檢查是否超過(guò)堆棧隊(duì)列定義的閥值,圖片總數(shù)量的大小或聲音實(shí)體數(shù)據(jù)過(guò)大;
(8)發(fā)送數(shù)據(jù)緩存到磁盤緩存:發(fā)送組裝好的零時(shí)數(shù)據(jù)給置換器,置換器把數(shù)據(jù)保存到磁盤緩存區(qū);
(9)請(qǐng)求指定的數(shù)據(jù):堆棧數(shù)據(jù)處理完畢后,請(qǐng)求指定時(shí)間片的數(shù)據(jù);
(10)彈出數(shù)據(jù):資源堆棧單元根據(jù)時(shí)間片標(biāo)記彈出符合時(shí)間的內(nèi)存堆棧數(shù)據(jù);
(11)組裝數(shù)據(jù):邏輯控制器組裝成全量幀和反向幀;全量幀從零時(shí)間點(diǎn),然后每隔10秒生成一個(gè)當(dāng)前時(shí)刻顯示數(shù)據(jù),反向幀是每次撤銷操作前的那時(shí)刻顯示數(shù)據(jù);前者是為了拖動(dòng)播放不需要從頭開始運(yùn)算顯示數(shù)據(jù),后者是為了撤銷操作也不需要從頭開始運(yùn)算顯示數(shù)據(jù);
(12)發(fā)送零時(shí)間點(diǎn)的數(shù)據(jù):發(fā)送O點(diǎn)時(shí)間片的全量數(shù)據(jù)給渲染控制器;
(13)渲染并顯示:渲染控制器控制渲染的方式和算法策略,渲染方式為顯示數(shù)據(jù)寫入bitmap然后放入到canvas,算法策略使用了雙緩存,一個(gè)緩存記錄后續(xù)顯示數(shù)據(jù),另一個(gè)緩存當(dāng)前顯示渲染數(shù)據(jù),這兩個(gè)緩存交替工作,從而解決渲染性能問(wèn)題。
[0011]用戶啟動(dòng)微課文件后,開始播放微課文件,包括以下步驟:
(14)播放:用戶播放,播放又可能是拖動(dòng)播放或繼續(xù)播放,用例開始;
(15)啟動(dòng)計(jì)時(shí)器:如果是拖動(dòng)事件邏輯控制器獲得進(jìn)度條的時(shí)間點(diǎn),如果是繼續(xù)播放獲取內(nèi)存時(shí)間標(biāo)志中的時(shí)間,如果是從頭開始播放內(nèi)存時(shí)間標(biāo)志為零,然后啟動(dòng)/喚醒計(jì)數(shù)器中線程,同時(shí)計(jì)時(shí)器開始計(jì)時(shí);
(16)啟動(dòng)聲首播放:啟動(dòng)首頻控制器解碼播放;
(17)啟動(dòng)顯示數(shù)據(jù):啟動(dòng)邏輯控制器開始顯示邏輯;
(18)獲取當(dāng)前時(shí)間點(diǎn)的數(shù)據(jù):邏輯控制器請(qǐng)求指定時(shí)間片的數(shù)據(jù); (19)彈出數(shù)據(jù):資源堆棧單元根據(jù)時(shí)間片標(biāo)記彈出符合時(shí)間的內(nèi)存堆棧數(shù)據(jù);
(20)組裝數(shù)據(jù):邏輯控制器組裝顯示數(shù)據(jù)并向全量幀或反向幀中追加;
(21)推送數(shù)據(jù):發(fā)送當(dāng)前時(shí)間片的全量數(shù)據(jù)給渲染控制器;
(22)渲染并顯示:渲染控制器把顯示數(shù)據(jù)寫入bitmap然后放入到canvas;這樣按時(shí)間片進(jìn)行不停地讀取、組裝和渲染,從而形成了動(dòng)態(tài)的顯示效果;
(23)暫停:如果用戶點(diǎn)擊暫停,計(jì)時(shí)器停止計(jì)時(shí);
(24)停止聲音播放:用戶進(jìn)行步驟(23)操作時(shí),計(jì)時(shí)器向音頻控制器發(fā)送停止播放指令,聲音播放暫停;
(25)通知停止:用戶進(jìn)行步驟(23)操作時(shí),計(jì)時(shí)器向邏輯控制器發(fā)送停止組裝指令,組裝線程暫停;
(26)檢查數(shù)據(jù):資源堆棧單元中一個(gè)線程檢查資源堆棧剩余數(shù)據(jù);
(27)如果未裝置,進(jìn)行置換:如果資源堆棧單元發(fā)現(xiàn)后續(xù)的數(shù)據(jù)沒(méi)有在資源堆棧隊(duì)列中,向置換器發(fā)送需裝入下個(gè)時(shí)間段的數(shù)據(jù);
(28)返回?cái)?shù)據(jù):置換器根據(jù)時(shí)間段標(biāo)志讀取磁盤緩存的數(shù)據(jù)并返回;
(29)替換堆棧隊(duì)列數(shù)據(jù):資源堆棧單元根據(jù)返回的數(shù)據(jù)壓入到對(duì)應(yīng)的堆棧隊(duì)列。
[0012]本發(fā)明與現(xiàn)有技術(shù)相比,具有以下有益效果:
(1)本發(fā)明通過(guò)優(yōu)化算法,避免在制作產(chǎn)品的過(guò)程中,出現(xiàn)零時(shí)間點(diǎn)和最末時(shí)間點(diǎn)暫停時(shí)錄制的無(wú)限制的清線、清屏、撤銷和恢復(fù)操作播放出現(xiàn)資源數(shù)據(jù)的丟失;
(2)本發(fā)明通過(guò)設(shè)置置換器,將緩存數(shù)據(jù)與磁盤零時(shí)文件置換,防止在時(shí)長(zhǎng)超過(guò)三十分鐘以上的課件出現(xiàn)內(nèi)存泄漏,保證了可用性和穩(wěn)定性;
(3)本發(fā)明通過(guò)設(shè)計(jì)多種隊(duì)列來(lái)保存不同動(dòng)作,并結(jié)合反向幀、全量幀來(lái)進(jìn)行性能提升,這樣縮短了用戶拖動(dòng)播放等待時(shí)間,在后續(xù)播放上能夠感覺無(wú)延遲。
【專利附圖】
【附圖說(shuō)明】
[0013]圖1為本發(fā)明啟動(dòng)狀態(tài)邏輯組件連接圖;
圖2為本發(fā)明播放狀態(tài)邏輯組件連接圖;
圖3為本發(fā)明啟動(dòng)狀態(tài)時(shí)序圖;
圖4為本發(fā)明播放狀態(tài)時(shí)序圖。
【具體實(shí)施方式】
[0014]下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)介紹,但本發(fā)明的實(shí)施方式不限于此。
[0015]實(shí)施例1:
如圖1、圖2所示,一種微課播放引擎,包括:
裝載器:與邏輯控制器相連接,用于讀取微課文件并將讀取的數(shù)據(jù)發(fā)送到邏輯控制器;邏輯控制器:分別與資源堆棧單元、渲染控制器相連接,用于把分類的資源數(shù)據(jù)進(jìn)行分類解析、數(shù)據(jù)運(yùn)算、將零時(shí)數(shù)據(jù)壓入資源堆棧、檢查數(shù)據(jù)堆棧是否達(dá)到閥值、發(fā)送數(shù)據(jù)、組裝數(shù)據(jù);資源堆棧單元:用于接收邏輯控制器組裝好的零時(shí)數(shù)據(jù);渲染控制器:用于控制渲染的方式和算法策略,對(duì)數(shù)據(jù)進(jìn)行渲染并顯示;計(jì)時(shí)器:與邏輯控制器相連接,用于記錄從邏輯控制器獲得的時(shí)間點(diǎn)并計(jì)時(shí);音頻控制器:與計(jì)時(shí)器相連接,用于接收計(jì)時(shí)器信息進(jìn)行微課播放或停止播放。
[0016]為更好地實(shí)現(xiàn)本發(fā)明,保證可用性和穩(wěn)定性,還包括置換器,所述置換器分別與邏輯控制器、資源堆棧單元相連接。通過(guò)將緩存數(shù)據(jù)與磁盤零時(shí)文件置換,防止在時(shí)長(zhǎng)超過(guò)三十分鐘以上的課件出現(xiàn)內(nèi)存泄漏,從而可以保證可用性和穩(wěn)定性。
[0017]為更好地實(shí)現(xiàn)本發(fā)明,避免播放延遲現(xiàn)象,所述邏輯控制器將數(shù)據(jù)組裝為全量幀和反向幀,全量幀從零時(shí)間點(diǎn)且每隔10秒生成一個(gè)當(dāng)前時(shí)刻顯示數(shù)據(jù),反向幀每次撤銷操作前的那時(shí)刻顯示數(shù)據(jù)。通過(guò)設(shè)計(jì)多種隊(duì)列來(lái)保存不同動(dòng)作,并結(jié)合反向幀、全量幀來(lái)進(jìn)行性能提升,這樣縮短了用戶拖動(dòng)播放等待時(shí)間,在后續(xù)播放上能夠感覺無(wú)延遲。
[0018]為更好地實(shí)現(xiàn)本發(fā)明,所述渲染控制器的渲染方式為顯示數(shù)據(jù)寫入位圖bitmap之后放入到畫布canvas。同時(shí)為更好地實(shí)現(xiàn)本發(fā)明,所述渲染控制器的渲染策略為使用雙緩存,一個(gè)緩存記錄后續(xù)顯示數(shù)據(jù),另一個(gè)緩存當(dāng)前顯示渲染數(shù)據(jù),雙緩存交替工作,可以防止數(shù)據(jù)丟失。
[0019]為更好地實(shí)現(xiàn)本發(fā)明,便于關(guān)閉退出應(yīng)用,還包括總控器,所述總控器分別與裝載器、邏輯控制器、資源堆棧單元、渲染控制器、計(jì)時(shí)器、音頻控制器、置換器相連接。用戶需要退出應(yīng)用時(shí),通過(guò)總控器銷毀所有控制器,關(guān)閉所有線程并退出應(yīng)用。
[0020]實(shí)施例2:
本實(shí)施例在實(shí)施例1的基礎(chǔ)上提出了一種微課播放方法,如圖3所示,在用戶通過(guò)步驟
(I)啟動(dòng)微課文件時(shí),通過(guò)點(diǎn)擊用戶界面組件(UI),點(diǎn)擊微課文件,啟動(dòng)用例;
裝載器通過(guò)步驟(2)讀取微課文件,裝載器通過(guò)步驟(3)根據(jù)文件規(guī)范協(xié)議進(jìn)行解析,動(dòng)作資源、聲音資源、圖片素材資源分類放入到待處理隊(duì)列,聲音和圖片生成零時(shí)緩存文件,裝載器通過(guò)步驟(4)將數(shù)據(jù)發(fā)送給邏輯控制器;
邏輯控制器通過(guò)步驟(5)把分類的資源數(shù)據(jù)進(jìn)行分類解析,動(dòng)作資源解析成畫筆動(dòng)作、擦子動(dòng)作、撤銷動(dòng)作、恢復(fù)動(dòng)作、清線動(dòng)作、清屏動(dòng)作、插入圖片動(dòng)作、刪除圖片動(dòng)作、旋轉(zhuǎn)圖片、置前置后圖片;如果是圖片資源轉(zhuǎn)義成對(duì)應(yīng)的編號(hào)和引用地址;如果是畫筆動(dòng)作和擦子動(dòng)作把消息轉(zhuǎn)義成軌跡點(diǎn)坐標(biāo)數(shù)組存放到線條對(duì)象;邏輯控制器通過(guò)步驟(6)把組裝好的零時(shí)數(shù)據(jù)壓入到資源堆棧,為播放時(shí)提供待運(yùn)算處理的數(shù)據(jù);邏輯控制器通過(guò)步驟(7)檢查是否超過(guò)堆棧隊(duì)列定義的閥值,圖片總數(shù)量的大小或聲音實(shí)體數(shù)據(jù)過(guò)大;在堆棧數(shù)據(jù)處理完畢后,邏輯控制器通過(guò)步驟(9)請(qǐng)求指定的時(shí)間片的數(shù)據(jù);資源通過(guò)步驟(10)根據(jù)時(shí)間片標(biāo)記彈出符合時(shí)間的內(nèi)存堆棧數(shù)據(jù);邏輯控制器通過(guò)步驟(12)發(fā)送O點(diǎn)時(shí)間片的全量數(shù)據(jù)給渲染控制器,渲染控制器通過(guò)步驟(13)對(duì)數(shù)據(jù)進(jìn)行渲染并顯示。
[0021]如圖4所示,在用戶需要播放微課文件時(shí),通過(guò)點(diǎn)擊用戶界面組件(UI),點(diǎn)擊微課文件進(jìn)行播放操作:
通過(guò)步驟(14)播放微課文件,播放有可能是拖動(dòng)播放或繼續(xù)播放,用例開始;如步驟
(15)所示,如果是拖動(dòng)事件邏輯控制器獲得進(jìn)度條的時(shí)間點(diǎn),如果是繼續(xù)播放獲取內(nèi)存時(shí)間標(biāo)志中的時(shí)間,如果是從頭開始播放內(nèi)存時(shí)間標(biāo)志為零,然后啟動(dòng)/喚醒計(jì)數(shù)器中線程,同時(shí)計(jì)時(shí)器開始計(jì)時(shí);計(jì)時(shí)器通過(guò)步驟(16)啟動(dòng)音頻控制器解碼播放,計(jì)時(shí)器通過(guò)步驟
(17)啟動(dòng)邏輯控制器開始顯示邏輯;
邏輯控制器通過(guò)步驟(18)向資源堆棧單元請(qǐng)求指定時(shí)間片的數(shù)據(jù),從而向資源堆棧單元獲取當(dāng)前時(shí)間點(diǎn)的數(shù)據(jù),資源堆棧單元通過(guò)步驟(19)根據(jù)時(shí)間片標(biāo)記彈出符合時(shí)間的內(nèi)存堆棧數(shù)據(jù);
邏輯控制器空過(guò)步驟(20 )組裝顯示數(shù)據(jù)并向全量幀或反向幀中追加,邏輯控制器通過(guò)步驟(21)向渲染控制器發(fā)送當(dāng)前時(shí)間片的全量數(shù)據(jù);
當(dāng)用戶通過(guò)步驟(23)點(diǎn)擊暫停時(shí),計(jì)時(shí)器停止計(jì)時(shí),計(jì)時(shí)器通過(guò)步驟(24)向音頻控制器發(fā)送停止播放指令,聲音播放暫停;計(jì)時(shí)器通過(guò)步驟(25)向邏輯控制器發(fā)送停止組裝指令,組裝線程暫停。
[0022]本實(shí)施例包括以下協(xié)議規(guī)范:
1.文件頭長(zhǎng)度(4字節(jié)int);
2.XML格式的文件頭,定義了每個(gè)資源在微課文件中的數(shù)據(jù)位置,格式如下:
<Vke>
〈TotalTime value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)O) 〃/>//微課總時(shí)間
〈AudioCodecType value=〃 一個(gè) Byte (默認(rèn)為 O) 〃/>//音頻編碼類型
<AudioSampIeRate value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)O) 〃/> //音頻碼率 <AudioChanneICount value=〃 一個(gè) Byte (默認(rèn)為 1)〃/>// 音頻聲道數(shù)
〈AudioFrameSize value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)O) 〃/> //音頻幀大小〈AudioDataPosition value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)0)〃/> //音頻數(shù)據(jù)的位置
<ActionDataPosition value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)0)〃/> //動(dòng)作數(shù)據(jù)的位置
〈ResourceDataPosition value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)0)〃/> //資源數(shù)據(jù)的位置
〈VkeWidth value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)O) 〃/> //微課錄制時(shí)的寬度〈VkeHeight value=〃十個(gè)Byte (不足十個(gè)的前面補(bǔ)O) 〃/> //微課錄制時(shí)的高度〈AudioMappingDataPosition value=〃十個(gè) Byte (不足十個(gè)的前面補(bǔ) O) 〃/> //音頻數(shù)據(jù)包和文件位置映射數(shù)據(jù)的位置</Vke>
通過(guò)自定義多媒體文件格式,vke后綴的文件數(shù)據(jù)分為頭信息和資源信息,頭信息定義了數(shù)據(jù)協(xié)議規(guī)則,資源信息分為痕跡資源信息、圖片資源信息和聲音資源信息。
[0023]Android環(huán)境組件包括Canvas、Media Framework等,Android端自定義多媒體數(shù)據(jù)播放功能,裝載、解析、資源隊(duì)列壓棧模式,根據(jù)資源生成反向幀、全量幀、動(dòng)態(tài)幀數(shù)據(jù)。
[0024]UI組件包括播放進(jìn)度條、音量控制條、播放暫停開關(guān)。
[0025]如圖3所示,在用戶啟動(dòng)播放引擎時(shí),邏輯控制器通過(guò)步驟(8)發(fā)送組裝好的零時(shí)數(shù)據(jù)給置換器,置換器把數(shù)據(jù)保存到磁盤區(qū);在用戶播放微課文件時(shí),如圖4所示,資源堆棧單元通過(guò)步驟(26)檢查資源堆棧單元剩余數(shù)據(jù),如果發(fā)現(xiàn)后續(xù)的數(shù)據(jù)沒(méi)有在資源堆棧隊(duì)列中,資源堆棧單元通過(guò)步驟(27)向置換器發(fā)送需裝入下個(gè)時(shí)間段的數(shù)據(jù),置換器通過(guò)步驟(28)根據(jù)時(shí)間段標(biāo)志 讀取磁盤緩存的數(shù)據(jù)并返回,資源堆棧單元通過(guò)步驟(29)根據(jù)返回的數(shù)據(jù)壓入到對(duì)應(yīng)的堆棧隊(duì)列。
[0026]渲染控制器通過(guò)步驟(22)把顯示數(shù)據(jù)寫入位圖bitmap然后放入到畫布canvas,這樣按時(shí)間片進(jìn)行不停地讀取、組裝和渲染,從而形成了動(dòng)態(tài)的顯示效果。
[0027]通過(guò)優(yōu)化算法,能夠防止出現(xiàn)零時(shí)間點(diǎn)和最末時(shí)間點(diǎn)暫停時(shí)錄制的無(wú)限制的清線、清屏、撤銷和恢復(fù)操作播放出現(xiàn)資源數(shù)據(jù)的丟失。本實(shí)施例其他部分與實(shí)施例1相同,不再贅述。
[0028]以上所述,僅是本發(fā)明的較佳實(shí)施例,并非對(duì)本發(fā)明做任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡(jiǎn)單修改、等同變化,均落入本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種微課播放引擎,其特征在于,包括: 裝載器:與邏輯控制器相連接,用于讀取微課文件并將讀取的數(shù)據(jù)發(fā)送到邏輯控制器; 裝載器:分別與資源堆棧單元、渲染控制器相連接,用于把分類的資源數(shù)據(jù)進(jìn)行分類解析、數(shù)據(jù)運(yùn)算、將零時(shí)數(shù)據(jù)壓入資源堆棧、檢查數(shù)據(jù)堆棧是否達(dá)到閥值、發(fā)送數(shù)據(jù)、組裝數(shù)據(jù); 資源堆棧單元:用于接收邏輯控制器組裝好的零時(shí)數(shù)據(jù); 渲染控制器:用于控制渲染的方式和算法策略,對(duì)數(shù)據(jù)進(jìn)行渲染并顯示; 計(jì)時(shí)器:與邏輯控制器相連接,用于記錄從邏輯控制器獲得的時(shí)間點(diǎn)并計(jì)時(shí); 音頻控制器:與計(jì)時(shí)器相連接,用于接收計(jì)時(shí)器信息進(jìn)行微課播放或停止播放。
2.根據(jù)權(quán)利要求1所述的一種微課播放引擎,其特征在于:還包括置換器,所述置換器分別與邏輯控制器、資源堆棧單元相連接。
3.根據(jù)權(quán)利要求2所述的一種微課播放引擎,其特征在于:還包括總控器,所述總控器分別與裝載器、邏輯控制器、資源堆棧單元、渲染控制器、計(jì)時(shí)器、音頻控制器、置換器相連接。
4.根據(jù)權(quán)利要求1所述的一種微課播放引擎,其特征在于:所述邏輯控制器將數(shù)據(jù)組裝為全量幀和反向幀,全量幀從零時(shí)間點(diǎn)且每隔10秒生成一個(gè)當(dāng)前時(shí)刻顯示數(shù)據(jù),反向幀每次撤銷操作前的那時(shí)刻顯示數(shù)據(jù)。`
5.根據(jù)權(quán)利要求1所述的一種微課播放引擎,其特征在于:所述渲染控制器的渲染方式為顯示數(shù)據(jù)寫入位圖bitmap之后放入到畫布canvas。
6.根據(jù)權(quán)利要求1所述的一種微課播放引擎,其特征在于:所述渲染控制器的渲染策略為使用雙緩存,一個(gè)緩存記錄后續(xù)顯示數(shù)據(jù),另一個(gè)緩存當(dāng)前顯示渲染數(shù)據(jù),雙緩存交替工作。
7.根據(jù)上述權(quán)利要求所述的一種微課播放方法,其特征在于:包括以下步驟: 用戶啟動(dòng)微課文件時(shí),包括以下步驟: (1)啟動(dòng):點(diǎn)擊微課文件,啟動(dòng)用例; (2)讀取微課文件:裝載器讀取微課文件; (3)分解資源數(shù)據(jù):根據(jù)文件規(guī)范協(xié)議進(jìn)行解析,動(dòng)作資源、聲音資源、圖片素材資源分類放入到待處理隊(duì)列,聲音和圖片生成零時(shí)緩存文件; (4)發(fā)送資源數(shù)據(jù):裝載器把數(shù)據(jù)發(fā)送給邏輯控制器; (5)數(shù)據(jù)運(yùn)算:邏輯控制器把分類的資源數(shù)據(jù)進(jìn)行分類解析,動(dòng)作資源解析成畫筆動(dòng)作、擦子動(dòng)作、撤銷動(dòng)作、恢復(fù)動(dòng)作、清線動(dòng)作、清屏動(dòng)作、插入圖片動(dòng)作、刪除圖片動(dòng)作、旋轉(zhuǎn)圖片、置前置后圖片;如果是圖片資源轉(zhuǎn)義成對(duì)應(yīng)的編號(hào)和引用地址;如果是畫筆動(dòng)作和擦子動(dòng)作把消息轉(zhuǎn)義成軌跡點(diǎn)坐標(biāo)數(shù)組存放到線條對(duì)象; (6)壓入堆棧:邏輯控制器把組裝好的零時(shí)數(shù)據(jù)壓入到資源堆棧單元,為播放時(shí)提供待運(yùn)算處理的數(shù)據(jù); (7)是否超過(guò)堆棧容量:檢查是否超過(guò)堆棧隊(duì)列定義的閥值,圖片總數(shù)量的大小或聲音實(shí)體數(shù)據(jù)過(guò)大; (8)發(fā)送數(shù)據(jù)緩存到磁盤緩存:發(fā)送組裝好的零時(shí)數(shù)據(jù)給置換器,置換器把數(shù)據(jù)保存到磁盤緩存區(qū); (9)請(qǐng)求指定的數(shù)據(jù):堆棧數(shù)據(jù)處理完畢后,請(qǐng)求指定時(shí)間片的數(shù)據(jù); (10)彈出數(shù)據(jù):資源堆棧單元根據(jù)時(shí)間片標(biāo)記彈出符合時(shí)間的內(nèi)存堆棧數(shù)據(jù); (11)組裝數(shù)據(jù):邏輯控制器組裝成全量幀和反向幀;全量幀從零時(shí)間點(diǎn),然后每隔10秒生成一個(gè)當(dāng)前時(shí)刻顯示數(shù)據(jù),反向幀是每次撤銷操作前的那時(shí)刻顯示數(shù)據(jù);前者是為了拖動(dòng)播放不需要從頭開始運(yùn)算顯示數(shù)據(jù),后者是為了撤銷操作也不需要從頭開始運(yùn)算顯示數(shù)據(jù); (12)發(fā)送零時(shí)間點(diǎn)的數(shù)據(jù):發(fā)送O點(diǎn)時(shí)間片的全量數(shù)據(jù)給渲染控制器; (13)渲染并顯示:渲染控制器控制渲染的方式和算法策略,渲染方式為顯示數(shù)據(jù)寫入bitmap然后放入到canvas,算法策略使用了雙緩存,一個(gè)緩存記錄后續(xù)顯示數(shù)據(jù),另一個(gè)緩存當(dāng)前顯示渲染數(shù)據(jù),這兩個(gè)緩存交替工作,從而解決渲染性能問(wèn)題; 用戶啟動(dòng)微課文件后,開始播放微課文件,包括以下步驟: (14)播放:用戶播放,播放又可能是拖動(dòng)播放或繼續(xù)播放,用例開始; (15)啟動(dòng)計(jì)時(shí)器:如果是拖動(dòng)事件邏輯控制器獲得進(jìn)度條的時(shí)間點(diǎn),如果是繼續(xù)播放獲取內(nèi)存時(shí)間標(biāo)志中的時(shí)間,如果是從頭開始播放內(nèi)存時(shí)間標(biāo)志為零,然后啟動(dòng)/喚醒計(jì)數(shù)器中線程,同時(shí)計(jì)時(shí)器開始計(jì)時(shí); (16)啟動(dòng)聲首播放:啟動(dòng)首頻控制器解碼播放; (17)啟動(dòng)顯示數(shù)據(jù):啟動(dòng)邏輯控制器開始顯示邏輯;` (18)獲取當(dāng)前時(shí)間點(diǎn)的數(shù)據(jù):邏輯控制器請(qǐng)求指定時(shí)間片的數(shù)據(jù); (19)彈出數(shù)據(jù):資源堆棧單元根據(jù)時(shí)間片標(biāo)記彈出符合時(shí)間的內(nèi)存堆棧數(shù)據(jù); (20)組裝數(shù)據(jù):邏輯控制器組裝顯示數(shù)據(jù)并向全量幀或反向幀中追加; (21)推送數(shù)據(jù):發(fā)送當(dāng)前時(shí)間片的全量數(shù)據(jù)給渲染控制器; (22)渲染并顯示:渲染控制器把顯示數(shù)據(jù)寫入bitmap然后放入到canvas;這樣按時(shí)間片進(jìn)行不停地讀取、組裝和渲染,從而形成了動(dòng)態(tài)的顯示效果; (23)暫停:如果用戶點(diǎn)擊暫停,計(jì)時(shí)器停止計(jì)時(shí); (24)停止聲音播放:用戶進(jìn)行步驟(23)操作時(shí),計(jì)時(shí)器向音頻控制器發(fā)送停止播放指令,聲音播放暫停; (25)通知停止:用戶進(jìn)行步驟(23)操作時(shí),計(jì)時(shí)器向邏輯控制器發(fā)送停止組裝指令,組裝線程暫停; (26)檢查數(shù)據(jù):資源堆棧單元中一個(gè)線程檢查資源堆棧剩余數(shù)據(jù); (27)如果未裝置,進(jìn)行置換:如果資源堆棧單元發(fā)現(xiàn)后續(xù)的數(shù)據(jù)沒(méi)有在資源堆棧隊(duì)列中,向置換器發(fā)送需裝入下個(gè)時(shí)間段的數(shù)據(jù); (28)返回?cái)?shù)據(jù):置換器根據(jù)時(shí)間段標(biāo)志讀取磁盤緩存的數(shù)據(jù)并返回; (29)替換堆棧隊(duì)列數(shù)據(jù):資源堆棧單元根據(jù)返回的數(shù)據(jù)壓入到對(duì)應(yīng)的堆棧隊(duì)列。
【文檔編號(hào)】H04N21/85GK103826167SQ201410099758
【公開日】2014年5月28日 申請(qǐng)日期:2014年3月18日 優(yōu)先權(quán)日:2014年3月18日
【發(fā)明者】夏萱 申請(qǐng)人:上海景界信息科技有限公司