转自http://blog.csdn.net/leixiaohua1020/article/details/50535082
1、原理
参考http://blog.csdn.net/qingkongyeyue/article/details/52911388
2、程序
本文的程序实现了FLV中的FLV Header和Tag的解析,并可以分离出其中的音频流。
把大端字节序转换成小端字节序(低字节在低位,高字节在高位)
打开流媒体文件,把文件的大小为FLV_HEADER的内容拷贝到结构体变量flv处。
_getw函数返回读取的4字节数据到previoustagsize,再读取11字节的数据到tagheader中,其中数据大小的计算为3个字节,而时间戳也为3个字节。
根据不同的类型打印出不同的类型信息
根据不同的类型(音频、视频或脚本)做不同的处理工作。先读取Tag Data的第一个字节,取高4位,并将高4位移到低4位,根据不同的值判断音频编码的类型。
取字节的第五、六位,移到最低位,从而判断音频采样率,取字节的第7位判断采样精度。取字节的第8位判断音频类型。
打开输出文件,把音频数据写依次写入output.mp3文件。如果是视频类型,类似地也是先获取第一个字节,取高4位并把这高4位移到低位,判断其帧类型。然后取低4位判断视频编码类型。
把指针移到刚开始的视频数据首部,将FLV_HEADER结构体头部的地址数据先拷贝到输出文件output.flv,然后拷贝剩余的数据。修改时间戳。