專利名稱:定位無索引avi 文件播放位置的方法、裝置及播放器的制作方法
技術領域:
本發明涉及音視頻播放的技術領域,尤其涉及一種定位無索引AVI文件的播放位置的方法及裝置,以及一種用于播放無索引AVI文件的播放器。
背景技術:
AVI (Audio Video Interleaved,音頻視頻交錯格式)格式的視音頻文件(簡稱AVI文件)是經過編碼的視音頻數據流,分為多個數據塊(chunk),每個數據塊均包含相應的標識信息,該標識信息包括數據塊內容(音頻、視頻或其它信息)、塊大小、是否壓縮數據等信息。通過分析上述標識信息為每一數據塊建立對應的索引,用來指示數據塊的位置、大小及是否關鍵幀等信息,以幫助定位。也就是說,AVI文件含三部分:文件頭、數據塊和索引塊,其中,文件頭包括前述的標識信息,數據塊是實際的視音頻數據,索引塊包括指示數據塊在文件中的位置等信息。AVI文件的索引塊是可選的,索引的作用在于幫助文件播放時進行定位,因此使得用戶不必搜索與分析整個文件即可存取文件中的特定部分。對于無索引的AVI文件,目前采用的方法是通過分析AVI文件的視頻和音頻數據塊來重建音頻和視頻索引進而實現播放定位。對無索引的AVI文件重建索引時,由于無法獲知任意一個數據塊是否關鍵幀的起始數據塊,當前的做法是把每個數據塊都當作關鍵幀的起始數據塊。這種做法雖然可以實現對無索引AVI文件的播放定位,然而,由于將每個數據塊都視為關鍵幀的起始數據塊,在將任意一數據塊作為關鍵幀起始數據塊送到解碼器進行解碼后發現其實際并非關鍵幀的起始數據塊,此時只能將解碼的幀顯示給用戶或者等待下一個關鍵幀I幀的出現,這將導致播放定位后的幾秒內畫面出現異常(播放異常的具體表現取決于不同的視頻編解碼器)或響應慢,給用戶帶來不佳的觀賞體驗。
發明內容
本發明要解決的主要技術問題是,提供一種可以定位無索引AVI文件的播放位置的方法及裝置。根據本發明的一個方面,提供一種定位無索引AVI文件的播放位置的方法,包括:分析步驟,對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊;索引步驟,根據所有區間的關鍵幀起始數據塊重建索引;定位步驟,根據外部定位控制數據并結合重建后的索引定位AVI文件的播放位置,輸出定位到的播放位置。所述找出每個區間內具有最大數據量的數據塊的過程包括:將該區間內的第一個數據塊的數據量作為最大值變量;遍歷該區間內的所有數據塊,將所述第一個數據塊之后的每一個數據塊的數據量和所述最大值變量進行比較,如果某個數據塊的數據量比所述最大值變量還大,則將該某個數據塊的數據量作為最大值變量;遍歷結束后得到的最大值變量為最大數據量,與該最大數據量對應的數據塊為具有最大數據量的數據塊。所述外部定位控制數據包括從用戶界面輸入的信息。所述AVI文件包括AVI 1.0格式的視音頻文件、AVI 2.0格式的視音頻文件。根據本發明的另一個方面,提供一種定位無索引AVI文件的播放位置的裝置,包括:分析單元,用于對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊;索引單元,用于根據所述分析單元輸出的所有區間的關鍵幀起始數據塊重建索引;定位單元,用于根據外部定位控制數據并結合所述索引單元重建后的索引定位AVI文件的播放位置,輸出定位到的播放位置。所述AVI文件包括AVI 1.0格式的視音頻文件、AVI 2.0格式的視音頻文件。根據本發明的又一個方面,提供一種用于播放無索引AVI文件的播放器,包括用于獲取AVI文件的文件讀取模塊、用于將AVI文件分離為視頻數據和音頻數據的分離模塊、用于對視頻數據和音頻數據解碼的解碼模塊,所述分離模塊包括:分析單元,用于對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊;索引單元,用于根據所述分析單元輸出的所有區間的關鍵幀起始數據塊重建索引;定位單元,用于根據外部定位控制數據并結合所述索引單元重建后的索引定位AVI文件的播放位置;分離單元,用于從所述定位單元定位到的播放位置將AVI文件分離為視頻數據和音頻數據并輸出到所述解碼模塊。所述AVI文件包括AVI 1.0格式的視音頻文件、AVI 2.0格式的視音頻文件。本發明的有益效果是:通過劃分區間并找出該區間的數據量最大的數據塊,該數據量最大的數據塊一般即為關鍵幀的起始數據塊,這樣識別出來的關鍵幀的起始數據塊的準確度較高,從而可以很大程度上解決播放過程中存在的畫面異常或反應慢的問題。
圖1是本發明實施例的用于播放無索引AVI文件的播放器的結構示意圖;圖2是本發明實施例的播放器的另一種結構示意圖;圖3是本發明實施例的定位無索引AVI文件的播放位置的方法的流程示意圖。
具體實施例方式下面通過具體實施方式
結合附圖對本發明作進一步詳細說明。本發明實施例的設計思想是:根據實驗分析統計得知視頻文件的關鍵幀的起始數據塊的數據量通常比其他數據塊大得多,因此,對于無索引AVI文件,本發明實施例不必像現有技術那樣把每個數據塊都當作關鍵幀的起始數據塊,而是通過劃分區間并找出該區間的數據量最大的數據塊,該數據量最大的數據塊一般即為關鍵幀的起始數據塊,這樣識別出來的關鍵幀的起始數據塊的準確度相比于現有方法的較高,從而可以很大程度上解決現有技術的不足引起的如畫面出現異常或響應比較慢的播放問題。如圖1所示為本發明實施例提供的用于播放無索引AVI文件的播放器,包括:文件讀取模塊120、分離模塊140、解碼模塊160。文件讀取模塊120用于讀取數據通訊接口獲取的視音頻文件,即獲取AVI文件;分離模塊140用于將視音頻文件分離為音頻數據和視頻數據;解碼模塊160用于對音頻數據和視頻數據進行解碼。應理解,播放器中還包括對解碼后的音頻數據和視頻數據進行播放的播放模塊以及如對音頻或視頻進行渲染處理的模塊。一種實施例中,如圖2所示,文件讀取模塊讀取數據通訊接口獲取視音頻文件,分離模塊將視音頻文件分離為音頻文件和視頻數據;音頻數據經過音頻解碼模塊、音頻渲染模塊后由音頻播放裝置進行播放,而視頻數據經過視頻解碼模塊、視頻渲染模塊后通過播放接口進行播放;播放過程中可受播放控制器控制播放的進度等。圖1所示的播放器中,分離模塊140包括:分析單元141、索引單元143、定位單元145和分離單元147。分析單元141用于對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊;索引單元143用于根據分析單元141輸出的所有區間的關鍵幀起始數據塊重建索引;定位單元145用于根據外部定位控制數據并結合索引單元143重建后的索引定位AVI文件的播放位置;分離單元147用于從定位單元145定位到的播放位置將AVI文件分離為視頻數據和音頻數據并輸出。可以理解,實施例中,當用戶有定位需求時,分離模塊負責定位功能,由分析單元從文件讀取模塊獲取到視音頻文件的全部數據,并對其進行分析以重建索引。基于上述播放器,本發明實施例提供了一種定位無索引AVI文件的播放位置的方法,如圖3所示,包括:分析步驟S310,對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊;這里,找出每個區間內具有最大數據量的數據塊的算法可以采用如下算法實現:首先,將該區間內的第一個數據塊的數據量作為最大值變量;然后,遍歷該區間內的所有數據塊,將第一個數據塊之后的每一個數據塊的數據量和最大值變量進行比較,如果某個數據塊的數據量比最大值變量還大,則將該某個數據塊的數據量作為最大值變量;最后,遍歷結束后得到的最大值變量為最大數據量,與該最大數據量對應的數據塊為具有最大數據量的數據塊。索引步驟S330,根據所有區間的關鍵幀的起始數據塊重建索引;這里,重建索引可采用本領域關于重建索引的現有方法實現,例如,根據得到關鍵幀的起始數據塊,記錄各個數據塊的內容(如音頻、視頻)、塊的大小及位置等,將這些信息作為索引。定位步驟S350,根據外部定位控制數據并結合重建后的索引定位AVI文件的播放位置,輸出定位到的播放位置。這里,外部定位控制數據包括從用戶界面輸入的信息,例如用戶拖動播放進度條時傳入播放器的對應的時間點等。定位的過程可以采用本領域關于定位的現有方法,例如,已知視頻的幀率為每秒25幀,若外部輸入的信息為10秒,結合重建后的索引可以很精確地定位到相應的位置。可以理解,這樣精確定位后再進行音視頻數據解碼播放,可以很大程度上避免畫面異常及反應遲緩情況的出現,提升了用戶觀賞體驗。基于上述定位無索引AVI文件的播放位置的方法,本發明實施例還提供了一種定位無索引AVI文件的播放位置的裝置,包括:分析單元、索引單元、定位單元;其中各單元的功能與前述播放器中分離模塊中涉及的各單元相對應,此處不在重贅。可見,本發明實施例可識別無索引AVI文件視頻幀中的大部分關鍵幀的起始數據塊,這樣,在為無索引AVI文件重建索引時,即可不必將所有數據塊都視為關鍵幀的起始塊。由于識別出來的關鍵幀的起始數據塊的準確度較高,從而可以很大程度上解決現有技術的不足引起的播放問題。在本發明實施例的定位過程中,分析單元選擇對預定數量(例如200個,但不限于此)的連續個數據塊做區間分析,找出該區間內的關鍵幀(I幀)的起始數據塊。實驗分析得知視頻文件的關鍵幀起始數據塊的數據量通常比其他非關鍵幀大得多,因此找出區間內最大的數據塊一般即為關鍵幀的起始數據塊,關鍵幀起始數據塊的識別可以通過設置比較的算法來實現(具體如前述)。找到關鍵幀的起始數據塊之后即在其索引中表現出來。因此定位單元可以從索引單元重建的索引中更為準確地識別出關鍵幀的起始數據塊,并根據從用戶界面輸入的外部定位控制數據更加準確高效地進行播放定位,很大程度避免了畫面異常及反應遲緩情況的出現,提升了用戶觀賞體驗。準確定位之后,分離單元從定位到的播放位置開始進行音視頻分離提供給后續的解碼模塊處理進而播放文件。本發明實施例的播放器、以及定位無索引AVI文件的播放位置的方法及裝置適用于AVI 1.0及AVI 2.0格式的視頻文件。本發明實施例的方法可較為準確地識別關鍵幀的起始數據塊,從而準確定位,很大程度避免了無索引AVI文件播放定位后可能出現的畫面異常或響應緩慢的情形。上述實施例只是本發明的舉例,盡管為說明目的公開了本發明的最佳實施例和附圖,但是本領域的技術人員可以理解:在不脫離本發明及所附的權利要求的精神和范圍內,各種替換、變化和修改都是可能的。因此,本發明不應局限于最佳實施例和附圖所公開的內容。
權利要求
1.一種定位無索引AVI文件的播放位置的方法,其特征在于,包括: 分析步驟,對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊; 索引步驟,根據所有區間的關鍵幀起始數據塊重建索引; 定位步驟,根據外部定位控制數據并結合重建后的索引定位AVI文件的播放位置,輸出定位到的播放位置。
2.根據權利要求1所述的定位無索引AVI文件的播放位置的方法,其特征在于,所述找出每個區間內具有最大數據量的數據塊的過程包括: 將該區間內的第一個數據塊的數據量作為最大值變量; 遍歷該區間內的所有數據塊,將所述第一個數據塊之后的每一個數據塊的數據量和所述最大值變量進行比較,如果某個數據塊的數據量比所述最大值變量還大,則將該某個數據塊的數據量作為最大值變量; 遍歷結束后得到的最大值變量為最大數據量,與該最大數據量對應的數據塊為具有最大數據量的數據塊。
3.根據權利要求1所述的定位無索引AVI文件的播放位置的方法,其特征在于,所述外部定位控制數據包括從用戶界面輸入的信息。
4.根據權利要求1至3任一項所述的定位無索引AVI文件的播放位置的方法,其特征在于,所述AVI文件包括AVI 1.0格式的視音頻文件、AVI 2.0格式的視音頻文件。
5.一種定位無索引AVI文件的播放位置的裝置,其特征在于,包括: 分析單元,用于對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊; 索引單元,用于根據所述分析單元輸出的所有區間的關鍵幀起始數據塊重建索引; 定位單元,用于根據外部定位控制數據并結合所述索引單元重建后的索引定位AVI文件的播放位置,輸出定位到的播放位置。
6.根據權利要求5所述的定位無索引AVI文件的播放位置的裝置,其特征在于,所述AVI文件包括AVI 1.0格式的視音頻文件、AVI 2.0格式的視音頻文件。
7.一種用于播放無索引AVI文件的播放器,包括用于獲取AVI文件的文件讀取模塊、用于將AVI文件分離為視頻數據和音頻數據的分離模塊、用于對視頻數據和音頻數據解碼的解碼模塊,其特征在于,所述分離模塊包括: 分析單元,用于對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊; 索引單元,用于根據所述分析單元輸出的所有區間的關鍵幀起始數據塊重建索引; 定位單元,用于根據外部定位控制數據并結合所述索引單元重建后的索引定位AVI文件的播放位置; 分離單元,用于從所述定位單元定位到的播放位置將AVI文件分離為視頻數據和音頻數據并輸出到所述解碼模塊。
8.根據權利要求7所述的用于播放無索引AVI文件的播放器,其特征在于,所述AVI文件包括AVI 1.0格 式的視音頻文件、AVI 2.0格式的視音頻文件。
全文摘要
本發明公開了一種可以定位無索引AVI文件的播放位置的方法及裝置,包括對獲取的包含連續數據塊的視音頻數據流按預定數目劃分區間,每個區間包括預定數目個連續的數據塊,找出每個區間內具有最大數據量的數據塊,將該具有最大數據量的數據塊作為其對應區間的關鍵幀起始數據塊;根據所有區間的關鍵幀起始數據塊重建索引;根據外部定位控制數據并結合重建后的索引定位AVI文件的播放位置,輸出定位到的播放位置。本發明通過劃分區間并找出該區間的數據量最大的數據塊,該數據量最大的數據塊一般即為關鍵幀的起始數據塊,這樣識別出來的關鍵幀的起始數據塊的準確度較高,從而可以很大程度上解決播放過程中存在的畫面異常或反應慢的問題。
文檔編號G11B27/32GK103165157SQ20111042437
公開日2013年6月19日 申請日期2011年12月16日 優先權日2011年12月16日
發明者梁健國, 劉大衛 申請人:深圳市快播科技有限公司