1.一種流媒體的播放方法,其特征在于,該方法的步驟包括:
步驟S1,對播放的數(shù)據(jù)文件進(jìn)行存儲(chǔ)以及查找;
步驟S2,對所述步驟S1的存儲(chǔ)的文件進(jìn)行目錄創(chuàng)建操作;
步驟S3,將所述步驟S2中的存儲(chǔ)的文件存儲(chǔ)到緩存中;
步驟S4,對所述步驟S3中的緩存的文件進(jìn)行回看播放。
2.根據(jù)權(quán)利要求1所述的一種流媒體的播放方法,其特征在于,所述步驟S1中,包括如下步驟:
步驟S11,定義循環(huán)數(shù)組來存放每一組GOP,存儲(chǔ)GOP的數(shù)據(jù)結(jié)構(gòu)是由先定義的抽象幀的結(jié)構(gòu)和循環(huán)數(shù)組中元素的結(jié)構(gòu)組成;
步驟S12,把解析完完整的一幀數(shù)據(jù)以GOP為單位存儲(chǔ)在循環(huán)數(shù)組中;
步驟S13,若是直播請求查找,直接取最新更新的GOP發(fā)送到請求直播數(shù)據(jù)的程序中;若是時(shí)移請求,則要查找時(shí)移的發(fā)送點(diǎn),發(fā)送點(diǎn)是根據(jù)時(shí)移時(shí)間與現(xiàn)在緩存數(shù)組中的最早時(shí)間的差值,然后在循環(huán)數(shù)組中直接定位時(shí)移的發(fā)送點(diǎn)。
3.根據(jù)權(quán)利要求1所述的一種流媒體的播放方法,其特征在于,所述步驟S2中,目錄創(chuàng)建操作包括:創(chuàng)建目錄規(guī)則,主機(jī)名-文件目錄-存儲(chǔ)文件的日期;文件目錄的命名規(guī)則,命名規(guī)則是按照年、月、日、小時(shí)、分鐘、秒共14位,若月日時(shí)分秒不足兩位的在左邊用零補(bǔ)夠,若文件切片存儲(chǔ)時(shí)長為x,則文件名的命令規(guī)則為x的整數(shù)倍;刪除目錄操作,在創(chuàng)建新文件時(shí),若是當(dāng)前的目錄為空,則刪除;文件的刪除操作,判斷文件的刪除的條件是該文件超過了回看時(shí)長;刪除規(guī)則是每次刪除一個(gè)小時(shí)的視頻文件,這個(gè)小時(shí)是以10分鐘切片的時(shí)長為標(biāo)準(zhǔn)的一個(gè)設(shè)定值。
4.根據(jù)權(quán)利要求1所述的一種流媒體播放的方法,其特征在于,所述步驟S3包括切片流程,該切片流程的步驟為:
步驟S31,在程序中讀取磁盤的塊的大小,定義緩存大小為塊的大小的整數(shù)倍;
步驟S32,當(dāng)接收到已經(jīng)解析的幀數(shù)據(jù)時(shí),先判斷是否要?jiǎng)?chuàng)建新文件,即判斷是否當(dāng)前幀為關(guān)鍵幀并且?guī)瑪?shù)據(jù)的時(shí)間已經(jīng)大于存儲(chǔ)時(shí)長,若創(chuàng)建,則執(zhí)行步驟S33,若不創(chuàng)建,則執(zhí)行步驟S34;
步驟S33,判斷緩存中的數(shù)據(jù)是否有要寫入磁盤中的數(shù)據(jù),若有,則先寫入切片文件中再關(guān)閉舊文件并創(chuàng)建新文件,若無,則直接創(chuàng)建新文件;
步驟S34,判斷緩存區(qū)是否滿,若沒有空間,則先把緩存內(nèi)容即幀數(shù)據(jù)寫入磁盤,再把幀數(shù)據(jù)復(fù)制到緩存區(qū),若有空間,則把緩存內(nèi)容直接寫進(jìn)緩存區(qū)。
5.根據(jù)權(quán)利要求4所述的一種流媒體播放的方法,其特征在于,所述步驟S3還包括:切片索引數(shù)據(jù)算法,根據(jù)文件時(shí)長每秒存儲(chǔ)一個(gè)關(guān)鍵幀索引結(jié)構(gòu),結(jié)構(gòu)中存儲(chǔ)關(guān)鍵幀的播放時(shí)間、在文件中的位置、是否為該秒內(nèi)的關(guān)鍵幀;切片的異常處理,若本存儲(chǔ)服務(wù)器上的切片不完整時(shí),刪除本服務(wù)器上不完整的切片,并向網(wǎng)中其他的相同的節(jié)點(diǎn)發(fā)送查找命令,若其他服務(wù)器上有完整的則下載該切片,下載文件采用斷點(diǎn)續(xù)傳的方法;若沒有,則記錄在異常日志中,并以電郵的形式返給運(yùn)維人員。
6.根據(jù)權(quán)利要求1所述的一種流媒體的播放方法,其特征在于,步驟S4中,所述播放為回看播放,回看播放的流程步驟如下:
步驟S41,收到回看的請求,根據(jù)開始時(shí)間查找回看的第一個(gè)文件;
步驟S42,判斷是否找到符合回看播放時(shí)間要求的切片文件,若找到,則執(zhí)行步驟S44,否則執(zhí)行步驟S43;
步驟S43,切片文件沒有找到,返回錯(cuò)誤碼;
步驟S44,發(fā)送切片文件,成功發(fā)送切片文件后執(zhí)行步驟S45,否則執(zhí)行紀(jì)步驟S43;
步驟S45,判斷有沒有end參數(shù),若有,則執(zhí)行步驟S47,否則,執(zhí)行步驟S46;
步驟S46,先生成下一個(gè)文件名,其文件名是代表時(shí)間的字符串,然后查找下一個(gè)切片文件,執(zhí)行步驟S42;
步驟S47,先生成下一個(gè)文件名,其文件名是代表時(shí)間的字符串,并根據(jù)文件名字代表的時(shí)間判斷是否大于end參數(shù),若大于,則執(zhí)行步驟S48,否則,執(zhí)行步驟S46;
步驟S48,結(jié)束回看流程。
7.根據(jù)權(quán)利要求2所述的一種流媒體的播放方法,其特征在于,所述的流媒體的播放方法是基于非多碼率協(xié)議的或基于多碼率協(xié)議的。
8.根據(jù)權(quán)利要求7所述的一種流媒體的播放方法,其特征在于,基于多碼率協(xié)議的流媒體在所述步驟S12中增加一層hls文件邏輯切片層,解析完完整的一個(gè)邏輯切片后,按照邏輯切片為單位存儲(chǔ)在循環(huán)數(shù)組中,在請求切片文件時(shí),則要查找邏輯切片的位置;循環(huán)數(shù)組是虛擬切片的信息,數(shù)組中的大小為切片的個(gè)數(shù),以及增加了m3u8格式文件,其中直播是直接讀取內(nèi)存中的m3u8格式文件,而時(shí)移是先查找邏輯切片,再生成m3u8格式文件。
9.根據(jù)權(quán)利要求7-8中任一權(quán)利要求所述的一種流媒體的播放方法,其特征在于,基于多碼率協(xié)議采用存儲(chǔ)方式為切片存儲(chǔ)。
10.根據(jù)權(quán)利要求7或8所述的一種流媒體的播放方法,其特征在于,基于多碼率協(xié)議的回看的流程步驟為:
步驟1,收到請求回看m3u8格式文件的請求,判斷有無end參數(shù),若有end參數(shù),執(zhí)行步驟2,若沒有,則給end參數(shù)賦予當(dāng)前的時(shí)間值,然后執(zhí)行步驟2;
步驟2,組成m3u8格式文件,判斷是否生成正確的m3u8格式文件內(nèi)容,若是,則執(zhí)行步驟3,若否,則直接返回;
步驟3,發(fā)送m3u8格式文件后返回。