音视频入门知识(四):封装篇

⭐四、封装篇

H264封装成mp4、flv等格式,那为什么需要封装?

​ h264也能播放,但是按照帧率进行播放,可能不准

★FLV

**FLV(Flash Video)**是一种用于传输和播放视频的容器文件格式。FLV 格式广泛应用于流媒体和网页视频播放,尤其在 Flash 技术流行时期,是视频流媒体的标准格式之一。FLV 格式结构简单、文件体积小,适合网络传输。

特点:

  • FLV 作为容器格式,可以封装视频、音频和元数据。通常情况下,FLV 中的视频流编码为 H.264,音频流编码为 AAC 或 MP3。
  • FLV 文件体积较小,数据流封装效率高,适合网络视频播放,能够减少延迟,便于在带宽较低的情况下流畅播放。
  • 设计用于流媒体,FLV 文件支持按时间戳分块封装,便于播放时随时从任意位置读取和加载数据,增强了网络流媒体传输的稳定性。
  • FLV 可支持渐进式下载(Progressive Download),边下载边播放

播放过程:在流媒体播放过程中,FLV 文件按照上述标签顺序依次传输。播放器读取并解析文件头,然后根据标签中的时间戳同步音频和视频。脚本标签包含的元数据会在播放前提供相关信息,而每个标签的类型和数据大小字段用于解析和播放音视频内容。

封装格式

文件头(Header) + 前一个标签大小(Previous Tag Size)+ 标签(Tag)

文件头(9B)

用于标识文件格式和版本信息

  • Signature:固定的三个字节 FLV,用于标识这是一个 FLV 文件。
  • Version:表示 FLV 的版本,通常为 0x01
  • Type Flags:指示文件中是否包含音频(Audio)和视频(Video)数据。
  • Data Offset:表示 FLV 文件头的长度。

640

FLV Body = Previous Tag Size + Tag

Previous Tag Size : 4 字节字段,表示前一个标签的大小。这一字段的作用是便于解析器快速跳到下一个标签的位置。

Tag = Tag Header + Tag Data

  • Tag Type:表示标签类型(0x08 表示音频标签,0x09 表示视频标签,0x12 表示脚本/元数据标签)。
  • Data Size:表示该标签的数据部分的大小。
  • Timestamp:用于同步音视频的时间戳。对于视频文件,这个时间戳决定了标签在播放中的位置。
  • Stream ID:流标识,一般设置为 0,保留供未来使用。
  • Tag Data:实际的数据部分,包含音频、视频或元数据。

640 11

★TS

一种流媒体传输格式,全称为 MPEG-TS(MPEG Transport Stream),广泛用于数字视频和音频的传输。设计目的在于有效传输视频和音频数据,同时保证在不同网络环境下的传输稳定性。

特点:

封装结构:TS 是一种容器格式。每个流在 TS 中都作为一个独立的“包”(packet)传输,通常每个包的大小为 188 字节,便于同步和处理。

高容错性:TS 包含冗余数据和错误校验信息,使其能够在传输中发现和纠正错误,适合在不稳定的网络环境下使用

实时流传输:TS 具有实时传输的特点,通过加入时间戳来保证音视频同步(PTS/DTS),能够支持音视频的实时流式播放。

灵活性:可以封装多种格式的音频(如 AAC、MP3)和视频(如 H.264、H.265),适合多路流媒体传输,也支持动态切换多个音视频流。*

分层结构

分层结构是分层结构是基于 ISO/OSI 模型,专为高效、多路传输设计。它分为三层结构,以支持多路音视频和数据流的实时、可靠传输:,专为高效、多路传输设计。它分为三层结构,以支持多路音视频和数据流的实时、可靠传输:

  • ES层

    内容:最底层的数据流,包含压缩编码后的原始音视频数据,如 H.264 编码的图像数据或 AAC 编码的音频数据。

    作用:不包含任何时间戳或识别信息,主要专注于原始的音视频内容编码

    一个 ES 流中只包含一种类型的数据(视频,或音频,或字幕)。

  • PES层

    内容:PES 层在 ES 层的基础上增加了时间戳(PTS/DTS)等信息,确保音视频同步

    作用:将原始的 ES 数据打包成更小的片段,便于在传输流中处理;PES 包头还包含信息以区分视频、音频或其他数据。

    ES数据包比较大,加入PES头时需将ES进行分割,只在第一个分割的ES上加PES头(类似于传输层的做法)

  • TS层

    内容:在 PES 层的基础上加入了数据流的识别信息(PID)和传输相关的控制信息

    作用:TS 层是传输的最终封装格式,将 PES 包切分成 188 字节的 TS 包,每个包中包含同步字、PID、错误校验等信息,确保在网络传输中能够恢复数据,便于多路流的管理与传输。

    ts包大小固定为188字节,ts层分为三个部分:ts header、adaptation field、payload。

    • TS Header:控制和识别,确保接收端识别数据包类型和顺序。

      包含的字节内容:

      • 同步字节(Sync Byte):固定为 0x47,用于包头识别和数据同步。

      • 传输错误指示(TEI):用于标识传输错误。

      • 有效负载单元起始指示(Payload Unit Start Indicator, PUSI):指示是否为新的 PES 包的起始。

      • ★PID(Packet Identifier):识别和区分不同类型的数据流,如音频、视频或信令数据(PAT/PMT 等)。

        • pid 决定了负载内容的类型,主要包括:PAT表PMT表,视频流,音频流。常用的PID值:

          • PAT 0x0000

            作用:PAT 是节目关联表,包含 TS 流中所有节目的 PID 信息。

            用途帮助接收端找到每个节目的 PMT(Program Map Table)位置,理解流中有哪些节目以及各节目对应的 PMT PID。

          • PMT:PMT 是节目映射表通过 PAT 表找到 PMT PID 后,可以解析某个节目具体的音视频流的 PID

          • 视频流 PID:音视频的 PID 在 PMT 中定义,通常为一个特定节目中的视频数据流。接收端通过 PMT 获取特定节目的视频 PID

          • 音频流 PID:与视频流类似,PMT 还定义了音频流的 PID,接收端通过 PMT 找到并解码音频流。

      • 控制字段:包括优先级、加扰控制和连续计数器等,用于数据流的管理和加密。

    • Adaptation Field:用于同步和补充,确保数据流的时间准确性。

    • Payload:实际的音视频数据或信令信息,是 TS 包中最核心的内容。

    image-20241109150016204

★MP4

常用的多媒体容器格式,广泛用于存储音频、视频、字幕以及元数据

特点:

  • 容器格式:MP4 本身不是编码格式,而是一个封装格式,可以包含多种编码格式的音视频内容(例如 H.264、AAC)。

    高兼容性:MP4 格式在各种设备(如手机、电脑、电视)和平台上都有很高的兼容性,广泛支持。

    流媒体支持:MP4 支持流式传输,可以用于网络环境中按需播放音视频。

    灵活的内容组合:MP4 容器可以同时包含视频、音频、字幕和元数据,方便实现多语言字幕、章节、封面等丰富内容。

MP4的文件结构

MP4 文件结构基于 box(盒子) 的概念,每个box包含不同的信息,这些box以树形结构的方式组成。每个 Box 都包含一个 Header(头部)Payload(有效载荷)

box 由 header 和 body 组成,header 指明 box 的 size 和 type。size 是包含 box header 的整个 box 的大小。

  • Header:包括盒子的大小和类型。

    • box type,通常是4个ASCII码的字符如“ftyp”、“moov”等
      • ftyp(File Type Box):指定 MP4 文件的格式、兼容性和品牌,位于文件开头。它描述了文件的主品牌(Major Brand)、次要版本(Minor Version)、兼容品牌(Compatible Brands)。
      • moov(Movie Box):存储文件级的元数据,包含有关整个媒体文件的信息。
      • mdat(Media Data Box):存储音视频实际数据的 Box。
  • Payload:存储媒体数据或控制信息,可以嵌套其他 Box

!

MP4 文件播放流程

播放器在播放 MP4 文件时通常会按以下流程读取:

  1. 读取 ftyp Box:判断文件格式和兼容性。
  2. 读取 moov Box:获取文件的元数据和轨道信息。
  3. 读取 mdat Box:加载实际的音视频数据,并根据 moov 中的索引信息解码播放。
  4. 分段播放(moof/mfra):对于流媒体或按需播放的 MP4 文件,播放器可以利用 moofmfra 快速访问并流式播放片段。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498361.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 ASP.NET Core wwwroot 上传和存储文件

在 ASP.NET Core 应用程序中上传和存储文件是用户个人资料、产品目录等功能的常见要求。本指南将解释使用wwwroot存储图像(可用于文件)的过程以及如何在应用程序中处理图像上传。 步骤 1:设置项目环境 确保您的 ASP.NET 项目中具有必要的依…

S2-007-RCE(CVE-2012-0838)--vulhub

S2-007-RCE(CVE-2012-0838) 攻击者可以利用不安全的输入数据,构造OGNL表达式,最终导致服务器执行恶意命令。特别是在没有适当的输入验证或配置的情况下,攻击者可以在 HTTP 请求中嵌入 OGNL 表达式,触发远程代码执行。 Affected …

tar.gz压缩文件在linux上解压异常问题:gzip:stdin:invalid compressed data

1. 异常描述 将一个tar.gz压缩文件从windows拷贝到linux上之后,使用命令:tar -zxvf xxx.tar.gz压缩包时出现如下提示信息: 2. 异常分析 压缩包在下载的时候没有下载完整,重新下载一个试试。

UE5材质节点CameraDepthFade

相机深度消失,Fade Length相机离物体位置,Fade Offset消失偏移 可以让物体随着相机距离消失 相机深度消失 边缘自发光

Python机器学习笔记(十五、聚类算法的对比和评估)

用真实世界的数据集对k均值、凝聚聚类和DBSCAN算法进行比较。 1. 用真实值评估聚类 评估聚类算法对真实世界数据集的聚类结果,可以用调整rand指数ARI和归一化互信息NMI。 调整rand指数 (adjusted rand index,ARI)和归一化互信息…

SAP PP bom历史导出 ALV 及XLSX 带ECN号

bom总数 104W PS超过XLSX上限 ,那就分文件 *&---------------------------------------------------------------------* *& Report ZRPT_PP_BOM_HIS_ECN *&---------------------------------------------------------------------* *& tcode:zpp0…

《代码随想录》Day20打卡!

《代码随想录》二叉树:二叉搜索树的最近公共祖先 本题的完整题目如下: 本题的思路如下: 1.之前写过一个二叉树的最近公共祖先,本题相比于另一道题,不同是本题是二叉搜索树,有一些可用的性质。 2.本题使用递…

初识MySQL · 库的操作

目录 前言: 增 有关编码 删 查 改 前言: 由前文可得,MySQL是目前主流的数据库,mysql是客户端,mysqld是一种网络服务,mysqld是一种数据库服务,而对于数据库来说,是一种存储数据…

Idea创建JDK17的maven项目失败

Idea创建JDK17的maven项目失败 Error occurred during initialization of VM Could not find agent library instrument on the library path, with error: Can’t find dependent libraries Possible solution: Check your maven runner VM options. Open Maven Runner setti…

Go-知识 模板

Go-知识 模板 1. 介绍2. Text/template 包3. Html/template 包4. 模板语法4.1 模板标签4.2 添加注释4.3 访问变量4.4 访问方法4.5 模板变量4.6 访问函数4.7 数据渲染4.8 条件判断4.9 循环遍历4.10 嵌入子模板4.11 局部变量4.12 输出字符串4.13 预定义的全局函数4.14 比较函数 1…

优化租赁小程序提升服务效率与用户体验的策略与实践

内容概要 在这个快速发展的商业环境中,租赁小程序成为了提升服务效率和用户体验的重要工具。通过对用户需求的深入挖掘,我们发现他们对于功能的便捷性、响应速度和界面的友好性有着极高的期待。因此,针对这些需求,完善租赁小程序…

基础数据结构--二叉树

一、二叉树的定义 二叉树是 n( n > 0 ) 个结点组成的有限集合,这个集合要么是空集(当 n 等于 0 时),要么是由一个根结点和两棵互不相交的二叉树组成。其中这两棵互不相交的二叉树被称为根结点的左子树和右子树。 如图所示&am…

shell学习变量(二)

这里写目录标题 一、概念1、环境变量2、本地变量3、系统变量 二、环境变量三、本地变量四、系统变量五、定义变量规则1、命名规则2、定义方式3、unset命令:删除变量 一、概念 1、环境变量 环境变量指的是再当前进程有效,并且能够被子进程调用&#xff…

自动驾驶3D目标检测综述(六)

停更了好久终于回来了(其实是因为博主去备考期末了hh) 这一篇接着(五)的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 (一)…

如何恢复永久删除的PPT文件?查看数据恢复教程!

可以恢复永久删除的PPT文件吗? Microsoft PowerPoint应用程序是一种应用广泛的演示程序,在人们的日常生活中经常使用。商人、官员、学生等在学习和工作中会使用PowerPoint做报告和演示。PowerPoint在人们的学习和工作生活中占主导地位,每天都…

四大自平衡树对比:AVL树、红黑树、B树与B+树

AVL树、红黑树、B树和B树的对比与应用场景 树系列相关文章(置顶) 1、从链表到平衡树:二叉查找树的退化与优化 2、自平衡二叉查找树:如何让二叉查找树始终保持高效 3、AVL树入门:理解自平衡二叉查找树的基础 4、红黑树全…

IOS safari 播放 mp4 遇到的坎儿

起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫,网上和AI也没有讲明白。好在最终大概理清楚了,在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…

Kubernetes Gateway API-2-跨命名空间路由

1 跨命名空间路由 Gateway API 具有跨命名空间路由的核心支持。当多个用户或团队共享底层网络基础设施时,这很有用,但必须对控制和配置进行分段,以尽量减少访问和容错域。 Gateway 和 Route(HTTPRoute,TCPRoute,GRPCRoute) 可以部署到不同的命名空间中,路由可以跨命名空间…

第十六届蓝桥杯模拟赛(第一期)(C语言)

判断质因数 如果一个数p是个质数,同时又是整数a的约数,则p称为a的一个质因数。 请问2024有多少个质因数。 了解 约数,又称因数。整数a整除整数b,b为a的因数(约数)质数,又称素数。只有1和它本身两…

AI安全的挑战:如何让人工智能变得更加可信

引言 随着人工智能(AI)技术在各个领域的广泛应用,尤其是在医疗、金融、自动驾驶和智能制造等行业,AI正在重塑我们的工作和生活方式。从提高生产效率到实现个性化服务,AI带来了前所未有的便利。然而,在享受这…