一種屏幕鏡像實(shí)現(xiàn)方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電子技術(shù)領(lǐng)域,尤其涉及一種屏幕鏡像實(shí)現(xiàn)方法和系統(tǒng)。
【背景技術(shù)】
[0002]屏幕鏡像技術(shù)是指源端設(shè)備將其當(dāng)前屏幕中的圖像發(fā)送給鏡像端設(shè)備,通過鏡像端設(shè)備對源端設(shè)備的屏幕顯示內(nèi)容進(jìn)行重現(xiàn)的技術(shù)。當(dāng)顯示器在播放高清視頻影片,動態(tài)視頻的視窗有可能占滿整個顯示屏,也可能只占用顯示屏的一部分,如果只占用顯示器的一部分,則顯示器另一部分顯示靜態(tài)圖像。針對上述應(yīng)用場景,如何把源端設(shè)備的顯示內(nèi)容完整地?zé)o線傳輸并同步到鏡像端顯示器,一直都是業(yè)界頭疼的問題?,F(xiàn)有的屏幕鏡像實(shí)現(xiàn)方法主要為通過直接抓取源設(shè)備顯存中的屏幕顯示內(nèi)容通過實(shí)時傳輸協(xié)議發(fā)送給鏡像端,通過鏡像端將接收到的屏幕顯示內(nèi)容還原為視頻流進(jìn)行展示,其理論上是可以實(shí)現(xiàn)普通視頻流的傳輸,但是對于1080P及以上的高清視頻流,由于傳輸數(shù)據(jù)量大,在規(guī)定的幀頻時間內(nèi),要把源顯示器端的實(shí)時視頻數(shù)據(jù)全部傳輸?shù)界R像顯示器端的難度非常大。如果數(shù)據(jù)在傳輸過程中受到干擾,鏡像端將收到錯誤數(shù)據(jù),然而由于數(shù)據(jù)量大,需要的傳輸時間較長,在鏡像端將收到錯誤數(shù)據(jù)時,源端也不會重發(fā)數(shù)據(jù)(如果重發(fā)會導(dǎo)致時間延遲),從而導(dǎo)致鏡像端顯示的圖像數(shù)據(jù)發(fā)生錯誤,造成高清畫面無法連續(xù)傳輸,影響了畫面的清晰度和完整性,造成畫面卡頓和丟幀等不良現(xiàn)象的發(fā)生。
【發(fā)明內(nèi)容】
[0003]本發(fā)明實(shí)施例的目的在于提供了一種屏幕鏡像實(shí)現(xiàn)方法和系統(tǒng),實(shí)現(xiàn)包含高清動態(tài)視頻的屏幕鏡像傳輸,保證鏡像畫面的清晰度和完整性,減少鏡像端畫面延遲、卡頓和丟幀等不良現(xiàn)象的發(fā)生。
[0004]一方面,本發(fā)明實(shí)施例提供了一種屏幕鏡像實(shí)現(xiàn)方法,包括:
[0005]獲取源端的屏幕顯示內(nèi)容;所述屏幕顯示內(nèi)容包括至少一個動態(tài)視窗,所述動態(tài)視窗為視頻文件的播放窗口;
[0006]獲取所述動態(tài)視窗的位置信息、播放路徑信息、播放狀態(tài)信息和播放進(jìn)度信息;
[0007]根據(jù)所述位置信息,從所述屏幕顯示內(nèi)容中裁去所述動態(tài)視窗,獲得靜態(tài)視窗,并將所述靜態(tài)視窗發(fā)送給鏡像端;
[0008]根據(jù)所述播放路徑信息查找所述視頻文件,并根據(jù)所述播放進(jìn)度信息和預(yù)設(shè)的時間提前量對所述視頻文件進(jìn)行讀取,將讀取的視頻文件緩存至所述鏡像端;
[0009]將所述位置信息、所述播放狀態(tài)信息和所述播放進(jìn)度信息發(fā)送給所述鏡像端;
[0010]通過所述鏡像端對所述靜態(tài)視窗進(jìn)行顯示;同時,根據(jù)所述位置信息、所述播放狀態(tài)信息和所述播放進(jìn)度信息,在所述鏡像端中對所述視頻文件進(jìn)行同步播放。
[0011]在一種優(yōu)選的實(shí)施方式當(dāng)中,所述獲取獲取所述動態(tài)視窗的位置信息、播放路徑信息、播放狀態(tài)信息和播放進(jìn)度信息,具體為:
[0012]通過調(diào)用應(yīng)用程序接口,獲取所述動態(tài)視窗的位置信息、播放路徑信息、播放狀態(tài)信息和播放進(jìn)度信息。
[0013]在另一種優(yōu)選的實(shí)施當(dāng)中,所述獲取獲取所述動態(tài)視窗的位置信息、播放路徑信息、播放狀態(tài)信息和播放進(jìn)度信息,具體為:
[0014]通過調(diào)用應(yīng)用程序接口,獲取所述動態(tài)視窗的位置信息、播放路徑信息,根據(jù)所述播放路徑信息查找所述視頻文件,獲取所述視頻文件的文件索引指針,根據(jù)所述文件索引指針的位置,獲取所述播放進(jìn)度信息,根據(jù)所述文件索引指針的移動速度,獲取所述播放狀態(tài)?目息O
[0015]優(yōu)選地,所述將所述靜態(tài)視窗發(fā)送給鏡像端之前,還包括:
[0016]對所述靜態(tài)視窗進(jìn)行壓縮編碼,采用第一傳輸協(xié)議對壓縮編碼后的靜態(tài)視窗進(jìn)行協(xié)議封裝。
[0017]所述將讀取的視頻文件緩存至所述鏡像端之前,還包括:
[0018]判斷所述視頻文件的格式是否為可被所述鏡像端識別的文件格式;若是,則采用所述第二傳輸協(xié)議對讀取的視頻文件進(jìn)行協(xié)議封裝;若否,則對讀取的視頻文件進(jìn)行格式轉(zhuǎn)換,采用所述第二傳輸協(xié)議對格式轉(zhuǎn)換后的視頻文件進(jìn)行協(xié)議封裝。
[0019]所述將所述位置信息、所述播放狀態(tài)信息和所述播放進(jìn)度信息發(fā)送給所述鏡像端之前,還包括:
[0020]采用第三傳輸協(xié)議對所述位置信息、所述播放狀態(tài)信息和所述播放進(jìn)度信息進(jìn)行協(xié)議封裝。
[0021]其中,所述第一協(xié)議為RTSP協(xié)議,所述第二協(xié)議和所述第三協(xié)議為TCP協(xié)議。
[0022]優(yōu)選地,所述根據(jù)所述位置信息、所述播放狀態(tài)信息和所述播放進(jìn)度信息,在所述鏡像端中對所述視頻文件進(jìn)行同步播放,具體為:
[0023]根據(jù)所述位置信息,設(shè)定所述視頻文件在所述鏡像端中的播放位置;
[0024]根據(jù)所述播放進(jìn)度信息,對所述視頻文件進(jìn)行讀?。?br>[0025]根據(jù)所述播放狀態(tài)信息,對所述視頻文件的播放狀態(tài)進(jìn)行控制。
[0026]優(yōu)選地,根據(jù)所述播放進(jìn)度信息和預(yù)設(shè)的時間提前量對所述視頻文件進(jìn)行讀取,具體為:
[0027]獲取與所述播放進(jìn)度信息對應(yīng)的文件索引指針,從所述文件索引指針開始對所述視頻文件進(jìn)行讀??;
[0028]獲取當(dāng)前的讀取進(jìn)度?目息;
[0029]根據(jù)所述播放進(jìn)度信息和所述讀取進(jìn)度信息,計算所述讀取進(jìn)度信息比所述播放進(jìn)度?目息超前的時間,獲得實(shí)際時間提前量;
[0030]判斷所述實(shí)際時間提前量是否大于或等于所述預(yù)設(shè)的時間提前量;
[0031]若所述實(shí)際時間提前量小于所述預(yù)設(shè)的時間提前量,則繼續(xù)對所述視頻文件進(jìn)行讀?。?br>[0032]若所述實(shí)際時間提前量大于或等于所述預(yù)設(shè)的時間提前量,則暫停對所述視頻文件進(jìn)行讀取。
[0033]另一方面,本發(fā)明實(shí)施例提供了一種屏幕鏡像實(shí)現(xiàn)系統(tǒng),包括源端和鏡像端;
[0034]所述源端包括:
[0035]顯示內(nèi)容獲取單元,用于獲取源端的屏幕顯示內(nèi)容;所述屏幕顯示內(nèi)容包括至少一個動態(tài)視窗,所述動態(tài)視窗為視頻文件的播放窗口 ;
[0036]狀態(tài)信息獲取單元,用于調(diào)用應(yīng)用程序接口獲得所述動態(tài)視窗的位置信息、播放路徑信息、播放狀態(tài)信息和播放進(jìn)度信息;
[0037]第一線程單元,用于根據(jù)所述位置信息,從所述屏幕顯示內(nèi)容中裁去所述動態(tài)視窗,獲得靜態(tài)視窗,并將所述靜態(tài)視窗發(fā)送給所述鏡像端;
[0038]第二線程單元,用于根據(jù)所述播放路徑信息查找所述視頻文件,并根據(jù)所述播放進(jìn)度信息和預(yù)設(shè)的時間提前量對所述視頻文件進(jìn)行讀取,將讀取的視頻文件緩存至所述鏡像端;
[0039]第三線程單元,用于將所述位置信息、所述播放狀態(tài)信息和所述播放進(jìn)度信息發(fā)送給所述鏡像端;
[0040]所述鏡像端包括:
[0041]靜態(tài)視窗顯示單元,用于對所述靜態(tài)視窗進(jìn)行顯示;
[0042]動態(tài)視窗顯示單元,用于根據(jù)所述位置信息、所述播放狀態(tài)信息和所述播放進(jìn)度信息,對所述視頻文件進(jìn)行同步播放。
[0043]優(yōu)選地,所述動態(tài)視窗顯示單元具體用于:
[0044]根據(jù)所述位置信息,設(shè)定所述視頻文件的播放位置;
[0045]根據(jù)所述播放進(jìn)度信息,對所述視頻文件進(jìn)行讀??;
[0046]根據(jù)所述播放狀態(tài)信息,對所述視頻文件的播放狀態(tài)進(jìn)行控制。
[0047]優(yōu)選地,所述第三線程單元具體用于:
[0048]獲取與所述播放進(jìn)度信息對應(yīng)的文件索引指針,從所述文件索引指針開始對所述視頻文件進(jìn)行讀??;
[0049]獲取當(dāng)前的讀取進(jìn)度?目息;
[0050]根據(jù)所述播放進(jìn)度信息和所述讀取進(jìn)度信息,計算所述讀取進(jìn)度信息比所述播放進(jìn)度?目息超前的時間,獲得實(shí)際時間提前量;
[0051]判斷所述實(shí)際時間提前量是否大于或等于所述預(yù)設(shè)的時間提前量;
[0052]若所述實(shí)際時間提前量小于所述預(yù)設(shè)的時間提前量,則繼續(xù)對所述視頻文件進(jìn)行讀?。?br>[0053]若所述實(shí)際時間提前量大于或等于所述預(yù)設(shè)的時間提前量,則暫停對所述視頻文件進(jìn)行讀取。
[0054]本發(fā)明實(shí)施例提供的屏幕鏡像實(shí)現(xiàn)方法和系