本發(fā)明涉及網(wǎng)絡(luò)直播領(lǐng)域,尤其涉及一種視頻流地址鑒權(quán)方法及裝置。
背景技術(shù):
目前,網(wǎng)絡(luò)直播是利用互聯(lián)網(wǎng)及流媒體技術(shù)進(jìn)行視頻直播,然而視頻內(nèi)容的提供方存在視頻流地址被第三方平臺(tái)獲取,從而可以不通過(guò)直播網(wǎng)站直接觀看視頻,即繞過(guò)了直播網(wǎng)站的視頻播放器提供的視頻播放。從而對(duì)于視頻網(wǎng)站減少了網(wǎng)站的流量。
目前存在一些黑客通過(guò)逆向調(diào)試分析直播平臺(tái)的視頻流地址的鑒權(quán)函數(shù),從而可以破解出如何生成視頻流地址的函數(shù),最終繞過(guò)了平臺(tái)的檢測(cè),以能夠不通過(guò)直播網(wǎng)站就直接觀看視頻,可見(jiàn),現(xiàn)有視頻流地址鑒權(quán)的可靠性較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例通過(guò)提供一種視頻流地址鑒權(quán)方法及裝置,解決的技術(shù)問(wèn)題為:現(xiàn)有視頻流地址鑒權(quán)的可靠性較低。
第一方面,本發(fā)明實(shí)施例提供了一種視頻流地址鑒權(quán)方法,應(yīng)用于直播客戶端,所述方法包括:
如果接收到對(duì)目標(biāo)直播房間的視頻觀看指令,通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,其中,所述目標(biāo)底層庫(kù)函數(shù)為所述直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù);
讀取m個(gè)鑒權(quán)要素,所述m個(gè)鑒權(quán)要素均與所述直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù);
將所述調(diào)用堆棧信息和所述m個(gè)鑒權(quán)要素經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與所述調(diào)用堆棧信息和所述m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值;
將攜帶有所述視頻流地址鑒權(quán)key值和所述m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求發(fā)送給所述視頻流服務(wù)器,所述視頻流地址請(qǐng)求用于向所述視頻流服務(wù)器請(qǐng)求所述目標(biāo)直播房間的視頻流地址。
可選的,在所述將攜帶有所述視頻流地址鑒權(quán)key值和所述m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求發(fā)送給所述視頻流服務(wù)器之前,所述方法還包括:
將所述調(diào)用堆棧信息發(fā)送給所述視頻流服務(wù)器。
可選的,所述讀取m個(gè)鑒權(quán)要素,包括:
讀取所述直播客戶端本次登陸所述直播平臺(tái)時(shí),從所述視頻流服務(wù)器所獲取的令牌;和
讀取所述直播客戶端當(dāng)前的系統(tǒng)時(shí)間;和
讀取所述直播客戶端當(dāng)前進(jìn)入的所述目標(biāo)直播房間的房間id;和
讀取所述直播客戶端當(dāng)前的ip地址;和
讀取所述直播客戶端的設(shè)備唯一id。
可選的,所述通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,包括:
獲取所述操作系統(tǒng)中系統(tǒng)庫(kù)的句柄;
通過(guò)所述操作系統(tǒng)中系統(tǒng)庫(kù)的句柄,獲取與所述調(diào)用堆棧信息相關(guān)的n個(gè)底層庫(kù)函數(shù),n為正整數(shù);
調(diào)用所述n個(gè)底層庫(kù)函數(shù),以獲取所述調(diào)用堆棧信息。
可選的,與所述調(diào)用堆棧信息相關(guān)的n個(gè)底層庫(kù)函數(shù),包括:
用于獲取所述調(diào)用堆棧信息的內(nèi)存地址的函數(shù),和
用于通過(guò)所述內(nèi)存地址從所述調(diào)用堆棧信息中獲取所述函數(shù)標(biāo)識(shí)的函數(shù),和
用于對(duì)獲取所述函數(shù)標(biāo)識(shí)的句柄進(jìn)行釋放的函數(shù)。
第二方面,本發(fā)明實(shí)施例提供了一種視頻流地址鑒權(quán)方法,應(yīng)用于視頻流服務(wù)器,所述方法包括:
如果接收到來(lái)自待鑒直播客戶端的攜帶有視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求,從所述視頻流地址請(qǐng)求中獲取所述視頻流地址鑒權(quán)key值和所述m個(gè)鑒權(quán)要素,其中,所述m個(gè)鑒權(quán)要素均與所述直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù);
將所述m個(gè)鑒權(quán)要素與調(diào)用堆棧信息經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與所述調(diào)用堆棧信息和所述m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值,其中,所述調(diào)用堆棧信息為所述直播客戶端在已經(jīng)登錄到直播平臺(tái)之后通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取并發(fā)送給所述視頻流服務(wù)器的,所述目標(biāo)底層庫(kù)函數(shù)為所述直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù),所述調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí);
將從所述視頻流請(qǐng)求中獲取的視頻流地址鑒權(quán)key值與所述視頻流服務(wù)器生成的視頻流地址鑒權(quán)key值進(jìn)行對(duì)比;
如果對(duì)比結(jié)果為一致,向所述待鑒直播客戶端下發(fā)所述視頻流地址請(qǐng)求中所請(qǐng)求的視頻流地址。
第三方面,本發(fā)明實(shí)施例提供了一種視頻流地址鑒權(quán)裝置,應(yīng)用于直播客戶端,所述裝置包括:
堆棧信息獲取單元,用于如果接收到對(duì)目標(biāo)直播房間的視頻觀看指令,通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,其中,所述調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí),所述目標(biāo)底層庫(kù)函數(shù)為所述直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù);
鑒權(quán)要素讀取單元,用于讀取m個(gè)鑒權(quán)要素,所述m個(gè)鑒權(quán)要素與所述直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù);
鑒權(quán)處理單元,用于將所述調(diào)用堆棧信息和所述m個(gè)鑒權(quán)要素經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與所述調(diào)用堆棧信息和所述m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值;
請(qǐng)求發(fā)送單元,用于將攜帶有所述視頻流地址鑒權(quán)key值和所述m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求發(fā)送給所述視頻流服務(wù)器,所述視頻流地址請(qǐng)求用于向所述視頻流服務(wù)器請(qǐng)求所述目標(biāo)直播房間的視頻流地址。
可選的,所述裝置還包括:
堆棧信息發(fā)送單元,用于將所述調(diào)用堆棧信息發(fā)送給所述視頻流服務(wù)器。
可選的,所述鑒權(quán)要素讀取單元,具體用于:
讀取所述直播客戶端本次登陸所述直播平臺(tái)時(shí),從所述視頻流服務(wù)器所獲取的令牌;和
讀取所述直播客戶端當(dāng)前的系統(tǒng)時(shí)間;和
讀取所述直播客戶端當(dāng)前進(jìn)入的所述目標(biāo)直播房間的房間id;和
讀取所述直播客戶端當(dāng)前的ip地址;和
讀取所述直播客戶端的設(shè)備唯一id。
可選的,所述堆棧信息獲取單元,具體用于:
獲取所述操作系統(tǒng)中系統(tǒng)庫(kù)的句柄;
通過(guò)所述操作系統(tǒng)中系統(tǒng)庫(kù)的句柄,獲取與所述調(diào)用堆棧信息相關(guān)的n個(gè)底層庫(kù)函數(shù),n為正整數(shù);
調(diào)用所述n個(gè)底層庫(kù)函數(shù),以獲取所述調(diào)用堆棧信息。
第四方面,本發(fā)明實(shí)施例提供了一種視頻流地址鑒權(quán)裝置,應(yīng)用于視頻流服務(wù)器,所述裝置包括:
請(qǐng)求接收單元,用于如果接收到來(lái)自待鑒直播客戶端的攜帶有視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求,從所述視頻流地址請(qǐng)求中獲取所述視頻流地址鑒權(quán)key值和所述m個(gè)鑒權(quán)要素,其中,所述m個(gè)鑒權(quán)要素均與直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù);
鑒權(quán)處理單元,用于將所述m個(gè)鑒權(quán)要素與調(diào)用堆棧信息經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與所述調(diào)用堆棧信息和所述m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值,其中,所述調(diào)用堆棧信息為所述直播客戶端在已經(jīng)登錄到直播平臺(tái)之后通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取并發(fā)送給所述視頻流服務(wù)器的,所述目標(biāo)底層庫(kù)函數(shù)為所述直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù),所述調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí);
key值對(duì)比單元,將從所述視頻流請(qǐng)求中獲取的視頻流地址鑒權(quán)key值與所述視頻流服務(wù)器生成的視頻流地址鑒權(quán)key值進(jìn)行對(duì)比;
地址下發(fā)單元,用于如果對(duì)比結(jié)果為一致,向所述待鑒直播客戶端下發(fā)所述視頻流地址請(qǐng)求中所請(qǐng)求的視頻流地址。
第五方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)第一方面任一實(shí)施方式所述的步驟。
第六方面,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)設(shè)備,包括存儲(chǔ)器、處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)第一方面中任一實(shí)施方式所述的步驟。
本發(fā)明實(shí)施例中的技術(shù)方案,通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,將調(diào)用堆棧信息和各個(gè)鑒權(quán)要素經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和各個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值,從而調(diào)用堆棧信息成為了視頻流地址鑒權(quán)key值的一部分,使得:非法的直播客戶端即使調(diào)用了相同的視頻流地址鑒權(quán)算法,所用的調(diào)用堆棧信息與正確的直播客戶端所用的調(diào)用堆棧信息也是不一致的,進(jìn)而使得視頻流服務(wù)器可以準(zhǔn)確判斷直播客戶端是否偽造了視頻流地址鑒權(quán)key值,從而本發(fā)明能夠避免視頻流地址被非法獲取,提高了視頻流地址鑒權(quán)的可靠性。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的應(yīng)用于直播客戶端的視頻流地址鑒權(quán)方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的應(yīng)用于視頻流服務(wù)器的側(cè)視頻流地址鑒權(quán)方法的流程圖;
圖3為本發(fā)明實(shí)施例提供的應(yīng)用于直播客戶端的視頻流地址鑒權(quán)裝置的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實(shí)施例提供的應(yīng)用于視頻流服務(wù)器的視頻流地址鑒權(quán)裝置的結(jié)構(gòu)示意圖;
圖5為本發(fā)明實(shí)施例提供的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例提供的計(jì)算機(jī)設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例通過(guò)提供一種視頻流地址鑒權(quán)方法及裝置,解決了現(xiàn)有視頻流地址鑒權(quán)的可靠性較低的技術(shù)問(wèn)題。
為了解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供的技術(shù)方案,總體思路如下:
如果接收到對(duì)目標(biāo)直播房間的視頻觀看指令,通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,其中,調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí),目標(biāo)底層庫(kù)函數(shù)為直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù);讀取m個(gè)鑒權(quán)要素,m個(gè)鑒權(quán)要素均與直播客戶端當(dāng)前的狀態(tài)相關(guān),將調(diào)用堆棧信息和m個(gè)鑒權(quán)要素經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值;將攜帶有視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求發(fā)送給視頻流服務(wù)器。
通過(guò)上述技術(shù)方案,生成同時(shí)與調(diào)用堆棧信息和m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值,使得調(diào)用堆棧信息成為了視頻流地址鑒權(quán)key值的一部分。而通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取的調(diào)用堆棧是固定的,視頻流服務(wù)器是可以預(yù)先獲知,從而直播客戶端在發(fā)送視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的同時(shí)不需要發(fā)送調(diào)用堆棧信息到視頻流服務(wù)器,則調(diào)用堆棧信息不會(huì)同時(shí)與視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素出現(xiàn)在網(wǎng)絡(luò)中,從而可以保證調(diào)用堆棧信息不被泄露,使得,非法的直播客戶端即使調(diào)用了相同的視頻流地址鑒權(quán)算法,所用的調(diào)用堆棧信息與正確直播客戶端所用調(diào)用堆棧信息也不會(huì)一致,進(jìn)而視頻流服務(wù)器可以準(zhǔn)確判斷的直播客戶端是否偽造了鑒權(quán)key值,從而本發(fā)明能夠避免視頻流地址被非法獲取,提高了視頻流地址鑒權(quán)的可靠性。
為了更好的理解上述技術(shù)方案,下面將結(jié)合說(shuō)明書(shū)附圖以及具體的實(shí)施方式對(duì)上述技術(shù)方案進(jìn)行詳細(xì)的說(shuō)明。
本發(fā)明實(shí)施例提供的視頻流地址鑒權(quán)方法,應(yīng)用于直播客戶端。參考圖1所示,該視頻流地址鑒權(quán)方法包括如下步驟:
s101、如果接收到對(duì)目標(biāo)直播房間的視頻觀看指令,通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,其中,調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí),目標(biāo)底層庫(kù)函數(shù)為直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù)。
具體的,函數(shù)標(biāo)識(shí)可以為符號(hào)名稱。
需要說(shuō)明的是,在本實(shí)施例中,視頻觀看指令可以為觀眾對(duì)目標(biāo)直播房間進(jìn)行點(diǎn)擊時(shí)生成的,進(jìn)而以使直播客戶端能夠進(jìn)入目標(biāo)直播房間。
本實(shí)施例中,目標(biāo)直播房間可以為直播平臺(tái)上任一正在進(jìn)行網(wǎng)絡(luò)視頻直播的房間,基于觀眾的點(diǎn)擊操作生成進(jìn)入目標(biāo)直播房間的視頻觀看指令。
需要說(shuō)明的是,在本實(shí)施例中的操作系統(tǒng)為安卓(android)。android提供的用于獲取調(diào)用堆棧信息的函數(shù),所獲取的調(diào)用堆棧信息易于被黑客修改,而在本實(shí)施例中,通過(guò)調(diào)用android系統(tǒng)的底層庫(kù)函數(shù)來(lái)獲取調(diào)用堆棧信息,使得不會(huì)被黑客所侵入而修改堆棧信息,從而獲取的調(diào)用堆棧信息更為安全和準(zhǔn)確。
在一實(shí)施例中,s101的實(shí)施流程包括如下步驟s1011~s1014,以確保獲取的調(diào)用堆棧信息準(zhǔn)確。
執(zhí)行s1011、獲取操作系統(tǒng)中系統(tǒng)庫(kù)的句柄。
在s1011之后,接著執(zhí)行s1012:通過(guò)操作系統(tǒng)中系統(tǒng)庫(kù)的句柄,獲取與調(diào)用堆棧信息相關(guān)的n個(gè)底層庫(kù)函數(shù),n為正整數(shù)。
s1011~s1012的具體實(shí)現(xiàn)過(guò)程具體為:獲取庫(kù)libcorkscrew.so的句柄,具體實(shí)現(xiàn)方式如下:
ghandle=dlopen("/system/lib/libcorkscrew.so",rtld_now)
其中,調(diào)用系統(tǒng)函數(shù)dlopen來(lái)獲取庫(kù)libcorkscrew.so的句柄,返回值ghandle就是庫(kù)libcorkscrew.so對(duì)應(yīng)的句柄。
繼而獲取庫(kù)libcorkscrew.so中提供的用于獲取調(diào)用堆棧信息的n個(gè)底層庫(kù)函數(shù)。
具體的,獲取的n個(gè)底層庫(kù)函數(shù),包括:用于獲取調(diào)用堆棧信息的內(nèi)存地址的函數(shù):“unwind_backtrace”,還包括:用于通過(guò)內(nèi)存地址從調(diào)用堆棧信息中獲取函數(shù)標(biāo)識(shí)的函數(shù):“get_backtrace_symbols”,還包括:用于對(duì)獲取函數(shù)標(biāo)識(shí)的句柄進(jìn)行釋放的函數(shù):“free_backtrace_symbols”。
首先,通過(guò)第一次調(diào)用系統(tǒng)函數(shù)dlsym,獲取庫(kù)libcorkscrew.so提供的“unwind_backtrace”函數(shù)的函數(shù)指針,其具體實(shí)現(xiàn)如下:
punwind_backtrace=dlsym(ghandle,“unwind_backtrace”);
具體的,“unwind_backtrace”函數(shù)能夠獲取調(diào)用堆棧中被調(diào)用函數(shù)的內(nèi)存地址、以及無(wú)函數(shù)的符號(hào)名稱。
接著,通過(guò)第二次調(diào)用系統(tǒng)函數(shù)dlsym,以獲取庫(kù)libcorkscrew.so提供的“get_backtrace_symbols”函數(shù)的函數(shù)指針,其具體實(shí)現(xiàn)可以如下:
pbacktrace_symbols=dlsym(ghandle,"get_backtrace_symbols")
再接著,通過(guò)第三次調(diào)用系統(tǒng)函數(shù)dlsym,以獲取庫(kù)libcorkscrew.so提供的“free_backtrace_symbols”函數(shù)的函數(shù)指針,其具體實(shí)現(xiàn)可以如下:
pfree_backtrace_symbols=dlsym(ghandle,"free_backtrace_symbols");
在經(jīng)s1012獲取n個(gè)底層庫(kù)函數(shù)之后,接著執(zhí)行s1013、調(diào)用n個(gè)底層庫(kù)函數(shù),以獲取調(diào)用堆棧信息。
具體的,結(jié)合s1012中的一具體實(shí)施例,在s1013中,調(diào)用s1012獲取的“unwind_backtrace”函數(shù)來(lái)獲取調(diào)用堆棧中被調(diào)用函數(shù)的內(nèi)存地址,具體實(shí)現(xiàn)可以如下:
count=punwind_backtrace(mstack,1,max_depth);
其中,參數(shù)mstack是用于存儲(chǔ)被調(diào)用函數(shù)的內(nèi)存地址,參數(shù)max_depth標(biāo)示獲取的調(diào)用堆棧(mstack)的層數(shù)。返回值count標(biāo)示獲取內(nèi)存地址的個(gè)數(shù)。
通過(guò)s1012獲取的函數(shù)"get_backtrace_symbols",以獲取被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí),如:函數(shù)名稱。具體實(shí)現(xiàn)可以如下:
pbacktrace_symbols(mstack,count,symbols);
此函數(shù)的調(diào)用將獲取內(nèi)存地址轉(zhuǎn)化成具體的函數(shù)名稱,從而通過(guò)函數(shù)名稱知道具體調(diào)用了什么函數(shù)。
s102:讀取m個(gè)鑒權(quán)要素,m個(gè)鑒權(quán)要素與直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù)。
具體的,在讀取的m個(gè)鑒權(quán)要素中,與直播客戶端當(dāng)前的狀態(tài)相關(guān)的鑒權(quán)要素包括:直播客戶端當(dāng)前的系統(tǒng)時(shí)間(time)、直播客戶端當(dāng)前的ip地址、直播客戶端的設(shè)備唯一id、直播客戶端本次登陸直播平臺(tái)時(shí)從視頻流服務(wù)器所獲取的令牌(tocken)、直播客戶端當(dāng)前進(jìn)入的目標(biāo)直播房間的房間id。
需要說(shuō)明的是,在具體實(shí)施過(guò)程中,s102和s103為獨(dú)立執(zhí)行的步驟,本發(fā)明不限定兩者執(zhí)行的先后順序。
s103、將調(diào)用堆棧信息和m個(gè)鑒權(quán)要素經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值。
在直播客戶端,可以通過(guò)md5函數(shù)但是不限于md5函數(shù),將直播客戶端當(dāng)前的系統(tǒng)時(shí)間(time)、直播客戶端當(dāng)前的ip地址(ip)、直播客戶端的設(shè)備唯一id(id)、直播客戶端本次登陸直播平臺(tái)時(shí)從視頻流服務(wù)器所獲取的令牌(tocken)、目標(biāo)直播房間的房間id(roomid)和調(diào)用堆棧(callstack)信息一起經(jīng)過(guò)通過(guò)md5函數(shù)計(jì)算出一個(gè)hash值,作為上報(bào)給視頻流服務(wù)器的視頻流地址鑒權(quán)key值。通過(guò)md5函數(shù)實(shí)現(xiàn)的方式可以如下:
key=md5.create(tocken+time+ip+id+roomid+callstack)
s104、將攜帶有視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求發(fā)送給視頻流服務(wù)器,視頻流地址請(qǐng)求用于向視頻流服務(wù)器請(qǐng)求目標(biāo)直播房間的視頻流地址。
需要強(qiáng)調(diào)的是,在s105中不發(fā)送調(diào)用堆棧信息。其中,由于通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取的調(diào)用堆棧是固定的,可以通過(guò)直播客戶端在s105之前,將該調(diào)用堆棧信息發(fā)送給視頻流服務(wù)器。從而在發(fā)送視頻流地址請(qǐng)求中不攜帶調(diào)用堆棧信息。
則調(diào)用堆棧信息不會(huì)與視頻流地址鑒權(quán)key值同時(shí)出現(xiàn)在網(wǎng)絡(luò)中,從而可以保證調(diào)用堆棧callstack信息的安全性,不被泄露。
在具體實(shí)施過(guò)程中,將調(diào)用堆棧信息發(fā)送給視頻流服務(wù)器,可以是在直播客戶端接收到對(duì)目標(biāo)直播房間的視頻觀看指令并通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息時(shí),也可以是在s101之前獲取的調(diào)用堆棧信息并發(fā)送給視頻流服務(wù)器。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供了一種視頻流地址鑒權(quán)方法,應(yīng)用于視頻流服務(wù)器。參考圖2所示,本實(shí)施例中應(yīng)用于視頻流服務(wù)器的視頻流地址鑒權(quán)方法包括如下步驟:
s201、如果接收到來(lái)自待鑒直播客戶端的攜帶有視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求,從視頻流地址請(qǐng)求中獲取所述視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素,其中,m個(gè)鑒權(quán)要素均與直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù);
s202、將m個(gè)鑒權(quán)要素與調(diào)用堆棧信息經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值,其中,調(diào)用堆棧信息為直播客戶端在已經(jīng)登錄到直播平臺(tái)之后通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取并發(fā)送給視頻流服務(wù)器的,目標(biāo)底層庫(kù)函數(shù)為直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù),調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí);
s203、將從視頻流請(qǐng)求中獲取的視頻流地址鑒權(quán)key值與視頻流服務(wù)器生成的視頻流地址鑒權(quán)key值進(jìn)行對(duì)比;
s204、如果對(duì)比結(jié)果為一致,向待鑒直播客戶端下發(fā)視頻流地址請(qǐng)求中所請(qǐng)求的視頻流地址,如果對(duì)比結(jié)果為不一致,則視頻流服務(wù)器拒絕待鑒直播客戶端的視頻流地址請(qǐng)求。
通過(guò)本實(shí)施例,如果黑客想通過(guò)調(diào)用本文編寫(xiě)的視頻流地址鑒權(quán)算法而繞過(guò)校驗(yàn),那么待鑒直播客戶端獲取的函數(shù)調(diào)用堆棧信息肯定和正常的客戶端獲取調(diào)用堆棧信息是不一致,從而會(huì)導(dǎo)致上報(bào)給視頻流服務(wù)器的視頻流地址鑒權(quán)key值與視頻流服務(wù)器自身生成的不一致,從而視頻流服務(wù)器可以判斷直播客戶端偽造了視頻流地址鑒權(quán)key值。
需要說(shuō)明的是,視頻流服務(wù)器將m個(gè)鑒權(quán)要素與調(diào)用堆棧信息經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值的步驟中,所用的哈希函數(shù)為與發(fā)送該調(diào)用堆棧信息的客戶端所用的哈希函數(shù)為相同的哈希函數(shù)。
通過(guò)本實(shí)施例,相當(dāng)于是對(duì)調(diào)用堆棧信息進(jìn)行了校驗(yàn),即使黑客也調(diào)用了與本文相同的視頻流地址鑒權(quán)方式,所用的調(diào)用堆棧信息也會(huì)和正確的客戶端獲取的調(diào)用堆棧信息不一致,從而導(dǎo)致視頻流服務(wù)器對(duì)接收的視頻流地址鑒權(quán)key值與視頻流服務(wù)器計(jì)算的視頻流地址鑒權(quán)key值對(duì)比結(jié)果不一致,以完全避免非法獲取目標(biāo)直播房間的直播視頻。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供了一種視頻流地址鑒權(quán)裝置,應(yīng)用于直播客戶端,參考圖3所示,本實(shí)施例提供的裝置包括:
堆棧信息獲取單元301,用于如果接收到對(duì)目標(biāo)直播房間的視頻觀看指令,通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,其中,調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí),目標(biāo)底層庫(kù)函數(shù)為直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù);
鑒權(quán)要素讀取單元302,用于讀取m個(gè)鑒權(quán)要素,m個(gè)鑒權(quán)要素與直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù);
鑒權(quán)處理單元303,用于將調(diào)用堆棧信息和m個(gè)鑒權(quán)要素經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值;
請(qǐng)求發(fā)送單元304,用于將攜帶有視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求發(fā)送給視頻流服務(wù)器,視頻流地址請(qǐng)求用于向視頻流服務(wù)器請(qǐng)求目標(biāo)直播房間的視頻流地址。
在一實(shí)施例中,該裝置還包括:
堆棧信息發(fā)送單元,用于將調(diào)用堆棧信息發(fā)送給視頻流服務(wù)器。
可選的,鑒權(quán)要素讀取單元302,具體用于:
讀取直播客戶端本次登陸直播平臺(tái)時(shí),從視頻流服務(wù)器所獲取的令牌;和
讀取直播客戶端當(dāng)前的系統(tǒng)時(shí)間;和
讀取直播客戶端當(dāng)前進(jìn)入的目標(biāo)直播房間的房間id;和
讀取直播客戶端當(dāng)前的ip地址;和
讀取直播客戶端的設(shè)備唯一id。
在一實(shí)施例中,堆棧信息獲取單元301,具體用于:
獲取操作系統(tǒng)中系統(tǒng)庫(kù)的句柄;
通過(guò)操作系統(tǒng)中系統(tǒng)庫(kù)的句柄,獲取與調(diào)用堆棧信息相關(guān)的n個(gè)底層庫(kù)函數(shù),n為正整數(shù);
調(diào)用n個(gè)底層庫(kù)函數(shù),以獲取調(diào)用堆棧信息。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供了一種視頻流地址鑒權(quán)裝置,應(yīng)用于視頻流服務(wù)器。參考圖4所示,本實(shí)施例中的視頻流地址鑒權(quán)裝置包括:
請(qǐng)求接收單元401,用于如果接收到來(lái)自待鑒直播客戶端的攜帶有視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素的視頻流地址請(qǐng)求,從視頻流地址請(qǐng)求中獲取視頻流地址鑒權(quán)key值和m個(gè)鑒權(quán)要素,其中,m個(gè)鑒權(quán)要素均與直播客戶端當(dāng)前的狀態(tài)相關(guān),m為正整數(shù);
鑒權(quán)處理單元402,用于將m個(gè)鑒權(quán)要素與調(diào)用堆棧信息經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和m個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值,其中,調(diào)用堆棧信息為直播客戶端在已經(jīng)登錄到直播平臺(tái)之后通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取并發(fā)送給視頻流服務(wù)器的,目標(biāo)底層庫(kù)函數(shù)為直播客戶端所處操作系統(tǒng)的系統(tǒng)級(jí)函數(shù),調(diào)用堆棧信息中以調(diào)用順序保存有被調(diào)用函數(shù)的函數(shù)標(biāo)識(shí);
key值對(duì)比單元403,將從視頻流請(qǐng)求中獲取的視頻流地址鑒權(quán)key值與視頻流服務(wù)器生成的視頻流地址鑒權(quán)key值進(jìn)行對(duì)比;
地址下發(fā)單元404,用于如果對(duì)比結(jié)果為一致,向待鑒直播客戶端下發(fā)視頻流地址請(qǐng)求中所請(qǐng)求的視頻流地址。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)501,參考圖5所示,其上存儲(chǔ)有計(jì)算機(jī)程序502,該程序502被處理器執(zhí)行時(shí)實(shí)現(xiàn)前述視頻流地址鑒權(quán)方法中任一個(gè)實(shí)施例中的步驟。
基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例提供了一種計(jì)算機(jī)設(shè)備600,參考圖6所示,包括存儲(chǔ)器610、處理器630及存儲(chǔ)在存儲(chǔ)器610上并可在處理器630上運(yùn)行的計(jì)算機(jī)程序620,所述處理器630執(zhí)行所述程序620時(shí)實(shí)現(xiàn)前述視頻流地址鑒權(quán)方法中任一個(gè)實(shí)施例中的步驟。
由于上述所介紹的裝置、存儲(chǔ)介質(zhì)及計(jì)算機(jī)設(shè)備為實(shí)施本發(fā)明實(shí)施例中視頻流地址鑒權(quán)方法所采用,故而基于本發(fā)明實(shí)施例中所介紹的前述視頻流地址鑒權(quán)方法,本領(lǐng)域所屬技術(shù)人員能夠了解該裝置、存儲(chǔ)介質(zhì)及計(jì)算機(jī)設(shè)備的具體實(shí)施方式以及其各種變化形式,所以在此對(duì)于裝置、存儲(chǔ)介質(zhì)及計(jì)算機(jī)設(shè)備如何實(shí)現(xiàn)本發(fā)明實(shí)施例中的視頻流地址鑒權(quán)方法不再詳細(xì)介紹。只要本領(lǐng)域所屬技術(shù)人員實(shí)施本發(fā)明實(shí)施例中視頻流地址鑒權(quán)方法所采用的裝置、存儲(chǔ)介質(zhì)及計(jì)算機(jī)設(shè)備,都屬于本發(fā)明所欲保護(hù)的范圍。
上述實(shí)施例中的技術(shù)方案,至少具有如下的技術(shù)效果或優(yōu)點(diǎn):
通過(guò)目標(biāo)底層庫(kù)函數(shù)獲取調(diào)用堆棧信息,將調(diào)用堆棧信息和各個(gè)鑒權(quán)要素經(jīng)過(guò)哈希函數(shù)處理,以生成同時(shí)與調(diào)用堆棧信息和各個(gè)鑒權(quán)要素相關(guān)的視頻流地址鑒權(quán)key值,從而調(diào)用堆棧信息成為了視頻流地址鑒權(quán)key值的一部分,使得:非法的直播客戶端即使調(diào)用了相同的視頻流地址鑒權(quán)算法,所用的調(diào)用堆棧信息與正確的直播客戶端所用的調(diào)用堆棧信息也是不一致的,進(jìn)而使得視頻流服務(wù)器可以準(zhǔn)確判斷直播客戶端是否偽造了視頻流地址鑒權(quán)key值,從而本發(fā)明能夠避免視頻流地址被非法獲取,提高了視頻流地址鑒權(quán)的可靠性。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。