一種基于Spice和內(nèi)存共享的視頻播放方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及桌面虛擬化協(xié)議下的視頻下載播放方法,尤其涉及一種基于Spice和內(nèi)存共享的視頻播放方法。
【背景技術(shù)】
[0002]Spice (Simple Protocol for Independent Computing Environment)是一個(gè)完全開源的桌面服務(wù)展示協(xié)議,也是提供遠(yuǎn)程桌面體驗(yàn)的一個(gè)桌面虛擬化框架,通過Spice可使客戶端像使用本地計(jì)算機(jī)一樣訪問遠(yuǎn)程機(jī)器桌面和設(shè)備,從而把CPU、GPU等密集型的工作從客戶端移交給遠(yuǎn)程高性能機(jī)器。Spice由三個(gè)基本部分組成:Spice Server、SpiceClient和Spice協(xié)議,Spice Server支持Spice協(xié)議,代指安裝spice_server的服務(wù)器,Spice Client支持Spice協(xié)議,代指安裝spice_client的客戶端。服務(wù)器和客戶端之間通過Spice協(xié)議進(jìn)行通信,兩者對(duì)應(yīng)設(shè)有多個(gè)通道,分別實(shí)現(xiàn)不同的功能。
[0003]當(dāng)Spice Client申請(qǐng)連接到Spice Server上點(diǎn)播視頻時(shí),Spice Server首先生成一個(gè)虛擬機(jī)VM,并將虛擬機(jī)VM的桌面通過編碼傳遞給Spice Client,Spice Client解碼后利用虛擬顯卡VGPA將虛擬機(jī)VM的桌面在其屏幕上顯示出來。但是目前來說,很多使用Spice的公司或者客戶其自身客戶端安裝的物理顯卡就完全具備解碼播放高清圖片及視頻的能力,因此在播放視頻時(shí)完全不需要經(jīng)過Spice Server。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提供一種基于Spice和內(nèi)存共享的視頻播放方法,能夠根據(jù)Spice Client端本身物理顯卡的播放能力,恰當(dāng)選擇不同的視頻傳輸及播放方式,有效提高了客戶端請(qǐng)求視頻播放的速率,且減輕了 Spice Server的負(fù)載。
[0005]為實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:
一種基于Spice和內(nèi)存共享的視頻播放方法,包括以下步驟:
步驟一、將Spice Server和所有的Spice Client配置成為一個(gè)集群,把該集群內(nèi)的所有物理內(nèi)存通過邏輯擴(kuò)展成為一個(gè)總的地址空間,在總的地址空間上建立動(dòng)態(tài)內(nèi)存池,并通過修改虛擬機(jī)監(jiān)視器VMM向上層應(yīng)用程序提供一個(gè)統(tǒng)一的內(nèi)存管理接口 ;
步驟二、Spice Client向Spice Server發(fā)送申請(qǐng)播放視頻的請(qǐng)求,Spice Server接收到請(qǐng)求后判斷Spice Client的物理顯卡是否具有解碼播放該視頻的能力,若沒有解碼播放能力,則進(jìn)入步驟三,若有解碼播放能力,則進(jìn)入步驟四;
步驟三、Spice Server利用Spice協(xié)議將Spice Client申請(qǐng)播放的視頻處理為一幀一幀的圖像,通過MJPEG算法壓縮后由Spice Server發(fā)送到Spice Client進(jìn)行解壓播放;步驟四、Spice Client向HTTP網(wǎng)站發(fā)送請(qǐng)求建立連接,集群中的Spice Server從動(dòng)態(tài)內(nèi)存池中為Spice Client分配物理內(nèi)存,HTTP網(wǎng)站通過RTMFP協(xié)議將視頻直接下載到Spice Client被分配的物理內(nèi)存中,Spice Server生成的虛擬機(jī)VM找到該物理內(nèi)存并調(diào)用自身播放器或者視頻網(wǎng)頁上的Flash插件,結(jié)合Spice Client的物理顯卡播放視頻。
[0006]所述集群內(nèi)的Spice Server作為內(nèi)存服務(wù)器,在內(nèi)存頁面中為每個(gè)Spice Client定義了唯一的server_ID,Spice Server從動(dòng)態(tài)內(nèi)存池中為Spice Client分配物理內(nèi)存時(shí),Spice Client首先將分配到的內(nèi)存頁面里的server_ID與自身的server_ID相比較,若兩者相同則訪問自身物理內(nèi)存,若兩者不同則將內(nèi)存頁面里的server_ID提交給SpiceServer,通過Spice Server中保存的地址映射表查找動(dòng)態(tài)內(nèi)存池,獲得Spice Client所要訪問內(nèi)存的物理地址并訪問該內(nèi)存。
[0007]所述的Spice Client與HTTP網(wǎng)站建立連接的過程如下:Spice Client向HTTP網(wǎng)站發(fā)送申請(qǐng)建立連接的請(qǐng)求,HTTP網(wǎng)站接收到請(qǐng)求后向Spice Server發(fā)送握手請(qǐng)求數(shù)據(jù)包,Spice Server向Spice Client轉(zhuǎn)發(fā)接收到的握手請(qǐng)求數(shù)據(jù)包,Spice Client接收到握手請(qǐng)求數(shù)據(jù)包后向HTTP網(wǎng)站發(fā)送響應(yīng)數(shù)據(jù)包,HTTP網(wǎng)站接收到響應(yīng)數(shù)據(jù)包后與SpiceClient建立連接進(jìn)行通信。
[0008]本發(fā)明在Spice服務(wù)的基礎(chǔ)上,為Spice Client請(qǐng)求視頻播放提供了兩種方式:首先將Spice Server和所有的Spice Client配置成為一個(gè)集群,把集群內(nèi)的所有物理內(nèi)存擴(kuò)展為動(dòng)態(tài)內(nèi)存池,Spice Server在集群中充當(dāng)內(nèi)存服務(wù)器。當(dāng)客戶端的物理顯卡不具備解碼播放視頻的能力時(shí),采用Spice服務(wù)常規(guī)的視頻傳輸播放方法;當(dāng)客戶端的物理顯卡具備解碼播放視頻的能力時(shí),由Spice Server從動(dòng)態(tài)內(nèi)存池中為該客戶端分配指定內(nèi)存,該客戶端與HTTP網(wǎng)站建立連接后將視頻直接下載到指定內(nèi)存中,Spice Server生成的虛擬機(jī)VM調(diào)用自身播放器或者視頻網(wǎng)頁上的Flash插件,結(jié)合客戶端的物理顯卡播放視頻,該過程不需要Spice Server對(duì)視頻流數(shù)據(jù)進(jìn)行解碼,并根據(jù)spice協(xié)議重新進(jìn)行編碼、壓縮后傳輸?shù)絊pice Client,縮短了客戶端播放視頻時(shí)的時(shí)延,并減輕了服務(wù)器的負(fù)載。
【附圖說明】
[0009]圖1為本發(fā)明的流程示意圖。
【具體實(shí)施方式】
[0010]如圖1所示,本發(fā)明所述的一種基于Spice和內(nèi)存共享的視頻播放方法,包括以下步驟:
步驟一、將Spice Server和所有的Spice Client配置成為一個(gè)集群,把該集群內(nèi)的所有物理內(nèi)存通過邏輯擴(kuò)展成為一個(gè)總的動(dòng)態(tài)內(nèi)存池,并通過修改虛擬機(jī)監(jiān)視器VMM向上層應(yīng)用程序提供一個(gè)統(tǒng)一的內(nèi)存管理接口。
[0011]集群內(nèi)各Spice Client節(jié)點(diǎn)均作為內(nèi)存客戶端,而Spice Server既同其他SpiceClient節(jié)點(diǎn)一樣作為內(nèi)存客戶端,可用來提供內(nèi)存,同時(shí)又作為內(nèi)存服務(wù)器,用來分配其他內(nèi)存客戶端之間的內(nèi)存并均衡負(fù)載。當(dāng)虛擬機(jī)VM需要內(nèi)存時(shí),需向內(nèi)存服務(wù)器申請(qǐng)內(nèi)存,內(nèi)存服務(wù)器通過遠(yuǎn)程系統(tǒng)調(diào)用向內(nèi)存客戶端發(fā)起內(nèi)存的分配操作,為虛擬機(jī)VM提供存儲(chǔ)服務(wù)。為了區(qū)分集群中各內(nèi)存客戶端節(jié)點(diǎn)之間的內(nèi)存,Spice Server作為內(nèi)存服務(wù)器,在內(nèi)存頁面中為每個(gè)Spice Client定義了唯一的server_ID,作為其在集群中的標(biāo)志。內(nèi)存服務(wù)器會(huì)根據(jù)調(diào)用虛擬機(jī)VM的Spice Client的IP地址動(dòng)態(tài)