攻克视频技术
李江
声网 Agora 视频专家
7494 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 19 讲
攻克视频技术
15
15
1.0x
00:00/00:00
登录|注册

14|MP4 & FLV:不要再说AVI了

你好,我是李江。
前面我们花了很长的时间学习了视频编码和视频传输弱网对抗的知识点。从今天开始我们来学习几个视频封装和播放的知识点。我们先来学习一下什么是音视频封装。之后我们再学习如何做音视频同步。
其实相比视频编码和传输,音视频封装应该是非常简单的知识点了。而且我们前面还学习过 RTP 打包,RTP 打包音视频数据其实一定程度上也可以算是一种封装。我们今天再介绍两种常用的封装,一种是 FLV,一种是 MP4,相信你对这两种文件一点儿也不陌生。
音视频封装其实就是将一帧帧视频和音频数据按照对应封装的标准有组织地存放在一个文件里面,并且再存放一些额外的基础信息,比如说分辨率、采样率等信息。那到底怎么组织这些基础信息还有音视频数据呢?我们接下来先看看 FLV 是怎么做的。

FLV

FLV 是一种非常常见的音视频封装,尤其是在流媒体场景中经常用到。FLV 封装也是比较简单的封装格式,它是由一个个 Tag 组成的。Tag 又分为视频 Tag、音频 Tag 和 Script Tag,分别用来存放视频数据、音频数据和 MetaData 数据。
下图就是 FLV 的总体结构图:
其总体格式图如下:

FLV Header

其中,FLV Header 占用 9 个字节。前 3 个字节是文件的标识,固定是 FLV。之后的 1 个字节表示版本。在之后的 1 个字节中的第 6 位表示是否存在音频数据,第 8 位表示是否存在视频数据,其他位都为 0。最后的 4 个字节表示从文件开头到 FLV Body 开始的长度,一般就是等于 9。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了FLV和MP4两种常用的音视频封装格式,重点探讨了它们的结构、存储方式以及在音视频数据存放和组织方面的差异。FLV由视频Tag、音频Tag和Script Tag组成,适合于流媒体场景,尤其在直播RTMP协议和HTTP-FLV协议中应用广泛。而MP4由ftyp box、moov box和mdat box组成,是常见的视频文件封装格式,需要重点掌握与sample相关的box。文章还介绍了计算每一个sample在文件中的具体位置、判断关键帧以及计算时间的方法,涉及了stco、stsc、stsz、stss、stts和ctts等关键概念。对于想要深入了解音视频封装格式的读者来说,本文提供了清晰的概览和技术特点,有助于读者快速了解和掌握这一领域的知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《攻克视频技术》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 裕鹏
    请问,如果有sei帧,那是保存在和sps pps同一个位置吗?

    作者回复: 一般放在sps、pps之后,I帧或者P帧的前面。

    2022-08-24归属地:浙江
    1
  • 何祖坚
    总体格式图中 tag header 只展示了10个字节, 但实际有11个字节。还有个字节哪去了呢?

    作者回复: 确实这个地方笔误了,多谢指正

    2022-09-13归属地:浙江
  • Geek_6b760c
    想问一下老师,flv的一个视频tag还有mp4的一个sample是对应一个帧还是对应一个NALU呢

    作者回复: 是一帧的

    2022-08-17归属地:浙江
    2
  • 阿甘
    不是太明白这些视频格式flv/avi/mpeg/rmvb等跟前面谈到的视频编码和传输控制有什么关系?希望老师能够解答一下。

    作者回复: flv和mp4像一个容器,里面装着编码后的音频和视频数据。h264只是其中视频数据编码方式的一种。跟传输没什么关系。

    2022-03-11
    4
  • 一身龙骨
    因为flv结构简单稳定,所以更适合流媒体

    作者回复: 是的,而且没有索引之类的这种东西。适合流媒体

    2022-01-11
  • 陈诚
    请问一下:mp4文件中,sps,pps只是存储一组吗?后续来的sps,pps直接丢弃,还是sps,pps也可以存储多组?

    作者回复: sps和pps是单独放在stsd box里面的AVCDecoderConfigurationRecord中,里面可以存放多个SPS和PPS。但是可能常用播放器不会支持多SPS。有一种方法是把SPS PPS和IDR帧当成一个NALU放进去。

    2021-12-24
  • 翻山越岭
    1)flv,mpeg和rmvb文件可以任意大小,不需要通过索引分包,任意位置可以直接解析分包 2)mp4,avi一定要依赖索引表才行,开始就要固定好位置,如果索引表在尾部,就没办法解析
    2021-12-22
    5
  • 葱本
    sample是什么,我还是没太理解,和frame 有什么关系。另外视频元数据在哪呀
    2022-05-15
    1
    1
  • Wales
    思考题: FLV格式的①音视频数据和②解码必要信息是均匀分布的,在时间和空间上颗粒度都很小,对于实时生成的音视频数据,以流的方式传输和解码,实时性好。 而MP4格式的音视频数据和解码必要信息是分开存放的,时空颗粒度很大,不方便以流的形式传输和实时解码。
    2022-07-05
  • 药师
    老师 标题“MP4 & FLV:不要再说AVI了”文中没有呼应呢
    2022-04-22
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部