wma的文件位流结构篇1

烂漫一生 提交于 2020-03-11 03:19:42

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的数据】

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!