FLV 提取 aac

前面的操作 分析 flv 头 tag 头 和视频解析是一样的就不多诉。

因为 flv中音频数据是没有 adts头的 所以要在 第一个音频包 提取信息

然后自己构建一个adts头 添加到没帧aac数据之前 

//在flv中第一帧
struct FLVAACADST{
	unsigned char SamplIndex1:3;
	unsigned char OBjecttype:5;//2

	unsigned char other:3;//000
	unsigned char channel:4;
	unsigned char SamplIndex2:1;

};

int info=0;
	int aactype=0;
	Read8(info,flvfile);
	Read8(aactype,flvfile);
	if (aactype==0x00)
	{
		HasAudioSpecificConfig=true;
		fread(&m_flvadst,1,sizeof(m_flvadst),flvfile);//常见的有0x1210 0x1390,有时候会有7个字节,只要前面两个就行
		m_aacadst.check1=0xff;
		m_aacadst.check2=0xff;
		m_aacadst.check3=0xff;
		m_aacadst.check4=0xff;
		m_aacadst.protection=1;
		m_aacadst.ObjectType=0;
		m_aacadst.SamplingIndex=m_flvadst.SamplIndex2|m_flvadst.SamplIndex1<<1;
		m_aacadst.channel2=m_flvadst.channel;		
		return;
	}
adts头结构:

//aac封装 每个帧头结构
struct AACADST{
	unsigned	char check1;

	unsigned  char protection:1;//误码校验1
	unsigned  char layer:2;//哪个播放器被使用0x00
	unsigned	char ver:1;//版本 0 for MPEG-4, 1 for MPEG-2
	unsigned	char check2:4;

	unsigned	char channel1:1;                        小端存储 先写 低位
	unsigned    char privatestream:1;//0
	unsigned	char SamplingIndex:4;//采样率
	unsigned	char ObjectType:2;

	unsigned	char length1:2;
	unsigned	char copyrightstart:1;//0
	unsigned    char copyrightstream:1;//0
	unsigned    char home:1;//0
	unsigned    char originality:1;//0
	unsigned	char channel2:2;

	unsigned	char length2;

	unsigned	char check3:5;
	unsigned	char length3:3;

	unsigned	char frames:2;//超过一块写
	unsigned	char check4:6;
};

根据datalength 设置 aac中data数据大小:

if (HasAudioSpecificConfig)
		{

			unsigned int size=datelength-2+7;
			m_aacadst.length1=(size>>11)&0x03;
			m_aacadst.length2=(size>>3)&0xff;
			m_aacadst.length3=size&0x07;

			fwrite((char*)&m_aacadst,1,sizeof(AACADST),aacfile);
		}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值