音视频开发---文件格式转换---h264转flv过程详解

将H.264封装为FLV格式 C源码CSDN下载:https://download.csdn.net/download/weixin_42462202/11037715
参考上面博文提供的c代码项目,整理一下h264转flv的流程

h264文件分析:


信息整理并用于后续: 有无音视频流

生成flv文件:
1、准备好flv文件头的buf(包含flv文件头信息+4字节 previous tag size)并写入目标flv文件   	getFlvHeader + 写入flvFlushData
2、Script Tag Data结构 填充2个AFM包的元素(部分直接填/部分不填但记录下值的位置offfset) 	getVideoScriptParam(只有Script Tag Data数据) + buildTag(tagdate +taghead) + 写入flvFlushData
3、读取最前面2个nalu(即sps和pps)→→  getAVCSequenceHeader(将spspps数据打包成一个video tag date) +打包 + 写入  //有其特定格式 from文档
4while循环读取nalu并打包成tag写入目标文件 (如果遇到sps则要做成一个spspps的tag写入)		getvideoTagData将普通nalu打包成tag.date
																							//按照标准格式 依次写入对应的参数
5、补上前面缺少的数据 																		rewrite_amf_double

/*
自定义函数
写入AMF包的类型or元素个数(即写入一个enum int):	ui8/16/24/32_to_bytes(uint8_t *buf, uint16_t val) 将一个8/16/24/32位数据按照大端格式存放/写入到buf 

写入AMF包的元素名长度+元素名:			amf_string_to_bytes(uint8_t *buf, const char *str)  
写入AMF包的元素的值:					*amf_double_to_bytes(uint8_t *buf, double d)

为3种tag封装一个tag头:   buildTag		

int getNALU(PT_NALU pNalu, FILE *pFile) 读去start_code后读取nalu_date(每读一个字节就检查是否读完本nalu)
rewrite_amf_double(FILE *fp, uint64_t position, double value)在文件的position位置填上数据value
*/

typedef struct FlvContext {
   
    T_FlvTag flvTag;
	{
   
		unsigned char *pBuf;		//	到目前位置已经准备好了的内容的buf(每次准备以tag为单位准备&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值