1.wma文件是由asf封裝的位流數據。
2一個asf容器,包含了 一個asf標誌頭,文件頭指示了包的大小cbPacketSize,位流頭。通過位流頭,再確定是否爲音頻流頭。如果是音頻流的頭,則可以進行格式判斷。
3,可以讀取audio_id,獲取格式信息。 包括 採樣率,比特率,block對齊長度,
4,一個包裏面可以包含一個或者多個負載。這些負載可以來自不同的流信息。
在asf的頭裏面記錄了packet的數據長度,本包的幀個數,幀大小。
5,packet的數據內容爲幀,而一個幀可以分成多個 block的位流。 同一個block的數據,可以跨包存儲。packet前面會記錄有多少bit是屬於上一個packet的。
解包流程:
解包頭,獲取數據---> 解幀頭-->解幀(解block)
1、因爲拆包的時候,包很可能不是按block的整數倍拆分的,所以包含上一包的數據。在幀頭裏面會有信息指出本包完整幀的起始位置。每一個的bit也可以不是byte對齊的,如第7點
2.本包解碼的時候 本包的位流不一定耗盡,如果是非跨包存儲的格式[flag2],需要丟棄。
3.每包的第一個完整block會重新reset_block_size
4.關係:文件組織的基本結構是cbPacketSize,它裏面包含 n個segment的數據,如果是audio_seg的話,它的有效數據長度爲nBlockAlign。
5.wma的bitrate是純數據的比特流,不包含asf的消耗,所以要估計實際文件的比特率的話,需要計算下冗餘度。
6.幀頭的格式是: u8【包含幀數】+u16【前面是first_frame_bit【代表起始位置】,後面【13-nbsize】bit是屬於block的數據】