專利名稱:媒體文件的點播方法、系統(tǒng)和設備的制作方法
技術領域:
本發(fā)明涉及互聯(lián)網中的視頻和音頻點播技術,尤其涉及一種媒體文件的點 播方法、系統(tǒng)和設備。
背景技術:
隨著社會經濟的發(fā)展和科技進步,用戶對數(shù)據(jù)、圖像業(yè)務,特別是多媒體 業(yè)務方面的需求與日俱增,開拓新型的帶寬業(yè)務成為信息業(yè)的重要目標,而視
頻點播(VOD, Video on Demand)是寬帶業(yè)務中最有代表性的典型應用之一。 VOD使用戶可以根據(jù)自己的興趣,在計算機或電視上自由的點播流媒體服務器 中的媒體節(jié)目,主動性完全掌握在用戶手中,從根本上改變了用戶被動觀看節(jié) 目的不足。
傳統(tǒng)的VOD是釆用客戶端/服務器(C/S )連接模式提供點播業(yè)務的,由于 輸入/輸出(I/O)瓶頸的限制, 一臺流媒體服務器只能支持有限的并發(fā)流;而 要解決十萬、百萬級用戶同時收看的問題,不僅需要大量的流媒體服務器,還 需要極寬的網絡帶寬。因此,C/S模式已經稱為制約VOD發(fā)展的瓶頸。
目前的VOD系統(tǒng)多釆用點對點(P2P, Peer to Peer)技術,P2P技術是一 種通過系統(tǒng)間的直接交換所達成的計算機資源與信息共享的技術。P2P技術將 許多用戶終端組合成一個網絡,共享其中的帶寬,共同處理其中的信息。與傳 統(tǒng)的C/S模式不同,P2P工作方式中,每個用戶終端即是客戶端又是服務器。 以共享下載文件為例,下載同一個文件的眾多用戶終端中的每一個用戶終端只 需下載文件的一個片段,然后相互交換,最終每個用戶終端都能得到完整的文 件。P2P技術使用戶終端在享受服務器資源的同時,也可利用自身的空閑資源 為其他的用戶終端提供服務;由于資源可以在點對點之間傳輸,不一定經過流媒體服務器,這樣可以節(jié)約流媒體服務器的帶寬成本,在有限的帶寬資源下, 滿足大量的用戶同時在線點播節(jié)目的需求。
現(xiàn)有的VOD技術,無法對媒體文件按照時間劃分片段,因此,在用戶觀 看媒體節(jié)目并拖動進度條時,客戶端只能按照進度條占總進度的長度比例,向
服務器請求位于媒體文件總長相同比例處的媒體數(shù)據(jù)。例如用戶拖動后的進 度條占總進度的1/2,則客戶端向服務器請求位于媒體文件總長1/2處的媒體數(shù) 據(jù)。而由于媒體文件中各個數(shù)據(jù)包的大小存在不同,因此,通常媒體文件時長 并非與媒體文件的長度等比對應,例如 一個100兆(M)大小的媒體文件, 播放該媒體文件需要的總時長為1800秒(s),則位于第50M的媒體數(shù)據(jù)并不 一定是在第900s播放;同樣,第450s播放的并不一定是位于第25M的媒體數(shù) 據(jù)。
由此可知,現(xiàn)有的VOD技術中,用戶在客戶端上拖動進度條進行媒體數(shù)
據(jù)的請求,并不是按照真正的時間來請求的;并且服務器需要根據(jù)客戶端的進
度請求對媒體文件進行在線分析,從而定位所請求的媒體數(shù)據(jù),這個過程需要 花費較長的延遲時間。由于現(xiàn)有技術無法根據(jù)客戶端的進度請求,迅速定位媒 體文件中的媒體數(shù)據(jù),導致從拖動進度條到播放媒體節(jié)目的延遲時間較長,因 此給用戶帶來不好的使用體驗。
發(fā)明內容
有鑒于此,本發(fā)明的主要目的在于提供一種媒體文件的預處理方法、系統(tǒng) 和設備,以解決現(xiàn)有的媒體播放過程中,拖動進度條時延遲時間較長的問題。
為達到上述目的,本發(fā)明的技術方案是這樣實現(xiàn)的 本發(fā)明提供了一種媒體文件的點播方法,包括
服務器在接收到來自客戶端的媒體點播請求時,將自定義媒體文件中的索 引信息提供給所述客戶端;
服務器在接收到來自所述客戶端的播放進度請求時,根據(jù)所述播放進度請 求中攜帶的請求時間,在所述索引信息中查找與所述請求時間相對應的媒體數(shù)據(jù)起始偏移位置;
服務器根據(jù)所述媒體數(shù)據(jù)起始偏移位置,讀取所述自定義媒體文件中與所 述請求時間相對應的媒體數(shù)據(jù),并將所述媒體數(shù)據(jù)提供給所述客戶端。
所述索引信息包括原始媒體文件的總時長、原始媒體文件的數(shù)據(jù)包總數(shù)、
每個數(shù)據(jù)包的大小、原始媒體文件的頭部大小、平均碼率、內存管理單元總數(shù)、 每秒鐘的媒體數(shù)據(jù)在原始媒體文件中的起始偏移位置、每秒鐘的媒體數(shù)據(jù)中是 否存在關鍵幀、每秒鐘所包含的內存管理單元數(shù)量、每秒鐘所包含的數(shù)據(jù)包數(shù) 量。
所述將自定義媒體文件中的索引信息提供給客戶端之前,該方法還包括 服務器對所述原始媒體文件進行解析,得到對應的索引信息;
服務器組合所述原始媒體文件和索引信息,生成所述自定義媒體文件。
所述服務器組合所述原始媒體文件和索引信息,具體包括服務器將所述 索引信息以二進制的方式寫入所述原始媒體文件的尾部或頭部。
所述讀取自定義媒體文件中與請求時間相對應的媒體數(shù)據(jù),并將媒體數(shù)據(jù) 提供給客戶端,進一步包括
服務器將從自身磁盤所讀取的媒體數(shù)據(jù)緩存到內存中,則所述服務器再次 接收到媒體點播請求時,直接從所述內存中讀取所述媒體數(shù)據(jù),并提供給所述 客戶端;
在所述內存空間已滿的情況下,通過淘汰算法將點播頻率較低的媒體數(shù)據(jù) 從所述內存中刪除。
本發(fā)明還提供了一種媒體文件的點播方法,包括
客戶端向服務器發(fā)送媒體點播請求,并接收來自所述服務器的索引信息;
在媒體播放過程中,客戶端根據(jù)所述索引信息獲取進度條的拖放位置所對
應的請求時間,并將所述請求時間攜帶在播放進度請求中發(fā)送給所述服務器;
客戶端接收來自所述服務器的對應所述請求時間的媒體數(shù)據(jù),并進行媒體 播放。
所述索引信息包括原始媒體文件的總時長、原始媒體文件的數(shù)據(jù)包總數(shù)、每個數(shù)據(jù)包的大小、原始媒體文件的頭部大小、平均碼率、內存管理單元總數(shù)、 每秒鐘的媒體數(shù)據(jù)在原始媒體文件中的起始偏移位置、每秒鐘的媒體數(shù)據(jù)中是 否存在關鍵幀、每秒鐘所包含的內存管理單元數(shù)量、每秒鐘所包含的數(shù)據(jù)包數(shù)量。
所述獲取進度條的拖放位置所對應的請求時間,具體包括
客戶端根據(jù)所述進度條占總進度的比例,以及所述索引信息中的原始媒體
文件總時長,獲取所述拖放位置所對應的第一時間;
客戶端查找所述索引信息,判斷所述第一時間對應的媒體數(shù)據(jù)中是否存在
關鍵幀;
如果所述第一時間對應的媒體數(shù)據(jù)中存在關鍵幀,則確定所述第一時間為 拖放位置所對應的請求時間;否則,選取與所述第一時間最近的存在關鍵幀的 第二時間為拖放位置所對應的請求時間。
本發(fā)明還提供了一種媒體文件的點播系統(tǒng),包括
客戶端,用于根據(jù)來自服務器的索引信息,獲取進度條的拖放位置所對應 的請求時間,并將所述請求時間攜帶在播放進度請求中發(fā)送給所述服務器;接 收來自所述服務器的媒體數(shù)據(jù),進行媒體播放;
服務器,用于將自定義媒體文件中的索引信息提供給所述客戶端,并根據(jù) 來自所述客戶端的播放進度請求中的請求時間,查找所述索引信息,得到與所 述請求時間相對應的媒體數(shù)據(jù)起始偏移位置;且根據(jù)所述媒體數(shù)據(jù)起始偏移位 置,讀取所述自定義媒體文件中與所述請求時間相對應的媒體數(shù)據(jù)提供給所述 客戶端。
所述服務器包括
索引信息提供模塊,用于在接收到來自所述客戶端的媒體點播請求時,將 自定義媒體文件中的索引信息提供給所述客戶端,并供所述服務器自身進行索 引信息的查找;
起始偏移位置查找模塊,用于在接收到來自所述客戶端的播放進度請求時, 根據(jù)所述播放進度請求中的請求時間,查找所述索引信息,得到與所述請求時間相對應的媒體數(shù)據(jù)起始偏移位置;
媒體數(shù)據(jù)讀取模塊,用于根據(jù)所述媒體數(shù)據(jù)起始偏移位置,讀取所述自定 義媒體文件中與所述請求時間相對應的媒體數(shù)據(jù),并將所述媒體數(shù)據(jù)提供給所 述客戶端。
所述服務器還包括自定義媒體文件生成模塊,用于對所述原始媒體文件進 行解析,得到對應的索引信息,并組合所述原始媒體文件和索引信息,生成所 述自定義媒體文件。
所述客戶端包括
發(fā)送模塊,用于向所述服務器發(fā)送媒體點播請求和播放進度請求,所述播
放進度請求中攜帶請求時間;
請求時間獲取模塊,用于在媒體播放過程中,獲取進度條的拖放位置所對
應的請求時間;
接收模塊,用于接收來自所述服務器的索引信息和媒體數(shù)據(jù)。 本發(fā)明還提供了一種服務器,包括
索引信息提供模塊,用于在接收到來自客戶端的媒體點播請求時,將自定 義媒體文件中的索引信息提供給所述客戶端,并供所述服務器自身進行索引信 息的查找;
起始偏移位置查找模塊,用于在接收到來自所述客戶端的播放進度請求時, 根據(jù)所述播放進度請求中的請求時間,查找所述索引信息,得到與所述請求時 間相對應的媒體數(shù)據(jù)起始偏移位置;
媒體數(shù)據(jù)讀取模塊,用于根據(jù)所述媒體數(shù)據(jù)起始偏移位置,讀取所述自定 義媒體文件中與所述請求時間相對應的媒體數(shù)據(jù),并將所述媒體數(shù)據(jù)提供給所 述客戶端。
所述媒體數(shù)據(jù)讀取模塊包括
媒體數(shù)據(jù)緩存子模塊,用于將所述服務器從自身磁盤所讀取的媒體數(shù)據(jù)緩 存到內存中;
媒體數(shù)據(jù)更新子模塊,用于在所述服務器的內存空間已滿的情況下,通過淘汰算法將點播頻率較低的媒體數(shù)據(jù)從所述內存中刪除。
所述服務器還包括自定義媒體文件生成模塊,用于對所述原始媒體文件進 行解析,得到對應的索引信息,并組合所述原始媒體文件和索引信息,生成所
述自定義媒體文件。
本發(fā)明還提供了一種客戶端,包括
發(fā)送模塊,用于向服務器發(fā)送媒體點播請求和播放進度請求,所述播放進
度請求中攜帶請求時間;
請求時間獲取模塊,用于在媒體播放過程中,獲取進度條的拖放位置所對
應的請求時間;
接收模塊,用于接收來自所述服務器的索引信息和媒體數(shù)據(jù)。
所述請求時間獲取模塊包括
第一時間獲取子模塊,用于根據(jù)所述進度條占總進度的比例,以及所述索
引信息中的原始媒體文件總時長,獲取所述拖放位置所對應的第一時間;
第一時間判斷子模塊,用于查找所述索引信息,判斷所述第一時間對應的 媒體數(shù)據(jù)中是否存在關鍵幀;
請求時間確定子模塊,用于根據(jù)判斷結果,確定所述第一時間為拖放位置 所對應的請求時間,或者選取與所述第一時間最近的存在關鍵幀的第二時間為 拖放位置所對應的請求時間。
本發(fā)明所提供的媒體文件的預處理方法、系統(tǒng)和設備,通過對原始媒體文 件解析得到的索引信息,索引信息在不改變原始媒體文件的前提下,將原始媒 體文件按照時間劃分為各個片段,并記錄有每秒鐘的媒體數(shù)據(jù)中是否含有關鍵 幀的相關信息;索引信息寫入原始媒體文件的尾部或頭部,形成新的自定義媒 體文件;本發(fā)明使得用戶在觀看節(jié)目并拖動播放進度條時,能夠按照時間請求 數(shù)據(jù),從而迅速從服務器獲取拖動位置對應時間的媒體數(shù)據(jù),縮短了拖動進度 條時的延遲時間,增加了用戶的使用體驗;并且由于本發(fā)明將原始媒體文件以 時間為單位進行了邏輯上的切割,因此,對于P2P模式的點播系統(tǒng)而言,任何
一個用戶終端在點播了原始媒體文件中的一個片段之后,都可以向流媒體服務器上報自己的資源信息,從而成為一個有效的種子,可以向其他用戶終端分享 本地的媒體數(shù)據(jù),最大限度的做到了資源共享,且更為有效的降低了網絡帶寬。
圖l為本發(fā)明中服務器實現(xiàn)的媒體文件的點播方法流程圖; 圖2為本發(fā)明中客戶端實現(xiàn)的媒體文件的點播方法流程圖; 圖3為本發(fā)明一種媒體文件點播系統(tǒng)的組成結構示意圖。
具體實施例方式
下面結合附圖和具體實施例對本發(fā)明的技術方案進一步詳細闡述。 本發(fā)明在流媒體服務器上對原始媒體文件進行預處理,通過解析得到原始 媒體文件對應的索引信息,包括原始媒體文件的總時長、原始媒體文件的數(shù) 據(jù)包總數(shù)、每個數(shù)據(jù)包的大小、原始媒體文件的頭部大小、平均碼率、內存管 理單元總數(shù)、每秒鐘的媒體數(shù)據(jù)在原始媒體文件中的起始偏移位置、每秒鐘的 媒體數(shù)據(jù)中是否存在關鍵幀、每秒鐘所包含的內存管理單元數(shù)量、每秒鐘所包 含的數(shù)據(jù)包數(shù)量等等。解析得到的索引信息保存在數(shù)據(jù)結構中,并以二進制的 方式寫入原始媒體文件的尾部或頭部,從而生成新的自定義媒體文件。需要指 出的是,將索引信息寫入原始媒體文件的頭部,使得原始媒體文件的位置發(fā)生 變化,需要重新修改原始媒體文件的位置;而將索引信息寫入原始媒體文件的 尾部,則不需要修改原始媒體文件的位置,其操作相對簡單,因此,實際應用 中優(yōu)選的將索引信息寫入原始媒體文件的尾部。
保存索引信息的數(shù)據(jù)結構如下<formula>formula see original document page 13</formula>/*the max number of memory manage unit in one wmv file*/ 弁define MEDIA_FILE—MAX—MEM—MGRJJNITS 1000
/* designed for mem manage unit */ typedef struct
/*the memory manage unit offset in wmv file*/ unsigned long long memMgrUnitOffset;
/*the size of memory manage unit */
unsigned int size;
/*the begin second in this memory manage unit unsigned int beginSecond; /*the end second in this memory manage unit */ unsigned int endSecond; }MemMrgUnit;
typedef struct
/*total seconds in this wmv file*/ unsigned int total Seconds;
/*total packets in this wmv file*/
unsigned int totalPackets;
/*packet size */
unsigned int packetSize;
/*the size of this wmv file header
unsigned int headerSize;
/*average biterate*/
unsigned int aveB iterate;
/*the number of memory manage unit in this wmv file*/unsigned int totalMemMgrUnit; /*the offset byte of seekable flag in wmv file*/ unsigned int mediaHeaderFlagOffset; /* seconds offset in this wmv file*/
unsigned long long fileSecondOffset[MAX DURATION]; /*if this second has I frame*/
unsigned int secondHasIFrame[MAX—DURATION]; /*the packets number of this second*/ unsigned int secondHasPackets[MAX—DURATION]; /*which memory manage unit this second belong to*/ unsigned int secondBelongToMemMgr[MAX—DURATION]; /*the array of memory manage unit*/
MemMrgUnit memMrgUint[MEDIA—FILE—MAX—MEM—MGR—UNITS]; charpad[512— (sizeof (dummySecondlndex) %512)]; } dummy Secondlndex;
#endif
上述數(shù)據(jù)結構中包括對變量的宏定義,定義媒體文件的最大時長 MAX—DURATION為3600*4秒,即4個小時;定義內存管理單元大小 MEM—MGR—UNIT為1*1024*1024字節(jié),即1M;定義內存管理單元的最大數(shù) 量MEDIA—FILE—MAX—MEM—MGR—UNITS為1000。所謂內存管理單元是指, 服務器將自身的內存存儲空間劃分為多個內存管理單元,并將從磁盤讀取的媒 體數(shù)據(jù)以秒為單位分塊緩存到各個內存管理單元中,從而在下次進行媒體點播 并需要讀取所述媒體數(shù)據(jù)時,服務器可以直接從內存中讀取,而不需要再讀磁 盤,能夠提高效率。并且,出于內存存儲空間有限的考慮,在內存空間已滿的 情況下,通過淘汰算法將點播頻率較低的媒體數(shù)據(jù)從內存中刪除,從而留出空 間用來存儲新的媒體數(shù)據(jù)。從而,在實際應用中,通常將點播頻率較高的媒體數(shù)據(jù)存儲在內存管理單元中,而將點播頻率較低的媒體文件存儲在磁盤中。
上述數(shù)據(jù)結構中還包括每個內存管理單元的開始秒(beginSecond )和結東 秒(endSecond),以及解析原始媒體文件得到的索引信息,包括原始媒體文 件總時長(totalSeconds)、原始媒體文件的數(shù)據(jù)包總數(shù)(totalPackets )、每個數(shù) 據(jù)包的大小(packetSize)、原始媒體文件頭部大小(headerSize )、平均碼率
(aveBiterate )、內存管理單元總數(shù)(totalMemMgrUnit )、每秒鐘的媒體數(shù)據(jù)在 原始媒體文件中的起始偏移位置(long long fileSecondOffset)、每秒鐘的媒體數(shù) 據(jù)中是否存在關鍵幀(sec.ondHasIFrame)、每秒鐘所包含的內存管理單元數(shù)量
(secondBelongToMemMgr )、每秒鐘所包含的數(shù)據(jù)包數(shù)量(secondHasPackets ) 等等。
需要指出的是,本發(fā)明中對原始媒體文件的預處理支持在線和離線的兩種 操作方式。所謂離線的預處理,是指用戶利用預處理工具在離線情況下對原始 媒體文件進行解析得到索引信息,并生成由原始媒體文件和索引信息組成的自 定義媒體文件,然后將預處理后的自定義媒體文件上載到流媒體服務器中。所 謂在線的預處理,是指流媒體服務器對上載的原始媒體文件進行解析,并生成 由原始媒體文件和索引信息組成的自定義媒體文件。由此可知,在線的預處理 需要經歷一定的在線時延,且對流媒體服務器的性能要求較高,因此,實際應 用中,優(yōu)選的采用離線的預處理方式。
本發(fā)明基于上述預處理操作所實現(xiàn)的媒體文件點播方法,對于C/S模式和 P2P模式的點播系統(tǒng)都是適用的。相同的地方在于,兩種模式的點播系統(tǒng)都是 在流媒體服務器上對原始媒體文件進行預處理,解析得到索引信息。不同的地 方在于,C/S模式的點播系統(tǒng)中,各個用戶終端都是統(tǒng)一的從流媒體服務器獲 取媒體文件,也即媒體文件的提供者只能是流媒體服務器;P2P模式的點播系 統(tǒng)中,媒體文件最初是從流媒體服務器傳輸?shù)絇2P網絡中的用戶終端,但由于 P2P支持資源在用戶終端之間的傳輸,因此,媒體文件的提供者可以是流媒體 服務器,也可以是擁有媒體文件的用戶終端。
本發(fā)明中為了描述方便,將作為媒體文件提供者的設備統(tǒng)稱為服務器,將作為媒體文件接收者的設備統(tǒng)稱為客戶端。從而,在c/s模式的點播系統(tǒng)中,
服務器即指流媒體服務器,客戶端即指用戶終端;在P2P模式的點播系統(tǒng)中, 服務器可以是流媒體服務器,也可以是擁有媒體文件的用戶終端,而客戶端即 指請求接收媒體文件的用戶終端。
下面,從服務器的實現(xiàn)上對本發(fā)明的媒體文件點播方法進行詳細闡述,如 圖i所示,圖i為本發(fā)明中服務器實現(xiàn)的媒體文件的點播方法流程圖,主要包
括以下步驟
步驟101,服務器在接收到來自客戶端的媒體點播請求時,將自定義媒體 文件中的索引信息提供給客戶端。
客戶端需要點播服務器上的自定義媒體文件時,向服務器發(fā)送媒體點播請 求;而服務器接收到來自客戶端的媒體點播請求后,先將自定義媒體文件中的
索引信息發(fā)送給客戶端,由客戶端進行接收。
步驟102,服務器在接收到來自客戶端的播放進度請求時,根據(jù)播放進度 請求中的請求時間,在索引信息查找與請求時間相對應的媒體數(shù)據(jù)起始偏移位 置。
在服務器向客戶端播放自定義媒體文件的過程中,根據(jù)來自客戶端的播放
進度請求中的請求時間,在索引信息中查找;由于索引信息中將原始媒體文件
按照時間劃分為不同的片段,實際應用中通常是按秒劃分,因此服務器可以根 據(jù)每秒鐘的媒體數(shù)據(jù)在原始媒體文件中的起始偏移位置,找到與請求時間相對
應的媒體數(shù)據(jù)起始偏移位置。例如 一個媒體文件的時長為60s,按秒劃分為 60個片段,每秒鐘分別對應一部分媒體數(shù)據(jù),即每秒鐘的開始時刻都對應著原 始媒體文件中的一個起始偏移位置,當客戶端請求第45s的媒體數(shù)據(jù)時,服務 器可以迅速找到第45s的開始時刻在媒體文件中所對應的起始偏移位置。
步驟103,服務器根據(jù)媒體數(shù)據(jù)起始偏移位置,讀取自定義媒體文件中與 請求時間相對應的媒體數(shù)據(jù),并將媒體數(shù)據(jù)提供給客戶端。
服務器將自身的內存存儲空間劃分為多個內存管理單元,并將從磁盤讀取 的媒體數(shù)據(jù)以秒為單位分塊緩存到各個內存管理單元中,從而在下次進行媒體點播并需要讀取所述媒體數(shù)據(jù)時,服務器可以直接從內存中讀取,而不需要再 讀磁盤,能夠提高效率。并且,出于內存存儲空間有限的考慮,在內存空間已 滿的情況下,通過淘汰算法將點播頻率較低的媒體數(shù)據(jù)從內存中刪除,從而留 出空間用來存儲新的媒體數(shù)據(jù)。從而,在實際應用中,通常將點播頻率較高的 媒體數(shù)據(jù)存儲在內存管理單元中,而將點播頻率較低的媒體文件存儲在磁盤中。 下面舉例說明淘汰算法的搡作,在存儲空間為1G的內存中存儲有媒體數(shù)
據(jù)A、 B、 C、 D,由于這些媒體數(shù)據(jù)占滿了內存的存儲空間,從而比較各個媒 體數(shù)據(jù)的點播頻率,并發(fā)現(xiàn)媒體數(shù)據(jù)C的點播頻率最低;因此服務器將媒體數(shù) 據(jù)C從內存中刪除,從而在內存中留出一定的空間,用來存儲新的媒體數(shù)據(jù)。 當內存空間再次占滿時,繼續(xù)采用上述相同的操作,將當前的內存中點播頻率 最低的媒體文件刪除。
接續(xù)步驟102中的舉例,服務器找到第45s的開始時刻在媒體文件中所對 應的起始偏移位置后,即從該起始偏移位置開始,讀取第45s所對應的媒體數(shù) 據(jù)提供給客戶端;然后,繼續(xù)按照媒體數(shù)據(jù)的存儲順序讀取第46s到60s的媒 體數(shù)據(jù)提供給客戶端。
下面,從客戶端的實現(xiàn)上對本發(fā)明的媒體文件點播方法進一步詳細闡述, 如圖2所示,圖2為本發(fā)明中客戶端實現(xiàn)的媒體文件的點播方法流程圖,主要 包括以下步驟
步驟201,客戶端向服務器發(fā)送媒體點播請求,并接收來自服務器的索引信息。
步驟202,客戶端在媒體播放過程中,根據(jù)索引信息,獲取進度條的拖放 位置所對應的請求時間,并將請求時間攜帶在播放進度請求中發(fā)送給服務器。
客戶端根據(jù)拖放后的進度條占總進度的比例,以及索引信息中的原始媒體 文件總時長,計算得到拖放位置所對應的第一時間。然后,查找索引信息,由 于索引信息中存儲有每秒鐘的媒體數(shù)據(jù)中是否存在關鍵幀的信息,從而可以判 斷第一時間對應的媒體數(shù)據(jù)中是否存在關鍵幀,如果存在,則確定第一時間為 拖放位置所對應的請求時間;否則,選取與第一時間最近的存在關鍵幀的第二時間為拖放位置所對應的請求時間。
媒體文件中并不是每個數(shù)據(jù)包都存在關鍵幀,而客戶端的媒體播放工具在 播放媒體數(shù)據(jù)時,是通過查找關鍵幀來進行的,如果服務器發(fā)給客戶端的媒體 數(shù)據(jù)中不存在關鍵幀,則客戶端的播放器無法找到關鍵幀,可能導致播放失敗。 因此,本發(fā)明中通過上述的操作手段可以保證客戶端發(fā)送給服務器的請求時間 所對應的媒體數(shù)據(jù)中存在關鍵幀,從而確保媒體播放工具能夠正常播放媒體數(shù)
據(jù)。舉例說明如下
客戶端計算得到拖放位置所對應的第一時間為30s,根據(jù)每秒鐘的媒體數(shù) 據(jù)中是否存在關鍵幀的信息,客戶端判斷出第30s的媒體數(shù)據(jù)中不存在關鍵幀, 而查找相鄰的第29s的媒體數(shù)據(jù)中不存在關鍵幀,第31s的媒體數(shù)據(jù)中存在關 鍵幀,從而可以選擇第31s為拖放位置所對應的請求時間,并將請求時間攜帶 在播放進度請求中發(fā)送給服務器。服務器接收到來自客戶端的播放進度請求后, 向客戶端提供第31s的媒體數(shù)據(jù),而并非第30s的媒體數(shù)據(jù)。
步驟203,客戶端接收來自服務器的對應請求時間的媒體數(shù)據(jù),并進行媒 體播放。
接續(xù)步驟202中的舉例,服務器從第31s開始,將第31s之后的媒體數(shù)據(jù) 按存儲順序依次提供給客戶端;而客戶端則從第31s開始,按序進行媒體數(shù)據(jù) 的播放,直到播放結束。
為實現(xiàn)上述本發(fā)明的媒體點播方法,本發(fā)明還提供了 一種媒體點播系統(tǒng), 如圖3所示,包括相互連接的客戶端10和服務器20??蛻舳薎O,用于向服務 器20發(fā)送媒體點播請求,并接收來自服務器20的索引信息;在媒體播放過程 中,根據(jù)索引信息,獲取進度條的拖放位置所對應的請求時間,并將請求時間 攜帶在播放進度請求中發(fā)送給服務器20;還用于接收來自服務器20的對應請 求時間的媒體數(shù)據(jù),并進行媒體播放。服務器20,用于在接收到來自客戶端IO 的媒體點播請求時,將自定義媒體文件中的索引信息提供給客戶端10;還用于 在接收到來自客戶端10的播放進度請求時,根據(jù)播放進度請求中的請求時間, 在索引信息中查找與請求時間相對應的媒體數(shù)據(jù)起始偏移位置;并根據(jù)媒體數(shù)據(jù)起始偏移位置,讀取自定義媒體文件中與請求時間相對應的媒體數(shù)據(jù)提供給 客戶端IO。
其中,客戶端IO包括發(fā)送模塊11、請求時間獲取模塊12和接收模塊13。 發(fā)送模塊ll,用于向服務器20發(fā)送媒體點播請求和播放進度請求,播放進度 請求中攜帶請求時間。請求時間獲取模塊12,與發(fā)送模塊ll相連接,用于在 媒體播放過程中,獲取進度條的拖放位置所對應的請求時間。接收模塊13,與 發(fā)送模塊ll相連接,用于根據(jù)發(fā)送的媒體點播請求或播放進度請求,接收來自 服務器20的索引信息求或媒體數(shù)據(jù)。
請求時間獲取模塊12還包括第一時間獲取子模塊121、第一時間判斷子 模塊122和請求時間確定子模塊123。第一時間獲取子模塊121,用于根據(jù)進度 條占總進度的比例,以及索引信息中的原始媒體文件總時長,獲取拖放位置所 對應的第一時間。第一時間判斷子模塊122,與第一時間獲取子模塊121相連
接,用于查找索引信息,判斷第一時間對應的媒體數(shù)據(jù)中是否存在關鍵幀。請 求時間確定子模塊123,與第一時間判斷子模塊122相連接,用于根據(jù)判斷結 果,如果第一時間對應的媒體數(shù)據(jù)中存在關鍵幀,則確定第一時間為拖放位置 所對應的請求時間;否則,選取與第一時間最近的存在關鍵幀的第二時間為拖 放位置所對應的請求時間。
服務器20包括自定義媒體文件生成模塊21、索引信息提供模塊22、起 始偏移位置查找模塊23和媒體數(shù)據(jù)讀取模塊24。自定義媒體文件生成模塊21, 用于對原始媒體文件進行解析,得到對應的索引信息,并組合原始媒體文件和 索引信息,生成自定義媒體文件。索引信息提供模塊22,與自定義媒體文件生 成模塊21相連接,用于在接收到來自客戶端10的媒體點播請求時,將自定義 媒體文件中的索引信息提供給10客戶端,并供服務器20自身進行索引信息的 查找。起始偏移位置查找模塊23,與索引信息提供模塊22相連接,用于在接 收到來自客戶端10的播放進度請求時,根據(jù)播放進度請求中的請求時間,在索 引信息中查找與請求時間相對應的媒體數(shù)據(jù)起始偏移位置。媒體數(shù)據(jù)讀取模塊 24,與起始偏移位置查找模塊23相連接,用于根據(jù)媒體數(shù)據(jù)起始偏移位置,讀取自定義媒體文件中與請求時間相對應的媒體數(shù)據(jù),并將媒體數(shù)據(jù)提供給客戶 端10。
其中,媒體數(shù)據(jù)讀取模塊24還包括相互連接的媒體數(shù)據(jù)緩存子模塊241 和媒體數(shù)據(jù)更新子模塊242。媒體數(shù)據(jù)緩存子模塊241 ,用于將服務器20從自 身磁盤所讀取的媒體數(shù)據(jù)緩存到內存中。媒體數(shù)據(jù)更新子模塊242,用于在服 務器20的內存空間已滿的情況下,通過淘汰算法將長期不被點播的媒體數(shù)據(jù)從 內存中刪除。
綜上所述,由于本發(fā)明預先對原始媒體文件進行解析,得到索引信息,從 而在媒體文件的播放過程中,無需服務器再對原始媒體文件進行解析,縮短了 服務器的響應時間,在使用體驗上即為拖動進度條時的延遲時間的縮短。另外, 本發(fā)明中的媒體文件都是以時間為單位進行邏輯上的切割,使得用戶可以更加 直觀的按照時間請求數(shù)據(jù),從而達到較佳的體驗效果。
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。
權利要求
1. 一種媒體文件的點播方法,其特征在于,包括服務器在接收到來自客戶端的媒體點播請求時,將自定義媒體文件中的索引信息提供給所述客戶端;服務器在接收到來自所述客戶端的播放進度請求時,根據(jù)所述播放進度請求中攜帶的請求時間,在所述索引信息中查找與所述請求時間相對應的媒體數(shù)據(jù)起始偏移位置;服務器根據(jù)所述媒體數(shù)據(jù)起始偏移位置,讀取所述自定義媒體文件中與所述請求時間相對應的媒體數(shù)據(jù),并將所述媒體數(shù)據(jù)提供給所述客戶端。
2、 根據(jù)權利要求l所述媒體文件的點播方法,其特征在于,所述索引信息 包括原始媒體文件的總時長、原始媒體文件的數(shù)據(jù)包總數(shù)、每個數(shù)據(jù)包的大 小、原始媒體文件的頭部大小、平均碼率、內存管理單元總數(shù)、每秒鐘的媒體 數(shù)據(jù)在原始媒體文件中的起始偏移位置、每秒鐘的媒體數(shù)據(jù)中是否存在關鍵幀、 每秒鐘所包含的內存管理單元數(shù)量、每秒鐘所包含的數(shù)據(jù)包數(shù)量。
3、 根據(jù)權利要求l或2所述媒體文件的點播方法,其特征在于,所述將自定義媒體文件中的索引信息提供給客戶端之前,該方法還包括 服務器對所述原始媒體文件進行解析,得到對應的索引信息; 服務器組合所述原始媒體文件和索引信息,生成所述自定義媒體文件。
4、 根據(jù)權利要求3所述媒體文件的點播方法,其特征在于,所述服務器組 合所述原始媒體文件和索引信息,具體包括服務器將所述索引信息以二進制 的方式寫入所述原始媒體文件的尾部或頭部。
5、 根據(jù)權利要求l所述媒體文件的點播方法,其特征在于,所述讀取自定 義媒體文件中與請求時間相對應的媒體數(shù)據(jù),并將媒體數(shù)據(jù)提供給客戶端,進 一步包括服務器將從自身磁盤所讀取的媒體數(shù)據(jù)緩存到內存中,則所述服務器再次 接收到媒體點播請求時,直接從所述內存中讀取所述媒體數(shù)據(jù),并提供給所述客戶端;在所述內存空間已滿的情況下,通過淘汰算法將點播頻率較低的媒體數(shù)據(jù) 從所述內存中刪除。
6、 一種媒體文件的點播方法,其特征在于,包括客戶端向服務器發(fā)送媒體點播請求,并接收來自所述服務器的索引信息; 在媒體播放過程中,客戶端根據(jù)所述索引信息獲取進度條的拖放位置所對 應的請求時間,并將所述請求時間攜帶在播放進度請求中發(fā)送給所述服務器; 客戶端接收來自所述服務器的對應所述請求時間的媒體數(shù)據(jù),并進行媒體
7、 根據(jù)權利要求6所述媒體文件的點播方法,其特征在于,所述索引信息包括原始媒體文件的總時長、原始媒體文件的數(shù)據(jù)包總數(shù)、每個數(shù)據(jù)包的大小、原始媒體文件的頭部大小、平均碼率、內存管理單元總數(shù)、每秒鐘的媒體 數(shù)據(jù)在原始媒體文件中的起始偏移位置、每秒鐘的媒體數(shù)據(jù)中是否存在關鍵幀、 每秒鐘所包含的內存管理單元數(shù)量、每秒鐘所包含的數(shù)據(jù)包數(shù)量。
8、 根據(jù)權利要求6或7所述媒體文件的點播方法,其特征在于,所述獲取 進度條的拖放位置所對應的請求時間,具體包括客戶端根據(jù)所述進度條占總進度的比例,以及所述索引信息中的原始媒體 文件總時長,獲取所述拖放位置所對應的第一時間;客戶端查找所述索引信息,判斷所述第 一 時間對應的媒體數(shù)據(jù)中是否存在關鍵幀;如果所述第一時間對應的媒體數(shù)據(jù)中存在關鍵幀,則確定所述第一時間為拖放位置所對應的請求時間;否則,選取與所述第一時間最近的存在關鍵幀的 第二時間為拖放位置所對應的請求時間。
9、 一種媒體文件的點播系統(tǒng),其特征在于,包括客戶端,用于根據(jù)來自服務器的索引信息,獲取進度條的拖放位置所對應的請求時間,并將所述請求時間攜帶在播放進度請求中發(fā)送給所述服務器;接 收來自所述服務器的媒體數(shù)據(jù),進行媒體播放;服務器,用于將自定義媒體文件中的索引信息提供給所述客戶端,并根據(jù) 來自所述客戶端的播放進度請求中的請求時間,查找所述索引信息,得到與所述請求時間相對應的媒體數(shù)據(jù)起始偏移位置;且根據(jù)所述媒體數(shù)據(jù)起始偏移位置,讀取所述自定義媒體文件中與所述請求時間相對應的媒體數(shù)據(jù)提供給所述 客戶端。
10、 根據(jù)權利要求9所述媒體文件的點播系統(tǒng),其特征在于,所述服務器 包括索引信息提供模塊,用于在接收到來自所述客戶端的媒體點播請求時,將 自定義媒體文件中的索引信息提供給所述客戶端,并供所述服務器自身進行索 引信息的查找;起始偏移位置查找模塊,用于在接收到來自所述客戶端的播放進度請求時, 根據(jù)所述播放進度請求中的請求時間,查找所述索引信息,得到與所述請求時 間相對應的媒體數(shù)據(jù)起始偏移位置;媒體數(shù)據(jù)讀取模塊,用于根據(jù)所述媒體數(shù)據(jù)起始偏移位置,讀取所述自定 義媒體文件中與所述請求時間相對應的媒體數(shù)據(jù),并將所述媒體數(shù)據(jù)提供給所 述客戶端。
11、 根據(jù)權利要求9或IO所述媒體文件的點播系統(tǒng),其特征在于,所述服 務器還包括自定義媒體文件生成模塊,用于對所述原始媒體文件進行解析,得 到對應的索引信息,并組合所述原始媒體文件和索引信息,生成所述自定義媒 體文件。
12、 根據(jù)權利要求9所述媒體文件的點播系統(tǒng),其特征在于,所述客戶端 包括發(fā)送模塊,用于向所述服務器發(fā)送媒體點播請求和播放進度請求,所述播 放進度請求中攜帶請求時間;請求時間獲取模塊,用于在媒體播放過程中,獲取進度條的拖放位置所對 應的請求時間;接收模塊,用于接收來自所述服務器的索引信息和媒體數(shù)據(jù)。
13、 一種服務器,其特征在于,包括索引信息提供模塊,用于在接收到來自客戶端的媒體點播請求時,將自定 義媒體文件中的索引信息提供給所述客戶端,并供所述服務器自身進行索引信 息的査找;起始偏移位置查找模塊,用于在接收到來自所述客戶端的播放進度請求時, 根據(jù)所述播放進度請求中的請求時間,查找所述索引信息,得到與所述請求時 間相對應的媒體數(shù)據(jù)起始偏移位置;媒體數(shù)據(jù)讀取模塊,用于根據(jù)所述媒體數(shù)據(jù)起始偏移位置,讀取所述自定 義媒體文件中與所述請求時間相對應的媒體數(shù)據(jù),并將所述媒體數(shù)據(jù)提供給所 述客戶端。
14、 根據(jù)權利要求13所述服務器,其特征在于,所述媒體數(shù)據(jù)讀取模塊包括媒體數(shù)據(jù)緩存子模塊,用于將所述服務器從自身磁盤所讀取的媒體數(shù)據(jù)緩 存到內存中;媒體數(shù)據(jù)更新子模塊,用于在所述服務器的內存空間已滿的情況下,通過 淘汰算法將點播頻率較低的媒體數(shù)據(jù)從所述內存中刪除。
15、 根據(jù)權利要求13或14所述服務器,其特征在于,所述服務器還包括 自定義媒體文件生成模塊,用于對所述原始媒體文件進行解析,得到對應的索 引信息,并組合所述原始媒體文件和索引信息,生成所述自定義媒體文件。
16、 一種客戶端,其特征在于,包括發(fā)送模塊,用于向服務器發(fā)送媒體點播請求和播放進度請求,所述播放進 度請求中攜帶請求時間;請求時間獲取模塊,用于在媒體播放過程中,獲取進度條的拖放位置所對 應的請求時間;接收模塊,用于接收來自所述服務器的索引信息和媒體數(shù)據(jù)。
17、 根據(jù)權利要求16所述客戶端,其特征在于,所述請求時間獲取模塊包括1第一時間獲取子模塊,用于根據(jù)所述進度條占總進度的比例,以及所述索引信息中的原始媒體文件總時長,獲取所述拖放位置所對應的第 一 時間; 第一時間判斷子模塊,用于查找所述索引信息,判斷所述第一時間對應的媒體數(shù)據(jù)中是否存在關鍵幀;請求時間確定子模塊,用于根據(jù)判斷結果,確定所述第一時間為拖放位置所對應的請求時間,或者選取與所述第一時間最近的存在關鍵幀的第二時間為拖放位置所對應的請求時間。
全文摘要
本發(fā)明公開了一種媒體文件的點播方法,包括服務器在接收到來自客戶端的媒體點播請求時,將自定義媒體文件中的索引信息提供給客戶端;服務器在接收到來自客戶端的播放進度請求時,根據(jù)播放進度請求中的請求時間,在索引信息中查找與請求時間相對應的媒體數(shù)據(jù)起始偏移位置;服務器根據(jù)媒體數(shù)據(jù)起始偏移位置,讀取自定義媒體文件中與請求時間相對應的媒體數(shù)據(jù)并提供給客戶端。本發(fā)明還公開了一種媒體文件的點播系統(tǒng)和設備,通過對原始媒體文件解析得到的索引信息,將原始媒體文件按照時間劃分為各個片段,使得用戶在觀看節(jié)目并拖動播放進度條時,能夠按照時間請求數(shù)據(jù),從而迅速獲取拖動位置對應時間的媒體數(shù)據(jù),增加了用戶的使用體驗。
文檔編號H04N7/24GK101287107SQ20081011138
公開日2008年10月15日 申請日期2008年5月29日 優(yōu)先權日2008年5月29日
發(fā)明者德 喻, 王濤偉 申請人:騰訊科技(深圳)有限公司