本申請涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種數(shù)據(jù)流轉(zhuǎn)碼的方法及設(shè)備。
背景技術(shù):
將日常事物連接到互聯(lián)網(wǎng)技術(shù)迅速發(fā)展,智慧園區(qū)的建設(shè)越來越多的滿足用戶設(shè)備的需求。而智慧園區(qū)的建設(shè)對于視頻監(jiān)控有天然的需求,是智慧園區(qū)系統(tǒng)的基礎(chǔ)功能,這就需要提供此功能的基礎(chǔ)構(gòu)架是高效的、穩(wěn)定的及廣泛適用的。目前,視頻的監(jiān)控是通過將實(shí)時(shí)流傳輸協(xié)議(RTSP)的數(shù)據(jù)流在視頻界面進(jìn)行顯示,給用戶展示所監(jiān)控的對象,而RTSP不是基于超文本傳輸協(xié)議(HTTP)的,對瀏覽器不是非常友好。另一方面,目前的采用FFServer流媒體服務(wù)所提供的訪問認(rèn)證策略是基于IP地址的,這使得上層應(yīng)用程序?qū)τ诙嗝襟w流數(shù)據(jù)的使用是受限于其所部署的服務(wù)器的IP地址,這對于智慧園區(qū)場景下的流媒體服務(wù)是不可容忍的。
申請內(nèi)容
本申請的一個(gè)目的是提供一種數(shù)據(jù)流轉(zhuǎn)碼的方法及設(shè)備,解決將RTSP流轉(zhuǎn)碼為對瀏覽器更友好的HLS(流媒體網(wǎng)路傳輸協(xié)議)流的問題。
根據(jù)本申請的一個(gè)方面,提供了一種數(shù)據(jù)流轉(zhuǎn)碼的方法,所述方法包括:
基于獲取用戶設(shè)備的訪問請求生成標(biāo)記化的訪問認(rèn)證;
通過ffmpeg將所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流,將所述預(yù)設(shè)視頻格式的數(shù)據(jù)流轉(zhuǎn)碼為流媒體網(wǎng)絡(luò)傳輸協(xié)議的待顯示數(shù)據(jù)流;
基于所述標(biāo)記化的訪問認(rèn)證將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。
進(jìn)一步地,所述基于獲取用戶設(shè)備的訪問請求生成標(biāo)記化的訪問認(rèn)證包括:
獲取用戶設(shè)備的訪問請求時(shí)的當(dāng)前時(shí)間的時(shí)間戳;
將所述訪問請求對應(yīng)的訪問密鑰及所述當(dāng)前時(shí)間的時(shí)間戳進(jìn)行哈希處理,得到哈希序列;
將所述哈希序列與所述當(dāng)前時(shí)間的時(shí)間戳拼接后的字符序列進(jìn)行數(shù)據(jù)編碼,并對所述數(shù)據(jù)編碼后的字符序列進(jìn)行標(biāo)記,生成標(biāo)記化的訪問認(rèn)證。
進(jìn)一步地,通過ffmpeg將獲取到的實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流之前,還包括:
根據(jù)所述用戶設(shè)備請求的身份標(biāo)識(shí)從數(shù)據(jù)庫中獲取所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的地址信息,其中,所述轉(zhuǎn)碼推流包括將所述實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流。
進(jìn)一步地,所述方法還包括:
將所述轉(zhuǎn)碼推流的日志和所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào)記錄至對應(yīng)的系統(tǒng)日志文件夾中。
進(jìn)一步地,所述預(yù)設(shè)視頻格式的數(shù)據(jù)流包括實(shí)時(shí)消息傳輸協(xié)議的數(shù)據(jù)流。
進(jìn)一步地,基于所述標(biāo)記化的訪問認(rèn)證將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備,包括:
通過所述標(biāo)記化的訪問認(rèn)證訪問所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件,其中,所述索引文件包括所述待顯示數(shù)據(jù)流;
將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。
進(jìn)一步地,所述方法還包括:
根據(jù)預(yù)設(shè)的時(shí)間閾值判斷最近一次檢測時(shí)間段內(nèi),是否存在至少一次對所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件的訪問,
若不存在,則查詢所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào),根據(jù)所述識(shí)別號(hào)結(jié)束所述轉(zhuǎn)碼推流所在的進(jìn)程,并刪除所述識(shí)別號(hào)所在的系統(tǒng)日志文件夾。
根據(jù)本申請的另一方面,還提供了一種數(shù)據(jù)流轉(zhuǎn)碼的設(shè)備,所述設(shè)備包括:
生成裝置,用于基于獲取用戶設(shè)備的訪問請求生成標(biāo)記化的訪問認(rèn)證;
轉(zhuǎn)碼裝置,用于通過ffmpeg將所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流,將所述預(yù)設(shè)視頻格式的數(shù)據(jù)流轉(zhuǎn)碼為流媒體網(wǎng)絡(luò)傳輸協(xié)議的待顯示數(shù)據(jù)流;
發(fā)送裝置,用于基于所述標(biāo)記化的訪問認(rèn)證將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。
進(jìn)一步地,所述生成裝置用于:
獲取用戶設(shè)備的訪問請求時(shí)的當(dāng)前時(shí)間的時(shí)間戳;
將所述訪問請求對應(yīng)的訪問密鑰及所述當(dāng)前時(shí)間的時(shí)間戳進(jìn)行哈希處理,得到哈希序列;
將所述哈希序列與所述當(dāng)前時(shí)間的時(shí)間戳拼接后的字符序列進(jìn)行數(shù)據(jù)編碼,并對所述數(shù)據(jù)編碼后的字符序列進(jìn)行標(biāo)記,生成標(biāo)記化的訪問認(rèn)證。
進(jìn)一步地,所述設(shè)備還包括:
地址獲取裝置,用于根據(jù)所述用戶設(shè)備請求的身份標(biāo)識(shí)從數(shù)據(jù)庫中獲取所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的地址信息,其中,所述轉(zhuǎn)碼推流包括將所述實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流。
進(jìn)一步地,所述設(shè)備還包括:
記錄裝置,用于將所述轉(zhuǎn)碼推流的日志和所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào)記錄至對應(yīng)的系統(tǒng)日志文件夾中。
進(jìn)一步地,所述預(yù)設(shè)視頻格式的數(shù)據(jù)流包括實(shí)時(shí)消息傳輸協(xié)議的數(shù)據(jù)流。
進(jìn)一步地,所述發(fā)送裝置用于:
通過所述標(biāo)記化的訪問認(rèn)證訪問所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件,其中,所述索引文件包括所述待顯示數(shù)據(jù)流;
將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。
進(jìn)一步地,所述設(shè)備還包括:
超時(shí)清理裝置,用于根據(jù)預(yù)設(shè)的時(shí)間閾值判斷最近一次檢測時(shí)間段內(nèi),是否存在至少一次對所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件的訪問,
若不存在,則查詢所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào),根據(jù)所述識(shí)別號(hào)結(jié)束所述轉(zhuǎn)碼推流所在的進(jìn)程,并刪除所述識(shí)別號(hào)所在的系統(tǒng)日志文件夾。
與現(xiàn)有技術(shù)相比,本申請通過基于獲取用戶設(shè)備的訪問請求生成標(biāo)記化的訪問認(rèn)證;通過ffmpeg將獲取到的實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流,將所述預(yù)設(shè)視頻格式的數(shù)據(jù)流轉(zhuǎn)碼為流媒體網(wǎng)絡(luò)傳輸協(xié)議的待顯示數(shù)據(jù)流;接著,基于所述標(biāo)記化的訪問認(rèn)證將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備,從而通過將實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)換為對瀏覽器更友好的流媒體網(wǎng)絡(luò)傳輸協(xié)議的待顯示數(shù)據(jù)流,以便于實(shí)現(xiàn)基于瀏覽器的視頻監(jiān)控系統(tǒng),并提供了相應(yīng)的標(biāo)記化的訪問認(rèn)證策略,使得上層應(yīng)用程序可以在任意位置訪問流媒體服務(wù)。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細(xì)描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1示出根據(jù)本申請一個(gè)方面的一種數(shù)據(jù)流轉(zhuǎn)碼的方法流程示意圖;
圖2示出本申請的一實(shí)施例的一種數(shù)據(jù)流轉(zhuǎn)碼的架構(gòu)圖;
圖3示出根據(jù)本申請另一個(gè)方面的一種數(shù)據(jù)流轉(zhuǎn)碼的設(shè)備的結(jié)構(gòu)示意圖。
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實(shí)施方式
下面結(jié)合附圖對本申請作進(jìn)一步詳細(xì)描述。
在本申請一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flashRAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
圖1示出根據(jù)本申請一個(gè)方面的一種數(shù)據(jù)流轉(zhuǎn)碼的方法流程示意圖,所述方法包括:步驟S11~步驟S13,
在步驟S11中,基于獲取用戶設(shè)備的訪問請求生成標(biāo)記化的訪問認(rèn)證;在此,從用戶設(shè)備中獲取用戶設(shè)備的訪問請求,根據(jù)訪問請求采集到當(dāng)前時(shí)間的時(shí)間戳、訪問密鑰等相關(guān)參數(shù),對所采集到的一些相關(guān)參數(shù)進(jìn)行處理并編碼,生成標(biāo)記化的訪問認(rèn)證,以訪問索引文件找到需要訪問的數(shù)據(jù)流。其中,標(biāo)記化的訪問認(rèn)證是從輸入字符流中生成標(biāo)記的過程,生成的標(biāo)記記作token。在本申請一實(shí)施例中,獲取用戶設(shè)備對房間編號(hào)為A的視頻監(jiān)控的訪問請求,則將開始訪問時(shí)的當(dāng)前時(shí)間的時(shí)間戳或可容忍的稍微有點(diǎn)延遲的時(shí)間戳和房間A的訪問密鑰等相關(guān)參數(shù)進(jìn)行處理并編碼,生成token,使得用戶設(shè)備上的上層應(yīng)用程序在任意位置訪問流媒體服務(wù),即不受限于其所部署的服務(wù)器的IP地址。
在步驟S12中,通過ffmpeg將所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流,將所述預(yù)設(shè)視頻格式的數(shù)據(jù)流轉(zhuǎn)碼為流媒體網(wǎng)絡(luò)傳輸協(xié)議的待顯示數(shù)據(jù)流;在一實(shí)施例中,獲取到訪問請求從對應(yīng)的實(shí)時(shí)流傳輸協(xié)議(RTSP)流獲取到視頻流,將視頻流進(jìn)行轉(zhuǎn)碼,將其轉(zhuǎn)換為智慧園區(qū)系統(tǒng)要求的預(yù)設(shè)的視頻格式。優(yōu)選地,所述預(yù)設(shè)視頻格式的數(shù)據(jù)流包括實(shí)時(shí)消息傳輸協(xié)議的數(shù)據(jù)流,智慧園區(qū)系統(tǒng)中開源流媒體模塊要求的視頻格式為實(shí)時(shí)消息傳輸協(xié)議的數(shù)據(jù)流(RTMP),則首先將RTSP流轉(zhuǎn)碼為RTMP流;可以理解,HLS是基于HTTP的流媒體網(wǎng)路傳輸協(xié)議,瀏覽器使用HTTP與服務(wù)器端通信,而RTSP在體系結(jié)構(gòu)上位于實(shí)時(shí)傳輸協(xié)議(RTP)和實(shí)時(shí)傳輸控制協(xié)議(RTCP)之上,使用TCP(傳輸控制協(xié)議)和UDP(傳輸層協(xié)議)完成數(shù)據(jù)傳輸,因此需要將轉(zhuǎn)碼后的RTMP流進(jìn)一步地轉(zhuǎn)碼為對瀏覽器更友好的HLS流。需要說明的是,所述ffmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)換為流的開源計(jì)算機(jī)程序。
在步驟S13中,基于所述標(biāo)記化的訪問認(rèn)證將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。在此,根據(jù)生成的token進(jìn)行訪問HLS流的索引文件,將索引文件下的HLS待顯示數(shù)據(jù)流發(fā)送至用戶設(shè)備,在用戶設(shè)備的視頻界面上進(jìn)行顯示。
優(yōu)選地,在步驟S11中,獲取用戶設(shè)備的訪問請求時(shí)的當(dāng)前時(shí)間的時(shí)間戳;將所述訪問請求對應(yīng)的訪問密鑰及所述當(dāng)前時(shí)間的時(shí)間戳進(jìn)行哈希處理,得到哈希序列;將所述哈希序列與所述當(dāng)前時(shí)間的時(shí)間戳拼接后的字符序列進(jìn)行數(shù)據(jù)編碼,并對所述數(shù)據(jù)編碼后的字符序列進(jìn)行標(biāo)記,生成標(biāo)記化的訪問認(rèn)證。在本申請一實(shí)施例中,采用了token認(rèn)證方式,根據(jù)用戶設(shè)備的訪問請求獲得當(dāng)前時(shí)間的時(shí)間戳,訪問密鑰(ACCESSKEY)等參數(shù)進(jìn)行哈希處理,再與當(dāng)前時(shí)間的時(shí)間戳拼接后進(jìn)行數(shù)據(jù)編碼,得到token。需要說明的是,上述時(shí)間戳(timestamp)為一個(gè)字符序列,唯一標(biāo)識(shí)某一時(shí)刻的時(shí)間;分配一個(gè)唯一的訪問密鑰(ACCESSKEY)來訪問系統(tǒng)提供的一些應(yīng)用程序接口;數(shù)據(jù)編碼優(yōu)選為用于傳輸8字節(jié)代碼的base64編碼。
優(yōu)選地,步驟S12之前,所述方法還包括:步驟S12’,根據(jù)所述用戶設(shè)備請求的身份標(biāo)識(shí)從數(shù)據(jù)庫中獲取所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的地址信息,其中,所述轉(zhuǎn)碼推流包括將所述實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流。在此,啟動(dòng)一個(gè)進(jìn)程進(jìn)行轉(zhuǎn)碼推流的服務(wù),從數(shù)據(jù)庫(Redis)中獲取訪問請求對應(yīng)的RTSP流的地址信息,以便根據(jù)地址信息從RTSP流中獲得視頻數(shù)據(jù)流。
優(yōu)選,所述方法還包括:步驟S12”,將所述轉(zhuǎn)碼推流的日志和所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào)記錄至對應(yīng)的logs(系統(tǒng)日志)文件夾中。接上述實(shí)施例,在轉(zhuǎn)碼推流過程中,將轉(zhuǎn)碼推流的日志和轉(zhuǎn)碼推流所在的進(jìn)程的pid信息記錄在相對應(yīng)的logs文件夾下,為超時(shí)清理功能提供可能,其中,pid為進(jìn)程識(shí)別號(hào)。
優(yōu)選地,在步驟S13中,通過所述標(biāo)記化的訪問認(rèn)證訪問所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件,其中,所述索引文件包括所述待顯示數(shù)據(jù)流;將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。在此,通過生成的token可以訪問HLS的索引文件,從索引文件中獲得要播放的監(jiān)控視頻;具體地,索引文件為HLSm3u8索引文件,其中,m3u8是指一種可變長度字符編碼UTF-8編碼格式的播放多媒體列表的m3u文件。
優(yōu)選地,所述方法還包括:步驟S14,根據(jù)預(yù)設(shè)的時(shí)間閾值判斷最近一次檢測時(shí)間段內(nèi),是否存在至少一次對所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件的訪問,若不存在,則查詢所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào),根據(jù)所述識(shí)別號(hào)結(jié)束所述轉(zhuǎn)碼推流所在的進(jìn)程,并刪除所述識(shí)別號(hào)所在的logs文件夾。在此,由于應(yīng)用軟件在停止流媒體播放時(shí)可能忘記調(diào)用相應(yīng)的停止推流應(yīng)用程序接口(API),導(dǎo)致系統(tǒng)可能存在大量未被使用的轉(zhuǎn)碼進(jìn)程,從而導(dǎo)致網(wǎng)絡(luò)帶寬和磁盤IO的巨大浪費(fèi),因此需要一個(gè)合理的超時(shí)清理機(jī)制,在本申請一實(shí)施例中,在啟動(dòng)轉(zhuǎn)碼推流時(shí),開啟一個(gè)計(jì)時(shí)器,在延遲一定時(shí)間后(設(shè)定一個(gè)時(shí)間閾值)檢測對應(yīng)數(shù)據(jù)流的m3u8索引文件是否在最近的一段時(shí)間內(nèi)被訪問,比如在延遲10s后檢測對應(yīng)數(shù)據(jù)流的m3u8索引文件是否在最近的3s內(nèi)被訪問過,若未被訪問,將會(huì)找到數(shù)據(jù)流對應(yīng)的轉(zhuǎn)碼推流所在的進(jìn)程的pid,根據(jù)pid停止相應(yīng)的進(jìn)程,停止記錄pid的文件也會(huì)被刪除,從而節(jié)省網(wǎng)絡(luò)帶寬和磁盤IO的資源。
圖2示出本申請一實(shí)施例中數(shù)據(jù)流轉(zhuǎn)碼的架構(gòu)圖,所述架構(gòu)圖基于OpenResty,復(fù)用了petrel中的模塊,其中,OpenResty是基于高性能的HTTP服務(wù)器Nginx與輕量腳本語言Lua的高性能網(wǎng)頁(web)平臺(tái),其內(nèi)部集成了大量精良的Lua庫、第三方模塊以及大多數(shù)的依賴項(xiàng);petrel是一種基于OpenResty的應(yīng)用開發(fā)框架,使得模塊可以被任意的拆分和組合;nginx-rtmp-module是一種Nginx的開源流媒體模塊;bash為一種命令執(zhí)行界面(unix shell);使用本實(shí)施例中的架構(gòu),利用Lua在系統(tǒng)的后端啟動(dòng)獨(dú)立的進(jìn)程將RTSP流通過ffmpeg轉(zhuǎn)換為RTMP流,推送到以O(shè)penResty和nginx-rtmp-module為基礎(chǔ)構(gòu)建的流媒體統(tǒng)一接入系統(tǒng),然后由其提供HLS流服務(wù),完成轉(zhuǎn)碼推流的過程,并提供了token的訪問認(rèn)證,使得上層應(yīng)用程序可以在任意位置訪問流媒體服務(wù);進(jìn)一步地,提供相應(yīng)的超時(shí)清理機(jī)制,節(jié)省了網(wǎng)絡(luò)帶寬和磁盤IO的資源。
圖3示出根據(jù)本申請另一個(gè)方面的一種數(shù)據(jù)流轉(zhuǎn)碼的設(shè)備的結(jié)構(gòu)示意圖,所述設(shè)備包括:生成裝置11、轉(zhuǎn)碼裝置12和發(fā)送裝置13,其中,所述生成裝置11,用于基于獲取用戶設(shè)備的訪問請求生成標(biāo)記化的訪問認(rèn)證;所述轉(zhuǎn)碼裝置12,用于通過ffmpeg將所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流,將所述預(yù)設(shè)視頻格式的數(shù)據(jù)流轉(zhuǎn)碼為流媒體網(wǎng)絡(luò)傳輸協(xié)議的待顯示數(shù)據(jù)流;所述發(fā)送裝置13,用于基于所述標(biāo)記化的訪問認(rèn)證將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。
具體地,生成裝置11,用于基于獲取用戶設(shè)備的訪問請求生成標(biāo)記化的訪問認(rèn)證;在此,從用戶設(shè)備中獲取用戶設(shè)備的訪問請求,根據(jù)訪問請求采集到當(dāng)前時(shí)間的時(shí)間戳、訪問密鑰等相關(guān)參數(shù),對所采集到的一些相關(guān)參數(shù)進(jìn)行處理并編碼,生成標(biāo)記化的訪問認(rèn)證,以訪問索引文件找到需要訪問的數(shù)據(jù)流。其中,標(biāo)記化的訪問認(rèn)證是從輸入字符流中生成標(biāo)記的過程,生成的標(biāo)記記作token。在本申請一實(shí)施例中,獲取用戶設(shè)備對房間編號(hào)為A的視頻監(jiān)控的訪問請求,則將開始訪問時(shí)的當(dāng)前時(shí)間的時(shí)間戳或可容忍的稍微有點(diǎn)延遲的時(shí)間戳和房間A的訪問密鑰等相關(guān)參數(shù)進(jìn)行處理并編碼,生成token,使得用戶設(shè)備上的上層應(yīng)用程序在任意位置訪問流媒體服務(wù),即不受限于其所部署的服務(wù)器的IP地址。
具體地,轉(zhuǎn)碼裝置12,用于通過ffmpeg將所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流,將所述預(yù)設(shè)視頻格式的數(shù)據(jù)流轉(zhuǎn)碼為流媒體網(wǎng)絡(luò)傳輸協(xié)議的待顯示數(shù)據(jù)流;在一實(shí)施例中,獲取到訪問請求從對應(yīng)的實(shí)時(shí)流傳輸協(xié)議(RTSP)流獲取到視頻流,將視頻流進(jìn)行轉(zhuǎn)碼,將其轉(zhuǎn)換為智慧園區(qū)系統(tǒng)要求的預(yù)設(shè)的視頻格式。優(yōu)選地,所述預(yù)設(shè)視頻格式的數(shù)據(jù)流包括實(shí)時(shí)消息傳輸協(xié)議的數(shù)據(jù)流,智慧園區(qū)系統(tǒng)中開源流媒體模塊要求的視頻格式為實(shí)時(shí)消息傳輸協(xié)議的數(shù)據(jù)流(RTMP),則首先將RTSP流轉(zhuǎn)碼為RTMP流;可以理解,HLS是基于HTTP的流媒體網(wǎng)路傳輸協(xié)議,瀏覽器使用HTTP與服務(wù)器端通信,而RTSP在體系結(jié)構(gòu)上位于實(shí)時(shí)傳輸協(xié)議(RTP)和實(shí)時(shí)傳輸控制協(xié)議(RTCP)之上,使用TCP(傳輸控制協(xié)議)和UDP(傳輸層協(xié)議)完成數(shù)據(jù)傳輸,因此需要將轉(zhuǎn)碼后的RTMP流進(jìn)一步地轉(zhuǎn)碼為對瀏覽器更友好的HLS流。需要說明的是,所述ffmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)換為流的開源計(jì)算機(jī)程序。
具體地,發(fā)送裝置13,用于基于所述標(biāo)記化的訪問認(rèn)證將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。在此,根據(jù)生成的token進(jìn)行訪問HLS流的索引文件,將索引文件下的HLS待顯示數(shù)據(jù)流發(fā)送至用戶設(shè)備,在用戶設(shè)備的視頻界面上進(jìn)行顯示。
優(yōu)選地,生成裝置11,用于獲取用戶設(shè)備的訪問請求時(shí)的當(dāng)前時(shí)間的時(shí)間戳;將所述訪問請求對應(yīng)的訪問密鑰及所述當(dāng)前時(shí)間的時(shí)間戳進(jìn)行哈希處理,得到哈希序列;將所述哈希序列與所述當(dāng)前時(shí)間的時(shí)間戳拼接后的字符序列進(jìn)行數(shù)據(jù)編碼,并對所述數(shù)據(jù)編碼后的字符序列進(jìn)行標(biāo)記,生成標(biāo)記化的訪問認(rèn)證。在本申請一實(shí)施例中,采用了token認(rèn)證方式,根據(jù)用戶設(shè)備的訪問請求獲得當(dāng)前時(shí)間的時(shí)間戳,訪問密鑰(ACCESSKEY)等參數(shù)進(jìn)行哈希處理,再與當(dāng)前時(shí)間的時(shí)間戳拼接后進(jìn)行數(shù)據(jù)編碼,得到token。需要說明的是,上述時(shí)間戳(timestamp)為一個(gè)字符序列,唯一標(biāo)識(shí)某一時(shí)刻的時(shí)間;分配一個(gè)唯一的訪問密鑰(ACCESSKEY)來訪問系統(tǒng)提供的一些應(yīng)用程序接口;數(shù)據(jù)編碼優(yōu)選為用于傳輸8字節(jié)代碼的base64編碼。
優(yōu)選地,所述設(shè)備還包括:地址獲取裝置12’,用于根據(jù)所述用戶設(shè)備請求的身份標(biāo)識(shí)從數(shù)據(jù)庫中獲取所述訪問請求對應(yīng)的實(shí)時(shí)流傳輸協(xié)議的地址信息,其中,所述轉(zhuǎn)碼推流包括將所述實(shí)時(shí)流傳輸協(xié)議的視頻數(shù)據(jù)流轉(zhuǎn)碼為預(yù)設(shè)視頻格式的數(shù)據(jù)流。在此,啟動(dòng)一個(gè)進(jìn)程進(jìn)行轉(zhuǎn)碼推流的服務(wù),從數(shù)據(jù)庫(Redis)中獲取訪問請求對應(yīng)的RTSP流的地址信息,以便根據(jù)地址信息從RTSP流中獲得視頻數(shù)據(jù)流。
優(yōu)選,所述設(shè)備還包括:記錄裝置12”,用于將所述轉(zhuǎn)碼推流的日志和所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào)記錄至對應(yīng)的logs(系統(tǒng)日志)文件夾中。接上述實(shí)施例,在轉(zhuǎn)碼推流過程中,將轉(zhuǎn)碼推流的日志和轉(zhuǎn)碼推流所在的進(jìn)程的pid信息記錄在相對應(yīng)的logs文件夾下,為超時(shí)清理功能提供可能,其中,pid為進(jìn)程識(shí)別號(hào)。
優(yōu)選地,發(fā)送裝置13,用于通過所述標(biāo)記化的訪問認(rèn)證訪問所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件,其中,所述索引文件包括所述待顯示數(shù)據(jù)流;將所述待顯示數(shù)據(jù)流發(fā)送至所述用戶設(shè)備。在此,通過生成的token可以訪問HLS的索引文件,從索引文件中獲得要播放的監(jiān)控視頻;具體地,索引文件為HLS m3u8索引文件,其中,m3u8是指一種可變長度字符編碼UTF-8編碼格式的播放多媒體列表的m3u文件。
優(yōu)選地,所述設(shè)備還包括:超時(shí)清理裝置14,用于根據(jù)預(yù)設(shè)的時(shí)間閾值判斷最近一次檢測時(shí)間段內(nèi),是否存在至少一次對所述流媒體網(wǎng)絡(luò)傳輸協(xié)議的索引文件的訪問,若不存在,則查詢所述轉(zhuǎn)碼推流所在進(jìn)程的識(shí)別號(hào),根據(jù)所述識(shí)別號(hào)結(jié)束所述轉(zhuǎn)碼推流所在的進(jìn)程,并刪除所述識(shí)別號(hào)所在的logs文件夾。在此,由于應(yīng)用軟件在停止流媒體播放時(shí)可能忘記調(diào)用相應(yīng)的停止推流應(yīng)用程序接口(API),導(dǎo)致系統(tǒng)可能存在大量未被使用的轉(zhuǎn)碼進(jìn)程,從而導(dǎo)致網(wǎng)絡(luò)帶寬和磁盤IO的巨大浪費(fèi),因此需要一個(gè)合理的超時(shí)清理機(jī)制,在本申請一實(shí)施例中,在啟動(dòng)轉(zhuǎn)碼推流時(shí),開啟一個(gè)計(jì)時(shí)器,在延遲一定時(shí)間后(設(shè)定一個(gè)時(shí)間閾值)檢測對應(yīng)數(shù)據(jù)流的m3u8索引文件是否在最近的一段時(shí)間內(nèi)被訪問,比如在延遲10s后檢測對應(yīng)數(shù)據(jù)流的m3u8索引文件是否在最近的3s內(nèi)被訪問過,若未被訪問,將會(huì)找到數(shù)據(jù)流對應(yīng)的轉(zhuǎn)碼推流所在的進(jìn)程的pid,根據(jù)pid停止相應(yīng)的進(jìn)程,停止記錄pid的文件也會(huì)被刪除,從而節(jié)省網(wǎng)絡(luò)帶寬和磁盤IO的資源。
圖2示出本申請一實(shí)施例中數(shù)據(jù)流轉(zhuǎn)碼的架構(gòu)圖,所述架構(gòu)圖基于OpenResty,復(fù)用了petrel中的模塊,其中,OpenResty是基于高性能的HTTP服務(wù)器Nginx與輕量腳本語言Lua的高性能網(wǎng)頁(web)平臺(tái),其內(nèi)部集成了大量精良的Lua庫、第三方模塊以及大多數(shù)的依賴項(xiàng);petrel是一種基于OpenResty的應(yīng)用開發(fā)框架,使得模塊可以被任意的拆分和組合;nginx-rtmp-module是一種Nginx的開源流媒體模塊;bash為一種命令執(zhí)行界面(unix shell);使用本實(shí)施例中的架構(gòu),利用Lua在系統(tǒng)的后端啟動(dòng)獨(dú)立的進(jìn)程將RTSP流通過ffmpeg轉(zhuǎn)換為RTMP流,推送到以O(shè)penResty和nginx-rtmp-module為基礎(chǔ)構(gòu)建的流媒體統(tǒng)一接入系統(tǒng),然后由其提供HLS流服務(wù),完成轉(zhuǎn)碼推流的過程,并提供了token的訪問認(rèn)證,使得上層應(yīng)用程序可以在任意位置訪問流媒體服務(wù);進(jìn)一步地,提供相應(yīng)的超時(shí)清理機(jī)制,節(jié)省了網(wǎng)絡(luò)帶寬和磁盤IO的資源。
顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動(dòng)和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動(dòng)和變型在內(nèi)。
需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(ASIC)、通用目的計(jì)算機(jī)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本申請的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。
另外,本申請的一部分可被應(yīng)用為計(jì)算機(jī)程序產(chǎn)品,例如計(jì)算機(jī)程序指令,當(dāng)其被計(jì)算機(jī)執(zhí)行時(shí),通過該計(jì)算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲(chǔ)在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過廣播或其他信號(hào)承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲(chǔ)在根據(jù)所述程序指令運(yùn)行的計(jì)算機(jī)設(shè)備的工作存儲(chǔ)器中。在此,根據(jù)本申請的一個(gè)實(shí)施例包括一個(gè)裝置,該裝置包括用于存儲(chǔ)計(jì)算機(jī)程序指令的存儲(chǔ)器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計(jì)算機(jī)程序指令被該處理器執(zhí)行時(shí),觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。