国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種HLS流媒體分片的虛擬拼接方法及系統(tǒng)與流程

      文檔序號(hào):12183692閱讀:633來(lái)源:國(guó)知局
      一種HLS流媒體分片的虛擬拼接方法及系統(tǒng)與流程

      本發(fā)明涉及OTT(Over The Top)TV技術(shù)領(lǐng)域,具體涉及一種HLS(HTTP Live Streaming)流媒體分片的虛擬拼接方法及系統(tǒng)。



      背景技術(shù):

      OTT TV是指通過(guò)公共互聯(lián)網(wǎng)面向聯(lián)網(wǎng)設(shè)備(電視、PC、移動(dòng)終端)傳輸IP視頻和互聯(lián)網(wǎng)應(yīng)用融合的一種服務(wù),是以交互式音視頻服務(wù)為主體,集互聯(lián)網(wǎng)、多媒體通訊等多種技術(shù)為一體的服務(wù)集合體,可在任何時(shí)間、向任意地點(diǎn)的任意終端用戶提供視頻、資訊、游戲等各種服務(wù)。

      隨著Apple公司iPhone、iPad、iPod touch等終端的迅速普及,由其帶來(lái)的HTTP實(shí)時(shí)流媒體技術(shù)成為了OTT TV的主流事實(shí)標(biāo)準(zhǔn)。

      標(biāo)準(zhǔn)HLS協(xié)議將視頻切成連續(xù)、很短時(shí)長(zhǎng)(我們此處假設(shè)10s)的MPEG-TS片段(為了區(qū)分我們稱為小片段),并不斷更新M3U8文件,M3U8文件是M3U格式文件的一種,其格式是utf-8格式,M3U格式的文件只是存儲(chǔ)多媒體播放列表,提供了一個(gè)指向其他位置的音頻視頻文件的索引。有時(shí),為了支持回看,需要在存儲(chǔ)上存放較多的很長(zhǎng)時(shí)間的小片段,這就容易導(dǎo)致存儲(chǔ)上的小文件比較多,造成磁盤(pán)碎片,降低磁盤(pán)讀寫(xiě)速度。

      為了解決這種問(wèn)題,現(xiàn)有方法是采用將多個(gè)小片段進(jìn)行合并的方式來(lái)減少小文件數(shù)量,例如可以將18個(gè)10s小片段合成一個(gè)3分鐘的大片段。這樣就解決了小文件存儲(chǔ)帶來(lái)的問(wèn)題,由于合并TS小片段的同時(shí)生成了相應(yīng)的索引文件,所以仍然支持回看功能。

      現(xiàn)有合并小片段的流程圖如圖1所示,具體方式是:先由轉(zhuǎn)碼器將視頻切成連續(xù)、短時(shí)長(zhǎng)的TS小片段,每個(gè)TS小片段由TS Paclet疊加而成,且TS小片段的時(shí)長(zhǎng)為10s,將疊加成的TS小片段的文件名(后綴為.ts)存儲(chǔ)至M3U8文件中,同時(shí),將TS小片段進(jìn)行臨時(shí)存儲(chǔ),然后,根據(jù)利用Merger程序?qū)⑴R時(shí)存儲(chǔ)的多個(gè)TS小片段合并成一個(gè)大片段,如,將18個(gè)TS小片段合并成一個(gè)3分鐘時(shí)長(zhǎng)的大片段,將合并的大片段的文件名和索引名更新至M3U8文件中,如,1454048928.ts和1454048928.idx,并將索引名更新至normal.idx中。但是這種方式存在如下問(wèn)題:

      (1)需要Merger程序單獨(dú)對(duì)多個(gè)小片段進(jìn)行合并,耗費(fèi)資源,而縱觀整個(gè)過(guò)程,可以發(fā)現(xiàn)這種方式實(shí)際相當(dāng)于進(jìn)行了一些多余的切片工作。

      (2)Merger程序合并小片段的同時(shí)還需要將合并的大片段存儲(chǔ)于M3U8中相應(yīng)的三個(gè)不同的目錄中,如,1454048928.ts、1454048928.idx和normal.idx三個(gè)不同目錄,所以每一個(gè)Merger程序的進(jìn)程同時(shí)會(huì)產(chǎn)生另外三個(gè)進(jìn)程,如果有多個(gè)輸出時(shí),相應(yīng)的會(huì)增加多個(gè)合并進(jìn)程,但進(jìn)程數(shù)以3倍速增加,過(guò)多的進(jìn)程數(shù)極大占用了系統(tǒng)資源,嚴(yán)重影響了系統(tǒng)的穩(wěn)定性,如果管理不好或任務(wù)啟動(dòng)過(guò)于頻繁,容易導(dǎo)致進(jìn)程失控。



      技術(shù)實(shí)現(xiàn)要素:

      由于現(xiàn)有流媒體分片的合并技術(shù)需要增加相應(yīng)的進(jìn)程數(shù)目,而過(guò)多的進(jìn)程數(shù)目嚴(yán)重影響了系統(tǒng)的穩(wěn)定性,針對(duì)該問(wèn)題,本申請(qǐng)?zhí)峁┮环NHLS流媒體分片的虛擬拼接方法及系統(tǒng)。

      根據(jù)第一方面,一種實(shí)施例中提供一種HLS流媒體分片的虛擬拼接方法,包括步驟:

      建立M3U8文件,M3U8文件包括TS大片段文件和TS大片段索引文件;

      讀取音視頻數(shù)據(jù)并將讀取的音視頻數(shù)據(jù)封裝成TS Packet;

      將TS Packet疊加拼接至TS大片段文件;

      判斷疊加拼接的TS Packet的時(shí)間片長(zhǎng)是否達(dá)到第一預(yù)設(shè)時(shí)間,若達(dá)到,將第一預(yù)設(shè)時(shí)間的片長(zhǎng)生成TS小片段文件;

      將TS小片段的數(shù)據(jù)信息及所在TS大片段的位置信息更新至TS大片段索引文件;

      判斷TS大片段文件的拼接是否達(dá)到結(jié)束條件,若達(dá)到,則TS大片段文件拼接完成。

      一種實(shí)施例中,結(jié)束條件為T(mén)S大片段文件內(nèi)的所有TS Packet時(shí)間片長(zhǎng)是否達(dá)到第二預(yù)設(shè)時(shí)間,判斷TS大片段文件是否拼接完成的步驟包括:

      統(tǒng)計(jì)TS大片段文件內(nèi)的疊加拼接的所有TS Packet時(shí)間片長(zhǎng);

      判斷時(shí)間片長(zhǎng)是否達(dá)到第二預(yù)設(shè)時(shí)間,若達(dá)到,則完成TS大片段文件的拼接。

      一種實(shí)施例中,結(jié)束條件為T(mén)S大片段文件內(nèi)生成的TS小片段數(shù)目是否達(dá)到預(yù)設(shè)閥值,判斷TS大片段文件是否拼接完成,包括步驟:

      TS大片段文件內(nèi)每生成一個(gè)TS小片段文件時(shí)累計(jì)計(jì)數(shù);

      判斷累計(jì)的數(shù)值是否達(dá)到預(yù)設(shè)閥值,若達(dá)到,則完成TS大片段文件的拼接。

      一種實(shí)施例中,讀取音視頻數(shù)據(jù)并將讀取的音視頻數(shù)據(jù)封裝成TS Packet,包括步驟:

      讀取音視頻數(shù)據(jù);

      將音視頻數(shù)據(jù)解復(fù)用為音數(shù)據(jù)和視頻數(shù)據(jù);

      分別對(duì)音數(shù)據(jù)和視頻數(shù)據(jù)編碼;

      將編碼后的音數(shù)據(jù)和視頻數(shù)據(jù)復(fù)用;

      將復(fù)用后的音視頻數(shù)據(jù)封裝成TS Packet。

      一種實(shí)施例中,M3U8文件還包括TS小片段存儲(chǔ)文件,在TS小片段文件生成之前或之后還包括生成所述TS小片段的名稱,并將TS小片段文件的名稱更新至TS小片段存儲(chǔ)文件。

      一種實(shí)施例中,M3U8文件還包括總索引文件,當(dāng)TS大片段文件拼接完成后,還包括將TS大片段索引文件更新至總索引文件的步驟。

      根據(jù)第二方面,一種實(shí)施例中提供一種HLS流媒體分片的虛擬拼接系統(tǒng),包括建立模塊、封裝模塊、疊加拼接模塊、第一判斷模塊、生成模塊、更新模塊和第二判斷模塊;

      建立模塊用于建立M3U8文件,M3U8文件包括TS大片段文件和TS大片段索引文件;

      封裝模塊用于讀取音視頻數(shù)據(jù)并將讀取的音視頻數(shù)據(jù)封裝成TS Packet;

      疊加拼接模塊用于疊加拼接TS Packet至所述TS大片段文件;

      第一判斷模塊用于判斷疊加拼接的TS Packet的時(shí)間片長(zhǎng)是否達(dá)到第一預(yù)設(shè)時(shí)間,若達(dá)到,產(chǎn)生模塊將第一預(yù)設(shè)時(shí)間的片長(zhǎng)生成TS小片段文件,并生成TS小片段文件的名稱;

      更新模塊用于將TS小片段文件的名稱更新至M3U8文件,并將TS小片段的數(shù)據(jù)信息及所在TS大片段的位置信息更新至TS大片段索引文件;

      第二判斷模塊用于判斷TS大片段文件的拼接是否達(dá)到結(jié)束條件,若達(dá)到,則TS大片段文件拼接完成。

      一種實(shí)施例中,還包括統(tǒng)計(jì)模塊,統(tǒng)計(jì)模塊用于統(tǒng)計(jì)TS大片段文件內(nèi)的疊加拼接的所有TS Packet時(shí)間片長(zhǎng),或者,統(tǒng)計(jì)模塊用于累計(jì)TS大片段文件內(nèi)生成的TS小片段文件數(shù)目。

      一種實(shí)施例中,封裝模塊包括:讀取單元、解復(fù)用單元、編碼單元、復(fù)用器和封裝單元

      讀取單元用于讀取音視頻數(shù)據(jù);

      解復(fù)用單元用于將所述音視頻數(shù)據(jù)解復(fù)用為音數(shù)據(jù)和視頻數(shù)據(jù);

      編碼單元用于分別對(duì)所述音數(shù)據(jù)和視頻數(shù)據(jù)編碼;

      復(fù)用器用于將編碼后的音數(shù)據(jù)和視頻數(shù)據(jù)復(fù)用;

      封裝單元用于將復(fù)用后的音視頻數(shù)據(jù)封裝成TS Packet。

      一種實(shí)施例中,M3U8文件還包括TS小片段存儲(chǔ)文件,生成模塊還用于在TS小片段文件生成之前或之后生成TS小片段的名稱,更新模塊還用于將TS小片段文件的名稱更新至TS小片段存儲(chǔ)文件。

      依據(jù)上述實(shí)施例的虛擬拼接方法,由于根據(jù)直接將封裝的TS Packet疊加拼接成TS大片段文件,省去了單獨(dú)的合并程序,減少了合并程序的進(jìn)程數(shù)目及合并程序產(chǎn)生的其他進(jìn)程數(shù)目,降低了系統(tǒng)資源占用率,而且,在合并TS大片段文件的過(guò)程中還對(duì)生成的TS小片段的名稱進(jìn)行更新,進(jìn)一步,還保證了M3U8文件的原有特性。

      附圖說(shuō)明

      圖1為現(xiàn)有流媒體分片的拼接流程圖;

      圖2為本例的流媒體分片的虛擬拼接流程圖;

      圖3為本例的流媒體分片的虛擬拼接系統(tǒng)原理圖。

      具體實(shí)施方式

      下面通過(guò)具體實(shí)施方式結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。

      實(shí)施例一:

      本例提供一種HLS流媒體分片的虛擬拼接方法,具體包括如下步驟,其流程圖如圖1所示。

      S100:建立M3U8文件。

      M3U8文件是M3U格式文件的一種,其格式是utf-8格式,M3U格式的文件只是存儲(chǔ)多媒體播放列表,提供了一個(gè)指向其他位置的音頻視頻文件的索引,本例的M3U8文件包括TS大片段文件和TS大片段索引文件,并以當(dāng)前時(shí)間戳分別對(duì)TS大片段文件和TS大片段索引文件命名,且TS大片段文件的名稱與TS大片段索引文件的名稱相同,只是后綴名不同,如,TS大片段文件的后綴名是.ts,而TS大片段索引文件的后綴名是.idx,其中,TS大片段文件由若干個(gè)TS Packet疊加拼接而成,TS大片段索引文件用于存儲(chǔ)小分片的數(shù)據(jù)信息及小分片在TS大片段文件中的位置信息,本例的小分片也由若干個(gè)TS Packet疊加拼接而成,小分片的時(shí)長(zhǎng)短,一般為10s,將小分片統(tǒng)稱為T(mén)S小片段文件。

      S200:讀取音視頻數(shù)據(jù)并將讀取的音視頻數(shù)據(jù)封裝成TS Packet。

      本步驟具體包括如下步驟:

      1)讀取音視頻數(shù)據(jù)。

      每次可以讀取預(yù)先設(shè)定數(shù)個(gè)字節(jié)的音視頻數(shù)據(jù)。

      2)將音視頻數(shù)據(jù)解復(fù)用為音數(shù)據(jù)和視頻數(shù)據(jù)。

      3)分別對(duì)音數(shù)據(jù)和視頻數(shù)據(jù)編碼,根據(jù)需要,可以分別將音數(shù)據(jù)和視頻數(shù)據(jù)編碼為不同的格式,如MP4格式、MOV格式、MPEG格式等。

      4)將編碼后的音數(shù)據(jù)和視頻數(shù)據(jù)復(fù)用為音視頻數(shù)據(jù)。

      5)將復(fù)用后的音視頻數(shù)據(jù)封裝成TS Packet。

      S300:疊加拼接TS Packet至TS大片段文件;

      為了實(shí)現(xiàn)HLS流媒體分片的虛擬拼接,本例是將封裝的TS Packet依次疊加拼接至TS大片段文件中。

      S400:判斷疊加拼接的TS Packet的片長(zhǎng)時(shí)間是否達(dá)到第一預(yù)設(shè)時(shí)間,若達(dá)到,將第一預(yù)設(shè)時(shí)間的片長(zhǎng)生成TS小片段文件。

      為了支持回看,M3U8文件還包括TS小片段存儲(chǔ)文件,TS小片段存儲(chǔ)文件用于存儲(chǔ)TS小片段文件的名稱,本步驟在TS Packet疊加拼接時(shí),還要判斷當(dāng)前疊加拼接的TS Packet的片長(zhǎng)時(shí)間是否達(dá)到第一預(yù)設(shè)時(shí)間,由于,HLS流媒體分片的時(shí)長(zhǎng)一般為2-10s,所以,本例的第一預(yù)設(shè)時(shí)間也為2-10s,優(yōu)先的,第一預(yù)設(shè)時(shí)間為10s;若達(dá)到10s,則將該第一預(yù)設(shè)時(shí)間的片長(zhǎng)生成TS小片段文件;并在TS小片段文件生成之前或之后生成TS小片段的名稱,然后,將TS小片段文件的名稱更新至TS小片段存儲(chǔ)文件中,該TS小片段文件的名稱是按時(shí)間戳順序命名的,如01.ts、02.ts、……100.ts。

      具體的,步驟S200-S400為一個(gè)內(nèi)循環(huán),其目的是將TS大片段文件內(nèi)的TS Packet分成TS小片段文件,其內(nèi)循環(huán)的結(jié)束條件是當(dāng)前循環(huán)內(nèi)疊加拼接的TS Packet的片長(zhǎng)時(shí)間為第一預(yù)設(shè)時(shí)間,若未達(dá)到第一預(yù)設(shè)時(shí)間,則返回內(nèi)循環(huán)步驟S200-S400。

      S500:將TS小片段的數(shù)據(jù)信息及所在TS大片段的位置信息更新至TS大片段索引文件。

      將TS小片段的數(shù)據(jù)信息,如數(shù)據(jù)字節(jié)的大小,及所在TS大片段的位置信息,如在TS大片段的位置偏移量,更新至TS大片段索引文件,通過(guò)TS大片段索引文件即可找到TS小片段的音視頻流。

      S600:判斷TS大片段文件的拼接是否達(dá)到結(jié)束條件,若達(dá)到,則TS大片段文件拼接完成。

      其中,結(jié)束條件為T(mén)S大片段文件內(nèi)的所有TS Packet時(shí)間片長(zhǎng)是否達(dá)到第二預(yù)設(shè)時(shí)間,則判斷TS大片段文件是否拼接完成的步驟包括:

      統(tǒng)計(jì)TS大片段文件內(nèi)的疊加拼接的所有TS Packet時(shí)間片長(zhǎng);

      判斷時(shí)間片長(zhǎng)是否達(dá)到第二預(yù)設(shè)時(shí)間,若達(dá)到,則完成TS大片段文件的拼接。第二預(yù)設(shè)時(shí)間是根據(jù)TS大片段的片長(zhǎng)時(shí)間確定的,如,第二預(yù)設(shè)時(shí)間可以是36-180s,具體的,當(dāng)TS小片段的片長(zhǎng)時(shí)間為10s時(shí),如果需要18個(gè)這樣的TS小片段疊加拼接,則第二預(yù)設(shè)時(shí)間是180s,當(dāng)TS大片段文件內(nèi)疊加拼接的所有TS Packet的時(shí)間片長(zhǎng)達(dá)到180s時(shí),該TS大片段文件拼接完成。

      在其他實(shí)施例中,結(jié)束條件為T(mén)S大片段文件內(nèi)生成的TS小片段數(shù)目是否達(dá)到預(yù)設(shè)閥值,則判斷TS大片段文件是否拼接完成,包括步驟:

      TS大片段文件內(nèi)每生成一個(gè)TS小片段文件時(shí)累計(jì)計(jì)數(shù);

      判斷累計(jì)的數(shù)值是否達(dá)到預(yù)設(shè)閥值,若達(dá)到,則完成TS大片段文件的拼接。如,每個(gè)TS小片段文件的時(shí)長(zhǎng)為10s,如要拼接成180s時(shí)長(zhǎng)的TS大片段文件,則需要18個(gè)TS小片段文件,該預(yù)設(shè)閥值為18,當(dāng)TS大片段文件內(nèi)的TS小片段文件的數(shù)目達(dá)到18時(shí),該TS大片段文件拼接完成。

      M3U8文件還包括總索引文件,當(dāng)TS大片段文件拼接完成后,還需要將TS大片段索引文件更新至總索引文件,通過(guò)總索引文件定位到具體的TS大片段文件。

      通過(guò)上述步驟S200-S600即可實(shí)現(xiàn)HLS流媒體分片的虛擬拼接,由于是將封裝的TS Packet疊加拼接成TS大片段文件,與采用獨(dú)立的合并程序相比,上述步驟極大地減少了合并進(jìn)程的數(shù)目,減少系統(tǒng)占用率。

      實(shí)施例二:

      基于實(shí)施例一,本例提供一種HLS流媒體分片的虛擬拼接系統(tǒng),其原理圖如圖3所示,包括建立模塊1、封裝模塊2、疊加拼接模塊3、第一判斷模塊4、生成模塊5、更新模塊6和第二判斷模塊7;本例的HLS流媒體分片的虛擬拼接系統(tǒng)中各個(gè)模塊的實(shí)現(xiàn)具體請(qǐng)參考實(shí)施例一中的步驟S100-S600。

      其中,建立模塊1用于建立M3U8文件,M3U8文件包括TS大片段文件、TS大片段索引文件、TS小片段存儲(chǔ)文件和總索引文件;封裝模塊2用于讀取音視頻數(shù)據(jù)并將讀取的音視頻數(shù)據(jù)封裝成TS Packet;疊加拼接模塊3用于疊加拼接TS Packet至TS大片段文件;第一判斷模塊4用于判斷疊加拼接的TS Packet的時(shí)間片長(zhǎng)是否達(dá)到第一預(yù)設(shè)時(shí)間,若達(dá)到,生成模塊5將第一預(yù)設(shè)時(shí)間的片長(zhǎng)生成TS小片段文件,并生成TS小片段文件的名稱;更新模塊6用于將TS小片段文件的名稱更新至TS小片段存儲(chǔ)文件中,并將TS小片段的數(shù)據(jù)信息及所在TS大片段的位置信息更新至TS大片段索引文件;第二判斷模塊7用于判斷TS大片段文件的拼接是否達(dá)到結(jié)束條件,若達(dá)到,則完成TS大片段文件的拼接。

      進(jìn)一步,封裝模塊2包括:讀取單元21、解復(fù)用單元22、編碼單元23、復(fù)用器24和封裝單元25;讀取單元21用于讀取音視頻數(shù)據(jù);解復(fù)用單元22用于將音視頻數(shù)據(jù)解復(fù)用為音數(shù)據(jù)和視頻數(shù)據(jù);編碼單元23用于分別對(duì)所述音數(shù)據(jù)和視頻數(shù)據(jù)編碼;復(fù)用器24用于將編碼后的音數(shù)據(jù)和視頻數(shù)據(jù)復(fù)用為音視頻數(shù)據(jù);封裝單元25用于將復(fù)用后的音視頻數(shù)據(jù)封裝成TS Packet。

      結(jié)束條件為T(mén)S大片段文件內(nèi)的所有TS Packet時(shí)間片長(zhǎng)是否達(dá)到第二預(yù)設(shè)時(shí)間,或者,TS大片段文件內(nèi)生成的TS小片段數(shù)目是否達(dá)到預(yù)設(shè)閥值,進(jìn)一步,本例的系統(tǒng)還包括統(tǒng)計(jì)模塊8,統(tǒng)計(jì)模塊8用于統(tǒng)計(jì)TS大片段文件內(nèi)的疊加拼接的所有TS Packet時(shí)間片長(zhǎng),或者,統(tǒng)計(jì)模塊8用于累計(jì)TS大片段文件內(nèi)生成的TS小片段文件數(shù)目,若達(dá)到,則完成TS大片段文件的拼接,同時(shí),統(tǒng)計(jì)模塊8將計(jì)時(shí)或計(jì)數(shù)清零,拼接下一個(gè)TS大片段文件時(shí),統(tǒng)計(jì)模塊8重新計(jì)時(shí)或計(jì)數(shù)。

      進(jìn)一步,當(dāng)TS大片段文件拼接完成后,更新模塊6還用于將TS大片段索引文件理新至總索引文件。

      以上應(yīng)用了具體個(gè)例對(duì)本發(fā)明進(jìn)行闡述,只是用于幫助理解本發(fā)明,并不用以限制本發(fā)明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員,依據(jù)本發(fā)明的思想,還可以做出若干簡(jiǎn)單推演、變形或替換。

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1