《从零开始编写一个直播服务器》音视频封装FLV理论

流媒体服务系列文章



前言


一、FLV 封装格式解析

在这里插入图片描述

在这里插入图片描述

flv header + flv body
flv header + previous size0 + tag1 + previous size1 + tag2 + …+ prvious sizen+ tagn+1
flv header + previous size0 + tag1 header + tag1 data1 + …+ previous sizen + tagn header+tagn data
previous tag sizen 表示的前一个tag的整体大小
每个Tag数据大小在Tag Header头里面的Data size字段里面;

二、实例分析

在这里插入图片描述

FLV HEADER在这里插入图片描述
总结:
1.Flv header 的前三个字节是固定的FLV的 ASCII 码的值0x46 0x4C 0x56;
2.接下来的一个字节表示 FLV 的版本号,例如 0x01 代表 FLV 版本号为 1;
3.第 5 个字节中的第0位和第2位分别表示video和audio的存在情况(1表示存在,0 表示不存在)其余6位必须为0.最后的4字节,表示FLV Header的长度,对于version 1,此处为9;
4.一般判断格式是不是flv,先从收到数据的第一字节连续查找flv三个字符,如果找到一般可以判断是flv封装格式;
5.Header头数据一般是9字节但是不绝对,所以需要读最后的长度字段来解析;

FLV TAG Header
在这里插入图片描述
1.无论那种类型的tag,tag头字节都是11字节,要解析里面的音频帧,视频帧或者元数据需要读取tag头里面的data长度字段;
2.时间戳很关键,播放过程中,FLV tag的时间信息完全依赖于 FLV 时间戳,内置的其他时间信息都被忽略掉,一般非音视频的tag,时间戳就是0即可;
3.注意计算好时间戳大小,这里的单位是毫秒,所以一定要根据采样率和视频帧率,音频帧采样多少计算好时间戳,然后还要换算成毫秒;
4.Tag头解析完后,Tag数据部分不是视频帧和音频帧,还要根据H264和AAC的打包方案解析才能得到真实的音视频裸数据;

Script TAG 脚本元数据TAG
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Video TAG 视频TAG
在这里插入图片描述

Audio TAG 音频TAG

在这里插入图片描述


总结

1.FLV就三种TAG,比较简单的封装格式,每个TAG都是由Tag Header和TAG Data组成;
2.FLV中对时间戳的处理?如果含有B帧时间戳怎么计算?特别是PTS和DTS时间戳;
3.你能从FLV这种封装格式中,借鉴到什么?加入让你设计一种私有封装格式,又该如何设计;
4.如果FLV里面扩展H.265视频编码格式,你觉得大概的思路是什么;
5.你觉得FLV的缺点有哪些;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c+猿辅导

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值