博客
关于我
【网络通信 -- 直播】音视频常见封装格式 -- FLV
阅读量:353 次
发布时间:2019-03-04

本文共 1371 字,大约阅读时间需要 4 分钟。

【网络通信 -- 直播】音视频常见封装格式 -- FLV

FLV 格式

FLV(Flash Video)是 Adobe 公司推出的一种音视频封装格式,常用于网络直播和流媒体传输。FLV 支持的视频编码格式主要是 H264,音频是 AAC。

FLV 文件结构

FLV 文件由 FLV Header 和 FLV Body 两部分组成:

  • FLV Header:包含 9 个字节,主要用于标识文件类型和文件结构。
  • FLV Body:包含多个 Tag,包括音频流(audio)、视频流(video)和脚本流(script)。每个 Tag 由 Tag Header 和 Tag Data 两部分组成。
  • FLV Header 字段说明

    字段名称 字段长度 说明
    Signature 1 byte 必须为 'F'(0x46)
    Version 1 byte 通常为 0x01
    TypeFlagsReserved 5 bits 必须为 0
    TypeFlagsAudio 1 bit 表示是否含有音频
    TypeFlagsVideo 1 bit 表示是否含有视频
    DataOffset 4 bytes 文件头部的大小(从文件开始位置到 Body 的偏移量),通常为 9

    FLV Body 结构

    FLV Body 由多个 Tag 组成,每个 Tag 的格式如下:

  • Tag Header:包含 11 字节,包括:

    • Tag 类型(TagType):1-2 位必须为 0,3 位为加密标志(默认 0),4-8 位表示编码类型。
    • 数据大小(DataSize):3 bytes,表示 Tag Data 的长度。
    • 时间戳(Timestamp):3 bytes,表示视频或音频的绝对时间戳。
    • 时间戳扩展(TimestampExtended):1 byte,用于扩展时间戳。
    • 流 ID(Stream ID):3 bytes,通常为 0。
    • 数据(Data):包含音视频数据或元数据。
  • Tag Data:根据编码类型(如 H264 和 AAC)不同,数据格式也会有所差异。

  • Tag 类型

    • Script Tag:用于存储视频和音频的元数据,如视频宽度、高度、时长等。
    • Video Tag:封装 H264 视频数据,包含视频帧信息和编码配置。
    • Audio Tag:封装 AAC 音频数据,包含采样率、通道信息等。

    FLV 的优势

  • FLV 文件结构流式化,支持在线动态扩展。
  • FLV 文件适合实时流媒体,效率高。
  • FLV 文件兼容性强,支持多种编码格式。
  • FLV 与 RTMP 的关系

    RTMP(Real-Time Media Protocol)是用于实时媒体传输的协议,FLV 文件实际上是 RTMP 数据的封装形式。FLV 文件可以看作是 RTMP 数据的“马甲”,两者之间存在密切关联。

    FLV 知识点总结

  • FLV 适合录制的原因

    • FLV 文件结构流式化,便于随时添加音视频数据。
    • 相比 MP4 等格式,FLV 文件头部固定,体积小且处理时间短。
  • FLV 与 MP4 的区别

    • FLV 文件的数据部分可以随时扩展,而 MP4 文件的文件头会随着数据增加而增长。
    • FLV 文件适合实时流媒体,传输效率高。
  • 通过对 FLV 格式的深入理解,可以更好地实现网络直播和音视频流媒体的传输与播放。

    转载地址:http://fomr.baihongyu.com/

    你可能感兴趣的文章
    js 的 let var const 区别
    查看>>
    无线掌上B超USONIX-R6线阵B模图像初步
    查看>>
    无线掌上B超USONIX-R6凸阵B模图像初步
    查看>>
    react路由使用以及封装
    查看>>
    vue计算属性和监听器区别
    查看>>
    前端常用知识随手记
    查看>>
    react-redux使用hooks替代connect
    查看>>
    使用 FileUpload 实现文件上传
    查看>>
    11.2.6 时间值的小数秒
    查看>>
    11.2.7 日期和时间类型之间的转换
    查看>>
    附录 B 错误信息和常见问题
    查看>>
    第4章 MySQL 程序
    查看>>
    设置柱形图的柱的宽度
    查看>>
    c/c++ 学习
    查看>>
    redis 内存溢出_从数据存储的角度告诉你Redis为什么这么快!
    查看>>
    java gradle 目录_拆分Gradle中的所有输出目录
    查看>>
    http+flv+java,制作一个全功能的FLV播放器
    查看>>
    php寻找文本,寻找文本 · Leing中文PHP框架 · 看云
    查看>>
    实例分析Facebook激励视频广告接入
    查看>>
    实例:使用OKGO下载网络压缩包资源,然后解压缩放在本地使用
    查看>>