本發(fā)明涉及網(wǎng)絡(luò)視頻技術(shù)領(lǐng)域,尤其涉及一種管理視頻流解析的方法及裝置。
背景技術(shù):
隨著流媒體技術(shù)的不斷發(fā)展,越來越多的用戶習(xí)慣于通過終端設(shè)備直接連接網(wǎng)絡(luò)上進行音視頻的點播或直播,這給用戶帶來很多的便利性。
在終端設(shè)備中播放網(wǎng)絡(luò)視頻時,其中一個非常重要的環(huán)節(jié)就是根據(jù)播放視頻的請求調(diào)用本地JS(Javascript的簡寫)去解析對應(yīng)的視頻流地址。以安卓(Android)系統(tǒng)為例,在進行這一視頻流地址解析操作時,其基本的處理模式是:在獲得相應(yīng)的視頻流地址解析請求時,通過新建一個網(wǎng)絡(luò)視圖(WebView)對象去加載本地JS代碼(JS code)來進行相應(yīng)的解析處理,當(dāng)解析任務(wù)完成時,系統(tǒng)將會自動銷毀對應(yīng)的網(wǎng)絡(luò)視圖。而當(dāng)后續(xù)又有新的解析需求時,只能再重新創(chuàng)建一個新的網(wǎng)絡(luò)視圖。從而,需要如此不斷地新創(chuàng)建、銷毀網(wǎng)絡(luò)視圖。由于新建一個網(wǎng)絡(luò)視圖所需占用的系統(tǒng)資源非常龐大,對系統(tǒng)運行影響大,尤其是當(dāng)同時有多個網(wǎng)絡(luò)視圖調(diào)用本地JS來進行解析時,勢必會造成大量占用系統(tǒng)資源,這就很可能會嚴重影響系統(tǒng)的正常、流暢地運行。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例所要解決的技術(shù)問題在于,提供一種管理視頻流解析的方法及裝置,以提升解析處理效率,減少系統(tǒng)資料的占用。
為解決上述技術(shù)問題,本發(fā)明實施例提供如下技術(shù)方案:一種管理視頻流解析的方法,包括:
獲取解析視頻流的請求,在預(yù)先建立的對象池中調(diào)用空閑的實例,所述對象池中包括至少一個實例;
通過調(diào)用的實例解析所述請求對應(yīng)的視頻流;
當(dāng)所述視頻流解析完成時,將所述調(diào)用的實例的狀態(tài)設(shè)置為空閑。
進一步地,所述在預(yù)先建立的對象池中調(diào)用空閑的實例包括:
從所述對象池中獲取狀態(tài)為空閑的實例的列表;
按照預(yù)定的規(guī)則從所述列表中調(diào)用一個空閑的實例。
進一步地,所述從所述對象池中獲取狀態(tài)為空閑的實例的列表包括:
判斷所述對象池中是否有狀態(tài)為空閑的實例;
在所述對象池中有狀態(tài)為空閑的實例時,將所述對象池中狀態(tài)為空閑的實例加入所述列表;
在所述對象池中沒有狀態(tài)為空閑的實例時,創(chuàng)建并保存一個新的實例作為空閑的實例加入所述列表。
進一步地,所述實例中封裝有WebView,所述通過所述調(diào)用實例解析所述請求對應(yīng)的視頻流包括:通過所述調(diào)用實例中的WebView加載JS code來解析所述請求對應(yīng)的視頻流。
進一步地,所述實例為JSHelper實例,所述方法還包括:構(gòu)建JSHelper Factory類,通過所述JSHelper Factory類管理和調(diào)用所述對象池以及通知所述對象池將要解析視頻流。
另一方面,本發(fā)明實施例還提供一種管理視頻流解析的裝置,包括:
調(diào)用模塊,用于獲取解析視頻流的請求,在預(yù)先建立的對象池中調(diào)用空閑的實例,所述對象池中包括至少一個實例;
解析模塊,通過調(diào)用的實例解析所述請求對應(yīng)的視頻流;
狀態(tài)設(shè)置模塊,當(dāng)所述視頻流解析完成時,將所述調(diào)用的實例的狀態(tài)設(shè)置為空閑。
進一步地,所述調(diào)用模塊包括:
獲取列表單元,從所述對象池中獲取狀態(tài)為空閑的實例的列表;
選定單元,按照預(yù)定的規(guī)則從所述列表中調(diào)用一個空閑的實例。
進一步地,所述獲取列表單元包括:
判斷子單元,判斷所述對象池中是否有狀態(tài)為空閑的實例;
第一執(zhí)行子單元,在所述對象池中有狀態(tài)為空閑的實例時,將所述對象池中狀態(tài)為空閑的實例加入所述列表;
第二執(zhí)行子單元,在所述對象池中沒有狀態(tài)為空閑的實例時,創(chuàng)建并保存一個新的實例作為空閑的實例加入所述列表。
進一步地,所述實例中封裝有WebView,所述解析模塊通過所述調(diào)用實例中的WebView加載JS code來解析所述請求對應(yīng)的視頻流。
進一步地,所述實例為JSHelper實例,所述裝置還包括:構(gòu)建模塊,用于構(gòu)建JSHelper Factory類,所述JSHelper Factory類用于管理和調(diào)用所述對象池以及通知所述對象池將要執(zhí)行解析視頻流。
采用上述技術(shù)方案后,本發(fā)明實施例至少具有如下有益效果:本發(fā)明實施例通過在接收到解析視頻流的請求時從對象池中調(diào)用一個空閑的實例來解析視頻流,并在完成視頻流解析任務(wù)后,再將所調(diào)用的實例的狀態(tài)更新為空閑從而在需要執(zhí)行新的任務(wù)時可供再次調(diào)用,能很好地避免現(xiàn)有技術(shù)中不斷重復(fù)地進行創(chuàng)建和銷毀實例所帶來的不必要的資源消耗。本發(fā)明的方法及裝置實施過程簡單,執(zhí)行效率高,無需占用過多的系統(tǒng)資源,資源利用率高。
附圖說明
圖1是本發(fā)明管理視頻流解析的方法的一個實施例的步驟流程示意圖。
圖2是本發(fā)明管理視頻流解析的方法的一個實施例中的步驟S11的具體流程示意圖。
圖3是本發(fā)明管理視頻流解析的方法的又一個實施例中的步驟S111的具體流程示意圖。
圖4是本發(fā)明管理視頻流解析的方法的另一個實施例的步驟流程示意圖。
圖5是本發(fā)明管理視頻流解析的裝置的一個實施例的原理方框圖。
圖6是本發(fā)明管理視頻流解析的裝置的一個實施例的調(diào)用模塊的原理方框圖。
圖7是本發(fā)明管理視頻流解析的裝置的一個實施例的獲取列表單元的原理方框圖。
圖8是本發(fā)明管理視頻流解析的裝置的另一個可選實施例的原理方框圖。
具體實施方式
下面結(jié)合附圖和具體實施例對本申請作進一步詳細說明。應(yīng)當(dāng)理解,以下的示意性實施例及說明僅用來解釋本發(fā)明,并不作為對本發(fā)明的限定,而且,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互結(jié)合。
首先需要明確的是,在本申請中,終端設(shè)備是指用戶使用的智能終端設(shè)備,例如:可以是計算機、智能手機、平板電腦、智能電視、多媒體播放器、閱讀器等;客戶端是指在終端設(shè)備上運行的、用于為用戶提供本地服務(wù)的程序,例如:網(wǎng)頁瀏覽器、視頻播放器等。
如圖1所示,本發(fā)明實施例提供一種管理視頻流解析的方法,包括:
步驟S11,獲取解析視頻流的請求,在預(yù)先建立的對象池中調(diào)用空閑的實例,所述對象池中包括至少一個實例。
在實際的實施過程中,通常是由終端設(shè)備的使用者通過終端設(shè)備上相應(yīng)的客戶端發(fā)起解析視頻流的請求。而根據(jù)本發(fā)明實施例提供的方法,在獲取到所述解析視頻流的請求時,會先從預(yù)先建立的對象池中去查詢和調(diào)用空閑的實例,所述實例是用于具體解析視頻流的,為了能滿足同時執(zhí)行各個解析任務(wù),而通常會在對象池中預(yù)先建立有多個實例。
步驟S12,通過調(diào)用的實例解析所述請求對應(yīng)的視頻流。
通過采用所述調(diào)用實例進行解析,即可有效地根據(jù)所述請求對視頻流進行相應(yīng)的解析處理??梢岳斫獾氖?,各種能夠?qū)崿F(xiàn)視頻流解析的實例均可以應(yīng)用于本發(fā)明。
步驟S13,當(dāng)所述視頻流解析完成時,將所述調(diào)用的實例的狀態(tài)設(shè)置為空閑。
本步驟將已經(jīng)完成了解析任務(wù)的所述調(diào)用實例的狀態(tài)再恢復(fù)設(shè)置為空閑,而不是銷毀所述實例,從而可以將狀態(tài)恢復(fù)為空閑的實例再重新保存在對象池中以供下一次任務(wù)時選用。
本實施例通過在獲取到解析視頻流的請求從預(yù)先建立的、包含有至少一個實例的對象池中調(diào)用一個空閑的實例來解析視頻流地址,并在完成視頻流地址解析任務(wù)后,再將所調(diào)用的實例的狀態(tài)更新為空閑從而在需要執(zhí)行新的任務(wù)時可供再次調(diào)用,不但解析處理執(zhí)行效率高,能很好地避免現(xiàn)有技術(shù)中不斷重復(fù)地進行創(chuàng)建和銷毀實例所帶來的不必要的資源消耗,無需占用過多的系統(tǒng)資源,資源利用率高。
在本發(fā)明的一些具體實施例中,如圖2所示,所述步驟S11還進一步包括:
步驟S111,從所述對象池中獲取狀態(tài)為空閑的實例的列表;
步驟S112,按照預(yù)定的規(guī)則從所述列表中調(diào)用一個空閑的實例。
本實施例通過先獲取狀態(tài)為空閑的實例的列表,再根據(jù)預(yù)定的規(guī)則從列表中選定一個空閑的實例進行調(diào)用,可以對實例進行有效管理,提高實例的使用效率。由于可能出現(xiàn)列表中列出了多個空閑的實例,此時即需要按照預(yù)定的規(guī)則進行挑選,而所述預(yù)定的規(guī)則可以多樣化,例如:隨機挑選、按照各空閑的實例被找到的時間由先到后順序進行挑選、按照各空閑實例當(dāng)前的空閑狀態(tài)的持續(xù)時間由長到短順序進行挑選等等。
在本發(fā)明的一些具體實施例中,如圖3所示,所述步驟S111還可進一步包括:
步驟S1111,判斷所述對象池中是否有狀態(tài)為空閑的實例;
步驟S1112,在所述對象池中有狀態(tài)為空閑的實例時,將所述對象池中狀態(tài)為空閑的實例加入所述列表;
步驟S1113,在所述對象池中沒有狀態(tài)為空閑的實例時,創(chuàng)建并保存一個新的實例作為空閑的實例加入所述列表。
本實用例通過先判斷對象池中是否有空閑的實例,如有則加入列表以供選擇,如無則新創(chuàng)建一個實例作為空閑的實例加入到列表中,從而可以保證始終有空閑的實例供調(diào)用,使得解析視頻流的請求能得到及時有效處理。而且,通過采用這種處理方式,不必要在初期創(chuàng)建太多的實例,而能在實際使用過程中,根據(jù)使用情況來逐漸增加實例,能有效避免占用太多的系統(tǒng)資源來創(chuàng)建太多無法高效利用的實例。
在本發(fā)明的一些具體實施例中,所述實例中封裝有WebView,而所述步驟S12具體可包括:通過所述調(diào)用實例中的WebView加載JS code來解析所述請求對應(yīng)的視頻流。
本實施例通過在實例中封裝WebView,而能通過調(diào)用實例中的WebView來加載JS code來進行相應(yīng)的視頻流解析處理動作。WebView(網(wǎng)絡(luò)視圖)使用了WebKit渲染引擎加載顯示網(wǎng)頁,可將其視為一個瀏覽器。通過采用WebView技術(shù)來加載JS code,可以有效提升JS code加載和執(zhí)行效率。
而在本發(fā)明的一些具體實施例中,用于解析視頻流的實例可選用JSHelper實例,JSHelper即是Javascript操作幫助類,可以實現(xiàn)JS code的運行。如圖4所示,所述方法還包括:步驟S14,構(gòu)建JSHelper Factory類,通過所述JSHelper Factory類管理和調(diào)用所述對象池以及通知所述對象池將要解析視頻流。
在本實施例中,通過進一步構(gòu)建一個JSHelper Factory類來管理和調(diào)用對象池,可以更為有效地管理和調(diào)用所述對象池及對象池中的JSHelper實例,可有效提升單例對象池的處理時效性。具體運行過程時,系統(tǒng)會先通過所述JSHelper Factory類來單例一個對象池,然后,由JSHelper Factory類提供一個接口并通知所述對象池將要執(zhí)行一個視頻流地址解析任務(wù),進而從對象池調(diào)用一個空閑的JSHelper實例(所述對象池中存在空閑的JSHelper實例時)或新建一個JSHelper實例(所述對象池中沒有空閑的JSHelper實例時)。每一JSHelper實例都封裝有網(wǎng)絡(luò)視圖執(zhí)行JS代碼過程,所述執(zhí)行JS代碼過程包括從JS代碼的加載到JS代碼的執(zhí)行,再到執(zhí)行完JS代碼后的回調(diào),從而,在一個空閑的JSHelper實例被調(diào)用時,即可由所調(diào)用的所述空閑的JSHelper實例執(zhí)行相應(yīng)的JS代碼解析視頻流,無須重復(fù)進行創(chuàng)建網(wǎng)絡(luò)視圖的動作,處理效率更高。
另一方面,為更好地實施上述方法,如圖5所示,本發(fā)明實施例還提供一種管理視頻流解析的裝置,包括:
調(diào)用模塊10,用于獲取解析視頻流的請求,在預(yù)先建立的對象池中調(diào)用空閑的實例,所述對象池中包括至少一個實例;
解析模塊12,通過調(diào)用的實例解析所述請求對應(yīng)的視頻流;
狀態(tài)設(shè)置模塊14,當(dāng)所述視頻流解析完成時,將所述調(diào)用的實例的狀態(tài)設(shè)置為空閑。
本實施例可以在獲取到解析視頻流的請求時,由調(diào)用模塊10從預(yù)先建立的、包含有至少一個實例的對象池中調(diào)用一個空閑的實例,以供解析模塊12運行所述實例來解析視頻流地址,并且在完成視頻流地址解析任務(wù)后,還能由所述狀態(tài)設(shè)置模塊14再將所調(diào)用的實例的狀態(tài)更新為空閑,從而,在需要執(zhí)行新的任務(wù)時可供再次調(diào)用。不但解析處理執(zhí)行效率高,還能很好地避免現(xiàn)有技術(shù)中不斷重復(fù)地進行創(chuàng)建和銷毀實例所帶來的不必要的資源消耗,無需占用過多的系統(tǒng)資源,資源利用率高。
在本發(fā)明的一些具體實施例中,所圖6所示,所述調(diào)用模塊10包括:
獲取列表單元100,從所述對象池中獲取狀態(tài)為空閑的實例的列表;
選定單元102,按照預(yù)定的規(guī)則從所述列表中調(diào)用一個空閑的實例。
本實施例通過由獲取列表單元100獲取狀態(tài)為空閑的實例的列表,再由選定單元102根據(jù)預(yù)定的規(guī)則從列表中選定一個空閑的實例進行調(diào)用,可以對實例進行有效管理,提高實例的使用效率。在列表中列出了多個空閑的實例時,需要按照預(yù)定的規(guī)則進行挑選,所述預(yù)定的規(guī)則可以根據(jù)實際情況事先確定即可,例如:隨機挑選、按照各空閑的實例被找到的時間由先到后順序進行挑選、按照各空閑實例當(dāng)前的空閑狀態(tài)的持續(xù)時間由長到短順序進行挑選等等。
在本發(fā)明的一些具體實施例中,如圖7所示,所述獲取列表單元100包括:
判斷子單元1001,判斷所述對象池中是否有狀態(tài)為空閑的實例;
第一執(zhí)行子單元1002,在所述對象池中有狀態(tài)為空閑的實例時,將所述對象池中狀態(tài)為空閑的實例加入所述列表;
第二執(zhí)行子單元1003,在所述對象池中沒有狀態(tài)為空閑的實例時,創(chuàng)建并保存一個新的實例作為空閑的實例加入所述列表。
本實用例通過由判斷子單元1001先判斷對象池中是否有空閑的實例,如有則由第一執(zhí)行子單元1002將狀態(tài)為空閑的實例加入列表以供選擇,如無則由第二執(zhí)行子單元1002新創(chuàng)建一個實例作為空閑的實例加入到列表中,從而可以保證始終有空閑的實例供調(diào)用,使得解析視頻流的請求能得到及時有效處理。而且,通過采用這種處理方式,不必要在初期創(chuàng)建太多的實例,而能在實際使用過程中,根據(jù)使用情況來逐漸增加實例,能有效避免占用太多的系統(tǒng)資源來創(chuàng)建太多無法高效利用的實例。
在本發(fā)明的一些具體實施例中,所述實例中封裝有WebView,所述解析模塊通過所述調(diào)用實例中的WebView加載JS code來解析所述請求對應(yīng)的視頻流。
本實施例通過在實例中封裝WebView,而能通過調(diào)用實例中的WebView來加載JS code來進行相應(yīng)的視頻流解析處理動作。WebView(網(wǎng)絡(luò)視圖)使用了WebKit渲染引擎加載顯示網(wǎng)頁,可將其視為一個瀏覽器。通過采用WebView技術(shù)來加載JS code,可以有效提升JS code加載和執(zhí)行效率。
在本發(fā)明的一些具體實施例中,所述實例為JSHelper實例,如圖8所示,所述裝置還包括:構(gòu)建模塊16,用于構(gòu)建JSHelper Factory類,所述JSHelper Factory類用于管理和調(diào)用所述對象池以及通知所述對象池將要執(zhí)行解析視頻流。
在本實施例中,通過構(gòu)建模塊16構(gòu)建一個JSHelper Factory類來管理和調(diào)用對象池,可以更為有效地管理和調(diào)用所述對象池及對象池中的JSHelper實例,可有效提升單例對象池的處理時效性。具體運行過程時,系統(tǒng)會先通過所述JSHelper Factory類來單例一個對象池,然后,由JSHelper Factory類提供一個接口并通知所述對象池將要執(zhí)行一個視頻流地址解析任務(wù),進而從對象池調(diào)用一個空閑的JSHelper實例(所述對象池中存在空閑的JSHelper實例時)或新建一個JSHelper實例(所述對象池中沒有空閑的JSHelper實例時)。每一JSHelper實例都封裝有網(wǎng)絡(luò)視圖執(zhí)行JS代碼過程,所述執(zhí)行JS代碼過程包括從JS代碼的加載到JS代碼的執(zhí)行,再到執(zhí)行完JS代碼后的回調(diào),從而,在一個空閑的JSHelper實例被調(diào)用時,即可由所調(diào)用的所述空閑的JSHelper實例執(zhí)行相應(yīng)的JS代碼解析視頻流,無須重復(fù)進行創(chuàng)建網(wǎng)絡(luò)視圖的動作,處理效率更高。
本發(fā)明實施例所述的功能如果以軟件功能模塊或單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算設(shè)備可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明實施例對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算設(shè)備(可以是個人計算機,服務(wù)器,移動計算設(shè)備或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其它實施例的不同之處,各個實施例之間相同或相似部分互相參見即可。
盡管已經(jīng)示出和描述了本發(fā)明的實施例,對于本領(lǐng)域的普通技術(shù)人員而言,可以理解在不脫離本發(fā)明的原理和精神的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由所附權(quán)利要求及其等同范圍限定。