一種wmv文件的解碼方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及音視頻解碼技術領域,特別涉及一種WMV文件的解碼方法和裝置。
【背景技術】
[0002]WMV(Windows Media Video)是微軟公司開發(fā)的一組數(shù)字視頻編解碼格式的通稱,它是Windows Media架構下的一部分。WMV可以使用如MPlayer或者Windows Media Player這樣的播放器播放,Windows Media Player只能在微軟視窗和Macintosh系統(tǒng)上使用,有許多用于如Linux這樣不同平臺上的使用FFmpeg實現(xiàn)WMV編解碼的第三方播放器。
[0003]視頻流通常與Windows Media Aud1音頻流組合在一起并且使用擴展名為.wmv或者.asf的Advanced Streaming Format的文件進行封裝。WMV通常使用AdvancedStreaming Format (ASF)封裝,它也可以使用AVI或者Matroska格式封裝。如果是AVI封裝的文件結果文件可以是.avi,如果是ASF封裝的話則是.wmv或者.asf,如果是MKV封裝的話則是.mkvo
[0004]當使用VirtualDub編碼器編碼和WMV9VCM編解碼實現(xiàn)的時候WMV可以存儲在AVI文件中。用于Mac的微軟公司媒體播放器不支持所有的WMV編碼的文件,因為它只支持ASF文件封裝,F(xiàn)lip4Mac和QuickTime或者用于MacOSX的MPlayer可以播放更多的文件。
[0005]在現(xiàn)有技術中,由于通常格式的數(shù)據包,一個數(shù)據包只包括一幀數(shù)據,但在對WMV文件進行解碼時,數(shù)據包無法只解出一個幀,而是一個數(shù)據包可能包括多個幀。在WMV文件中,一個數(shù)據包可能包含多個視頻幀或者音頻幀,但是,在采用現(xiàn)有技術中的解碼方法得到數(shù)據包時,無法得知原WMV文件中數(shù)據包中有多少幀,也不知道什么時候解碼結束,給實際的解碼操作和信息瀏覽帶來了不便。
【發(fā)明內容】
[0006]本發(fā)明提供一種WMV文件的解碼方法和裝置,用以解決現(xiàn)有技術中存在的無法獲知原WMV文件包含的幀數(shù)量及解碼進度的問題,實現(xiàn)提高解碼效率的目的。
[0007]本發(fā)明提供一種WMV文件的解碼方法,包括:
[0008]步驟A:獲取待解碼的WMV文件的數(shù)據包描述信息,根據所述數(shù)據包描述信息獲取數(shù)據包的數(shù)據總長度BI ;
[0009]步驟B:根據所述數(shù)據包描述信息中的數(shù)據格式,選擇與所述數(shù)據包中的數(shù)據格式對應的解碼方式;
[0010]步驟C:根據所述對應的解碼方式對數(shù)據包的一個數(shù)據幀進行解碼,獲取解碼后的第一個數(shù)據幀,計算所述第一個數(shù)據幀在數(shù)據包中的長度B2 ;
[0011]步驟D:判斷所述數(shù)據的總長度BI與所述第一個數(shù)據幀在數(shù)據包中的長度B2之差是否小于或等于零,如果是,則結束解碼;
[0012]如果不是,則重復所述步驟C。
[0013]本發(fā)明實施例的一些有益效果可以包括:
[0014]該實施例通過獲取數(shù)據包的描述信息,進而獲取數(shù)據包中數(shù)據的總長度和數(shù)據格式,根據數(shù)據格式,可以選擇與該數(shù)據格式相對應的解碼方式對WMV文件進行解碼,保證了對WMV文件解碼的快速和便捷。當解碼出第一個數(shù)據幀時,將該數(shù)據幀在數(shù)據包中的長度與數(shù)據總長度進行比較,判斷其是否大于或等于數(shù)據總長度,如果是,即說明數(shù)據包中已經全部解碼,可以直接結束解碼,節(jié)省了工作時間,提高了工作效率;如果該數(shù)據幀在數(shù)據包中的長度小于數(shù)據總長度,說明還有數(shù)據包未解碼,應當繼續(xù)對數(shù)據包進行解碼。該方法對每次解碼后的數(shù)據幀長度與數(shù)據總長度進行比較,可以實現(xiàn)在全部數(shù)據數(shù)據包解碼完成時,及時結束解碼。
[0015]在一個實施實施例中,在所述步驟C和所述步驟D之間還包括:
[0016]步驟E:監(jiān)測當前數(shù)據包的解碼速度,判斷所述解碼速度是否達到預設的解碼速度;
[0017]步驟F:如果所述解碼速度小于預設解碼速度,則判斷當前待解碼數(shù)據幀的類型;
[0018]步驟G:若所述當前待解碼數(shù)據幀為非預設類型的數(shù)據幀,則丟棄所述當前待解碼數(shù)據幀。
[0019]該實施例對解碼過程中的解碼速度與預設的解碼速度進行比較,如果達到解碼速度,則可以正常繼續(xù)解碼;如果未達到預設的解碼速度,則說明當前待解碼的數(shù)據幀可能不是實際需要的WMV文件的數(shù)據幀,進而對當前待解碼數(shù)據幀的類型進行判斷是否屬于預設類型的數(shù)據幀,如果不是,則直接將該數(shù)據幀丟棄,防止在解碼過程對不必要數(shù)據幀進行解碼,造成解碼時間的浪費,降低解碼效率。
[0020]在一個實施例中,所述步驟E具體包括:
[0021]獲取解碼狀態(tài)參數(shù),所述解碼狀態(tài)參數(shù)為解碼過程中對處理器和內存的資源利用率;
[0022]判斷所述資源利用率是否小于預設利用率,如果是則所述解碼狀態(tài)參數(shù)的數(shù)值不屬于預設數(shù)值范圍;
[0023]如果所述解碼狀態(tài)參數(shù)的數(shù)值不屬于預設數(shù)值范圍,則所述解碼速度小于預設解碼速度。
[0024]該實施例主要對如何確定解碼速度小于預設解碼速度的方法進行了限定,首先通過獲取當前正在解碼時的解碼狀態(tài)參數(shù),該解碼狀態(tài)參數(shù)包含了對處理器和內存的資源利用率。判斷該資源利用率是否小于預設的資源利用率,如果是則說明解碼狀態(tài)參數(shù)不在預設的數(shù)值范圍內,進而說明解碼速度小于預設的解碼速度。因為解碼速度本身并無具體參數(shù)表示,該實施例對如何判斷當前解碼速度小于預設解碼速度進行了詳細說明,為判斷解碼速度提供了便利,節(jié)省了工作時間,提高了工作效率。
[0025]在一個實施例中,所述步驟B具體包括:
[0026]根據所述數(shù)據包的描述信息包含的音視頻標識位,確定所述數(shù)據包中數(shù)據為音頻數(shù)據或視頻數(shù)據;
[0027]根據確定后的數(shù)據包中的音頻數(shù)據或視頻數(shù)據,調取與所述音頻數(shù)據或視頻數(shù)據對應的解碼方式。
[0028]該實施例中,由于WMV文件可能是視頻文件也可能是音頻文件,因此,提取數(shù)據包描述信息中包含的音視頻標志位,判斷WMV文件數(shù)據為視頻文件還是音頻文件,進而調用與該視頻文件或音頻文件相對應的解碼方式進行解碼,防止由于調取的解碼方式與數(shù)據類型不一致,導致解碼時間的浪費或解碼過程中的錯誤解碼,提高了解碼的效率。
[0029]在一個實施例中,在所述步驟D中結束解碼之前還包括:
[0030]對已完成解碼的數(shù)據包個數(shù)A2進行統(tǒng)計,判斷所述已完成解碼的數(shù)據包個數(shù)A2是否達到預先獲得的數(shù)據包總個數(shù)Al ;
[0031]如果B1-B2 ^ O, A2 < Al,則將所述全部數(shù)據包中未解碼的數(shù)據包丟棄;
[0032]如果B1-B2彡0,A2 = Al,則結束解碼。
[0033]該實施例中,在已解碼數(shù)據幀長度大于等于數(shù)據總長度的同時,還對已經完成解碼的數(shù)據包個數(shù)與數(shù)據包總個數(shù)進行比較,如果已完成解碼的數(shù)據包個數(shù)小于數(shù)據包總個數(shù),則說明后續(xù)未解碼的數(shù)據包均為空,可以直接丟棄,節(jié)省了解碼時間;如果已完成解碼的數(shù)據包個數(shù)等于數(shù)據包總個數(shù),說明已經解碼完成,直接結束解碼。該方法通過比較已完成解碼的數(shù)據包個數(shù)與數(shù)據包總個數(shù),為是否直接結束解碼提供了依據,提高了解碼效率。
[0034]一種WMV文件的解碼裝置,包括:
[0035]信息獲取模塊,用于獲取待解碼的WMV文件的數(shù)據包總個數(shù)Al和數(shù)據包描述信息,根據所述數(shù)據包描述信息獲取全部數(shù)據包中數(shù)據總長度BI,所述描述信息包括數(shù)據格式和數(shù)據長