位圖數(shù)據(jù)進(jìn)行視頻檢測;若所述位圖數(shù)據(jù)為視頻數(shù)據(jù),則根據(jù)虛擬機(jī)節(jié)點(diǎn)的資源情況選擇視頻編碼算法對所述視頻數(shù)據(jù)進(jìn)行編碼,得到編碼后的視頻數(shù)據(jù);將編碼后的視頻數(shù)據(jù)發(fā)送到客戶端,由客戶端還原為桌面數(shù)據(jù)并顯示。通過監(jiān)聽虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù),來獲取虛擬機(jī)桌面顯示的數(shù)據(jù),從而省去了通過操作數(shù)據(jù)在虛擬機(jī)內(nèi)顯示再截屏的步驟,提高了虛擬機(jī)桌面顯示的效率。同時(shí),將視頻數(shù)據(jù)進(jìn)行編碼后發(fā)送給客戶端,降低了虛擬機(jī)端與客戶端之間網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。
[0062]由于現(xiàn)有的虛擬機(jī)桌面顯示中,通過截屏的方式獲取虛擬機(jī)桌面顯示數(shù)據(jù),并以位圖的形式傳輸給客戶端顯示,使得運(yùn)行效率低且虛擬機(jī)端與客戶端之間網(wǎng)絡(luò)傳輸數(shù)據(jù)量大的問題。
[0063]基于上述問題,本發(fā)明提出了一種虛擬桌面顯示系統(tǒng)。參照圖1,所述虛擬桌面顯示系統(tǒng)包括:服務(wù)器100和與所述服務(wù)器100通過網(wǎng)絡(luò)連接的一個(gè)或多個(gè)客戶端200。所述服務(wù)器100端設(shè)有顯示代理程序102、模擬處理器103以及一個(gè)或多個(gè)虛擬機(jī)101,所述顯示代理程序102通過端口映射建立每個(gè)客戶端200與對應(yīng)的虛擬機(jī)101的連接。所述虛擬機(jī)101操作系統(tǒng)內(nèi)設(shè)有顯示驅(qū)動(dòng)程序104。所述虛擬機(jī)101內(nèi)的顯示驅(qū)動(dòng)程序104主要用于監(jiān)聽并截獲虛擬機(jī)101操作系統(tǒng)內(nèi)操作虛擬機(jī)101桌面變化的操作數(shù)據(jù),將所述操作數(shù)據(jù)中的圖形操作指令轉(zhuǎn)換為客戶端200可以識(shí)別的圖形指令,將所述操作數(shù)據(jù)中的位圖數(shù)據(jù)進(jìn)行掃描,獲取變化區(qū)域的位圖數(shù)據(jù),將所述圖形指令和變化的位圖數(shù)據(jù)發(fā)送給顯示代理程序102進(jìn)行處理。所述顯示代理程序102主要獲取顯示驅(qū)動(dòng)程序104處理后的圖形指令和位圖數(shù)據(jù),將圖形指令發(fā)送給客戶端200進(jìn)行還原顯示,對位圖數(shù)據(jù)進(jìn)行視頻識(shí)別,若是視頻數(shù)據(jù)則根據(jù)適當(dāng)?shù)囊曨l編碼算法進(jìn)行編碼,將編碼后的視頻數(shù)據(jù)發(fā)送給客戶端200還原顯示,若不能識(shí)別為視頻數(shù)據(jù),則進(jìn)行壓縮以后發(fā)送給客戶端200還原顯示。
[0064]基于上述虛擬桌面顯示系統(tǒng),本發(fā)明提供一種虛擬機(jī)桌面顯示方法。
[0065]參照圖2,圖2為本發(fā)明虛擬機(jī)桌面顯示方法的第一實(shí)施例的流程示意圖。
[0066]在一實(shí)施例中,所述虛擬機(jī)桌面顯示方法包括以下步驟:
[0067]步驟S10,監(jiān)聽并獲取虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù);
[0068]監(jiān)聽虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù)。在用戶對客戶端桌面產(chǎn)生操作時(shí),由于客戶端與虛擬機(jī)的對應(yīng)連接,所述虛擬機(jī)操作系統(tǒng)內(nèi)會(huì)對應(yīng)產(chǎn)生操作虛擬機(jī)桌面變化的操作數(shù)據(jù),所述操作數(shù)據(jù)包括圖形操作指令和位圖數(shù)據(jù)。在虛擬機(jī)操作系統(tǒng)內(nèi)產(chǎn)生操作虛擬機(jī)桌面變化的操作數(shù)據(jù)時(shí),截獲所述操作數(shù)據(jù)并進(jìn)行處理。優(yōu)選的,可以通過鉤子程序?qū)崿F(xiàn)對虛擬機(jī)操作系統(tǒng)內(nèi)各種事件消息的監(jiān)聽,通過系統(tǒng)調(diào)用在虛擬機(jī)操作系統(tǒng)內(nèi)掛入鉤子程序,當(dāng)虛擬機(jī)操作系統(tǒng)內(nèi)的圖形引擎產(chǎn)生操作虛擬機(jī)桌面變化的操作數(shù)據(jù)時(shí),所述鉤子程序即在所述操作數(shù)據(jù)到達(dá)目的窗口之前截獲所述操作數(shù)據(jù),獲得對此操作數(shù)據(jù)的控制權(quán),并對所述操作數(shù)據(jù)進(jìn)行處理。優(yōu)選的,在虛擬機(jī)顯示驅(qū)動(dòng)程序中掛入鉤子程序,用于監(jiān)聽并獲取虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù),并對所述操作數(shù)據(jù)進(jìn)行處理。通過監(jiān)聽并獲取虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù),對所述操作數(shù)據(jù)進(jìn)行處理后發(fā)送給客戶端進(jìn)行還原顯示,相對于現(xiàn)有的將所述操作數(shù)據(jù)在虛擬機(jī)桌面進(jìn)行顯示后,對虛擬機(jī)桌面進(jìn)行截屏,獲取截屏的虛擬機(jī)桌面顯示數(shù)據(jù),將截取的位圖數(shù)據(jù)發(fā)送給客戶端進(jìn)行顯示,省去了在虛擬機(jī)內(nèi)顯示的步驟,提高了虛擬桌面顯示的運(yùn)行效率,同時(shí),減少了虛擬機(jī)端與客戶端之間的網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。
[0069]步驟S20,當(dāng)所述操作數(shù)據(jù)為位圖數(shù)據(jù)時(shí),對所述位圖數(shù)據(jù)進(jìn)行視頻檢測;
[0070]監(jiān)聽并獲取虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù),所述虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù)可以是圖形操作指令,也可以是位圖數(shù)據(jù)。在獲取了所述虛擬數(shù)據(jù)之后,對所述虛擬數(shù)據(jù)進(jìn)行分類。當(dāng)所述操作數(shù)據(jù)為位圖數(shù)據(jù)時(shí),對所述位圖數(shù)據(jù)進(jìn)行視頻檢測,用以判斷所述位圖數(shù)據(jù)是否是視頻數(shù)據(jù)。優(yōu)選的,對位圖數(shù)據(jù)進(jìn)行視頻檢測的過程:先判斷所述位圖數(shù)據(jù)的顯示區(qū)域左下角及右下角坐標(biāo)是否一樣,寬度及高度是否一樣,然后計(jì)算前后兩幅位圖數(shù)據(jù)的差值是否低于預(yù)設(shè)閾值,所述預(yù)設(shè)閾值為兩幅位圖數(shù)據(jù)的相似度,若兩幅位圖數(shù)據(jù)的差值低于預(yù)設(shè)的閾值,則判定為連續(xù)的視頻數(shù)據(jù),若高于預(yù)設(shè)閾值,則判定為不連續(xù)的離散位圖數(shù)據(jù)。優(yōu)選的,由虛擬機(jī)操作系統(tǒng)中的顯示驅(qū)動(dòng)程序獲取所述操作數(shù)據(jù),并將所述操作數(shù)據(jù)發(fā)送給顯示代理程序,由所述顯示代理程序完成對所述操作數(shù)據(jù)的分類及對所述位圖數(shù)據(jù)進(jìn)行視頻檢測。
[0071]優(yōu)選的,當(dāng)所述操作數(shù)據(jù)為位圖數(shù)據(jù)時(shí),對所述位圖數(shù)據(jù)進(jìn)行視頻檢測之前,可以先對所述位圖數(shù)據(jù)進(jìn)行掃描,通過逐行對比前后幅位圖數(shù)據(jù)的顯示數(shù)據(jù),獲取所述位圖數(shù)據(jù)的顯示區(qū)域中發(fā)生變化的區(qū)域,并提取變化區(qū)域的位圖數(shù)據(jù),然后對所述變化區(qū)域的位圖數(shù)據(jù)進(jìn)行視頻檢測,所述視頻檢測過程與上述過程相同,在此不再贅述。優(yōu)選的,可以通過虛擬機(jī)內(nèi)的顯示驅(qū)動(dòng)程序完成對所述操作數(shù)據(jù)的獲取,以及對位圖數(shù)據(jù)的掃描并獲取變化區(qū)域的位圖數(shù)據(jù),所述顯示驅(qū)動(dòng)程序?qū)⒆兓瘏^(qū)域的位圖數(shù)據(jù)發(fā)送給顯示代理程序,由所述顯示代理程序完成對所述變化區(qū)域的位圖數(shù)據(jù)的視頻檢測。
[0072]步驟S30,若所述位圖數(shù)據(jù)為視頻數(shù)據(jù),則根據(jù)虛擬機(jī)節(jié)點(diǎn)的資源情況選擇視頻編碼算法對所述視頻數(shù)據(jù)進(jìn)行編碼,得到編碼后的視頻數(shù)據(jù);
[0073]對所述位圖數(shù)據(jù)進(jìn)行視頻檢測后,若所述位圖數(shù)據(jù)為視頻數(shù)據(jù),則獲取所述虛擬機(jī)節(jié)點(diǎn)的資源情況,根據(jù)虛擬機(jī)節(jié)點(diǎn)的資源情況選擇視頻編碼算法對所述視頻數(shù)據(jù)進(jìn)行編碼,得到編碼后的視頻數(shù)據(jù)。虛擬機(jī)節(jié)點(diǎn)的資源情況主要包括虛擬機(jī)節(jié)點(diǎn)與客戶端之間的網(wǎng)絡(luò)帶寬值以及所述虛擬機(jī)節(jié)點(diǎn)的CPU負(fù)載量。在客戶端連接到虛擬機(jī)時(shí),獲取虛擬機(jī)節(jié)點(diǎn)與客戶端之間的網(wǎng)絡(luò)帶寬值,根據(jù)虛擬機(jī)節(jié)點(diǎn)與客戶端之間的網(wǎng)絡(luò)帶寬值選擇合適的視頻編碼算法對視頻進(jìn)行編碼。并在系統(tǒng)運(yùn)行過程中,以一定周期獲取虛擬機(jī)節(jié)點(diǎn)的CPU負(fù)載量,當(dāng)CPU負(fù)載量高于預(yù)設(shè)的閾值,則更換CPU消耗低的視頻編碼算法進(jìn)行編碼。優(yōu)選的,根據(jù)虛擬機(jī)節(jié)點(diǎn)的資源情況選擇視頻編碼算法對所述視頻數(shù)據(jù)進(jìn)行編碼的過程,可以在虛擬桌面顯示系統(tǒng)的顯示代理程序中實(shí)現(xiàn)。根據(jù)虛擬機(jī)節(jié)點(diǎn)的資源情況選擇視頻編碼算法對所述視頻數(shù)據(jù)進(jìn)行編碼,可以平衡虛擬機(jī)節(jié)點(diǎn)與客戶端之間的網(wǎng)絡(luò)帶寬值和虛擬機(jī)節(jié)點(diǎn)的CPU負(fù)載量,在保證虛擬機(jī)節(jié)點(diǎn)CPU正常運(yùn)行的條件下降低了虛擬機(jī)端與客戶端之間網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。
[0074]步驟S40,將編碼后的視頻數(shù)據(jù)發(fā)送到客戶端,由客戶端還原為桌面數(shù)據(jù)并顯示。
[0075]相對于傳輸位圖數(shù)據(jù),將編碼后的視頻數(shù)據(jù)發(fā)送給客戶端,可以降低虛擬機(jī)端與客戶端之間的網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。優(yōu)選的,傳輸視頻數(shù)據(jù)采用專門的視頻通道傳輸?shù)娇蛻舳?,并通過虛擬桌面顯示系統(tǒng)中的顯示代理程序?qū)⒕幋a后的視頻數(shù)據(jù)發(fā)送給客戶端。
[0076]本實(shí)施例通過監(jiān)聽虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù),來獲取虛擬機(jī)桌面顯示的數(shù)據(jù),從而省去了通過操作數(shù)據(jù)在虛擬機(jī)內(nèi)顯示再截屏的步驟,提高了虛擬機(jī)桌面顯示的效率。同時(shí),將視頻數(shù)據(jù)進(jìn)行編碼后發(fā)送給客戶端,降低了虛擬機(jī)端與客戶端之間網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。
[0077]參照圖3,圖3為本發(fā)明虛擬機(jī)桌面顯示方法的第二實(shí)施例的流程示意圖?;谏鲜鎏摂M機(jī)桌面顯示方法的第一實(shí)施例,所述步驟SlO之后,還包括:
[0078]步驟S50,當(dāng)所述操作數(shù)據(jù)為圖形操作指令時(shí),將所述圖形操作指令轉(zhuǎn)換為可被客戶端識(shí)別的圖形指令;
[0079]監(jiān)聽并獲取虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù),所述虛擬機(jī)操作系統(tǒng)內(nèi)操作虛擬機(jī)桌面變化的操作數(shù)據(jù)可以為圖形操作指令,也可以是位圖數(shù)據(jù)。在獲取了所述操作數(shù)據(jù)之后,對所述操作數(shù)據(jù)進(jìn)行分類,若所述操作指令為圖形操作指令時(shí),將所述圖形操作指令轉(zhuǎn)換為可被客戶端識(shí)別的圖形指令。優(yōu)選的,對所述操作數(shù)據(jù)進(jìn)行分類,并將所述圖形操作指令轉(zhuǎn)換為可被客戶端識(shí)別的圖形指令的過程,可以在虛擬桌面顯示系統(tǒng)的顯示驅(qū)動(dòng)程序中完成,所述顯示驅(qū)動(dòng)程序?qū)λ鰣D形操作指令轉(zhuǎn)換為圖形指令后,將所述圖形指令發(fā)送給顯示代理程序,由所述顯示代理程序發(fā)送給客戶端。
[0080]步驟S60,將所述圖形指令發(fā)送給客戶端,由客戶端還原為桌面數(shù)據(jù)并顯示。
[0081]相對于將圖形操作指令在虛擬機(jī)內(nèi)顯示,并通過截取屏幕圖