【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录

  • ✨播放一个视频的流程
  • ✨为什么要编码(压缩)视频数据?
  • ✨如何编码(压缩)数据
    • 🎄简单的例子
    • 🎄音视频编码方式
    • 🎄视频编码格式
      • H264编码
      • 是什么?发展历程?
      • H.264基本单元
      • H.264的I帧,P帧,B帧
    • 🎄音频编码格式
  • ✨视频文件封装格式
  • ✨解封装格式
  • ✨视频解码
  • ✨H264分层结构
    • 🎄网络上传输H264视频数据的流程
      • VCL的结构关系
    • 🎄NAL单元
  • ✨ 参考文章

✨播放一个视频的流程

1.对音视频进行编码,一般用H.264编码标准
2.对编码后的音视频进行封装,一般封装为MP4格式
3.播放MP4视频,必须要解封装
4.解封装之后得到的是编码后的音视频编码流,必须解编码(压缩)
在这里插入图片描述

✨为什么要编码(压缩)视频数据?

在这里插入图片描述

视频是又一帧一帧的图片组成的,人眼有视觉暂留效应,当帧序列以一定的速率播放,我们就能看到连续的视频。

比如一个1920x1080分辨率,32位,每秒30帧的视频。一秒钟就要流过 1920x1080x32x30 = 237M的数据!!!

一个.rgb文件75.5mb,编码为.h264文件之后大概为525KB.

✨如何编码(压缩)数据

🎄简单的例子

比如大话西游朱茵的经典照,取两张图片,一个图片右眼是睁开的,一个图片右眼是闭着的。那么保存第二张图片的时候只需要记录这张图片和上一张图像的区别信息即可。

编码就是去除冗余。

在这里插入图片描述


从计算机的角度来说:比如一个全黑的图片,存储方法是100x100的数组,每个矩阵的值都是0。该数组是Int型,存储这个图片需要100x100x4字节的大小。

只需要用一个int记录该数组的数,即0。
然后再用两个int分别记录矩阵的长和宽。

就可以用这三个int变量来复原该图像。

🎄音视频编码方式

音视频开发——H264编解码总结

🎄视频编码格式

视频编码的作用: 将视频像素数据(RGB,YUV 等)压缩成视频码流,从而降低视频的数据量。常用的音频编码方式有以下几种:
在这里插入图片描述

H264编码

打开斗鱼直播间,右键点击查看参考信息选项,会发现直播的视频流用的是H264编码方式。

在这里插入图片描述

是什么?发展历程?

H264,通常也被称之为H264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)

H264是一种编码算法。是主流的编码标准。

像大多数看到的视频,如rmvb、avi、mp4、flv大多数是由h264进行编码,当然也会有不同的,如mpeg4、vp9这样冷门的编码。


H264视频编码发展历程
在这里插入图片描述

H.264基本单元

在H.264定义的结构中,一个视频图像编码后的数据叫做一帧。 一帧是由一个或多个片(slice)组成的,一个片是由一个或多个宏块(MB)组成的(宏块是H264编码的基本单位),一个宏块是由16x16的yuv数据组成的。

H.264的I帧,P帧,B帧

I帧:关键帧,就是把一个图片直接压缩,压缩之后的内容就是I帧,它可以单独解码出一个完整的图像。


P帧:前向预测编码帧。记录本帧和之前的一个关键帧的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。

比如记录第三张图片,只需记录右下角的粉矩形,然后用这个信息 叠加第一张图片,即可复原第三张图片。
在这里插入图片描述


B帧:双向预测编码帧,既要参考前面的,又要参考后面的。

比如想要记录第二张图片,它只需要记录右上角的椭圆,然后将它与第一张原始图片和第三张原始图片叠加即可复原第二张图片。
在这里插入图片描述

这种方法压缩效果很强。本来第二张图片是个很复杂的图片,它只需要记录第一张图片然后记录第二张第三张图片的部分信息就能复原第二张图片。

🎄音频编码格式

在这里插入图片描述
MP3 MP3,英文全称 MPEG-1 or MPEG-2 Audio Layer III,是曾经非常流行的一种数字音频编码和有损压缩格式,它被设计来大幅降低音频数据量。它是在 1991 年,由位于德国埃尔朗根的研究组织 Fraunhofer-Gesellschaft 的一组工程师发明和标准化的。MP3 的普及,曾对音乐产业造成极大的冲击与影响。

✨视频文件封装格式

上一步编码(压缩)之后必须要把编码后的内容按照一定的格式放在一个文件中,这个文件相当于一个外壳,它就是封装格式(容器)。常见的格式为 .mp4。

或者把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。 下面是几种常用的视频文件后缀类型与其相对应的封装格式。

在这里插入图片描述

✨解封装格式

如果要播放一个MP4文件,MP4是一个封装格式数据,是一个容器,要想播放它首先要打开它。然后把数据从容器中取出来。

✨视频解码

直接从容器里面拿出来的音视频数据不能直接拿出来播放。这些都是编码(压缩)后的数据。

这样的数据显然不能直接转成图片然后播放。所以要对数据进行解码,比如上面的例子,我们拿到区别信息之后,参考第一张图片,进行整合,然后才能拿到完整的图像进行展示。

✨H264分层结构

H.264码流文件分为两层:
1.VCL (Video Coding Layer 视频编码层):它是被编码(压缩)后的视频数据。
2.NAL(Netword Abstraction layer 网络提取层):VCL数据被封装到NAL单元中之后,才可以用于传输或者存储。

🎄网络上传输H264视频数据的流程

在网络上传输H264视频数据与服务器段的java代码一样:
在这里插入图片描述

VCL的结构关系

参考博客:h.264(2)——VCL/NAL/切片/宏块
在这里插入图片描述
在这里插入图片描述

🎄NAL单元

一帧图片经过H.264 编码后,变成了多个片(slice),每片包含整数个宏块(至少一个宏块,最多包含整个图像宏块),NAL单元就是装载着这些片(slice)的载体。

✨ 参考文章

音视频开发——H264编解码总结

强烈推荐:【音视频 | H.264】H.264视频编码及NALU详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python游戏开发】拼图小游戏demo

使用mu编辑器 pgzero编写拼图小游戏 import randomSIZE 96 # 设置每张图块的大小 WIDTH SIZE * 3 # 根据土块大小设置窗口 HEIGHT SIZE * 3 pics [] # 存放图块 finished False # 游戏结束标识# 将前八张图块存放在pics列表中 for i in range…

009.Python爬虫系列_urllib模块案例

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

传统CV算法——基于Opencv的多目标追踪算法

基于 OpenCV 的跟踪算法有多种,每种算法都有其特定的应用场景和优缺点。以下是一些常见的基于 OpenCV 的目标跟踪算法: 1. BOOSTING 跟踪器 描述:基于 AdaBoost 算法的跟踪器。它是一种早期的跟踪算法,使用的是基于弱分类器的强…

php转职golang第二期

以下是一份简单的 Go 基本语法笔记: 变量与常量: • var 声明变量。• const 声明常量。数据类型: • 整型、浮点型、布尔型、字符串型等。流程控制: • if-else 语句。• for 循环。函数: • 定义和调用函数。数…

Linux-【组管理、权限管理、定时任务调度】

目录 前言 Linux组基本介绍 文件/目录 所有者 查看文件 所有者 修改文件所有者 文件/目录 所在组 修改文件/目录 所在组 其它组 改变用户所在组 权限的基本介绍 rwx权限 rwx作用到文件 rwx作用到目录 修改权限 第一种方式:、-、变更权限 第二种方式…

系统编程--线程

这里写目录标题 线程概念什么是线程简介图解 内核原理图解 线程共享资源与非共享资源共享资源非共享资源 线程优缺点 线程控制原语pthread_self、pthread_create简介代码总结 循环创建多个子线程错误代码 线程间全局变量共享pthread_exit简介代码 一级目录二级目录二级目录二级…

可持久化Trie详解,最大异或和,k大异或和

零、碎碎念 打比赛没遇上可持久化Trie,做个CMU 15-445的project0,上来就碰上了…… 关于Trie详见:[Trie树/字典树的原理及实现C/C]_trie字典树原理-CSDN博客 一、可持久化Trie 1.1 基本思想 可持久化Trie和可持久化线段树类似&#xff0c…

白小白为波司登新品创作歌曲《登峰之路》,穿越风雨守护前行者

随着天气渐凉,波司登品牌推出全新新品——轻薄羽绒叠变系列,作为波司登品牌的新品推荐官,歌手白小白为波司登创作并演唱《轻薄羽绒叠变》系列主题曲《登峰之路》。歌曲中,白小白以激昂澎湃,明快有力的旋律以及深情又充…

[数据集][目标检测]西红柿缺陷检测数据集VOC+YOLO格式17318张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):17318 标注数量(xml文件个数):17318 标注数量(txt文件个数):17318 标…

【第0006页 · 数组】寻找重复数

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0006页 寻找重复数 今天想讨论的一道题在 LeetCode 上评论也是颇为“不错”。有一说一,是道好题,不过我们还是得先理解了它才…

【Unity小技巧】URP管线遮挡高亮效果

前言 在URP渲染管线环境下实现物体遮挡高亮显示效果,效果如下:Unity URP遮挡高亮 实现步骤 创建层级,为需要显示高亮效果的物体添加层级,比如Player 创建一个材质球,也就是高亮效果显示的材质球找到Universal Render…

react项目搭建、基础知识

前言 教学内容来源于黑马 黑马程序员前端React18入门到实战视频教程,从reacthooks核心基础到企业级项目开发实战 项目搭建 创建项目 pnpm create vite选择框架 选择语言和构建 安装依赖并运行 pnpm install pnpm run dev运行成功 基础知识 文件 main…

极盾故事|某金融租赁机构应用数据保护新策略:“动态脱敏”“二次授权”

数据的流通使用是创新的动力,但安全和合规是不可逾越的底线。企业如何在这三者之间找到平衡点? 极盾科技,助力某金融租赁机构,基于极盾觅踪构建应用数据动态脱敏系统,实现10+核心应用系统的统一管理&#x…

磁电偶极子天线学习1 一种60GHz 宽带圆极化口径耦合磁电偶极子天线阵列

摘要: 一种新型的圆极化口径耦合天线被提出。这种圆极化磁电偶极子天线由刻蚀在短路基片集成波导的一部分的宽臂上,并且很容易被集成基片。在工作频段内实现了宽于28.8%的阻抗带宽和宽带3-dB的25.9%的轴比和的增益。此外,因为圆极化辐射由两个…

ModuleNotFoundError: No module named ‘mmcv.transforms‘

不得已的解决方法: mmcv升级到2.0.0即可解决 升级后自然又面临一系列不兼容问题! 官方文档查漏补缺

HNU-2023电路与电子学-实验3

写在前面: 本次实验是完成cpu设计的剩余部分,整体难度比上一次要小,细心完成就能顺利通过全部测评 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能…

基于python的Selenium webdriver环境搭建(笔记)

一、PyCharm安装配置Selenium环境 本文使用环境:windows11、Python 3.8.1、PyCharm 2019.3.3、Selenium 3.141.0 测试开发环境搭建综述 安装python和pycharm安装浏览器安装selenium安装浏览器驱动测试环境是否正确 这里我们直接从第三步开始 1.1 Seleium安装…

Python Flask_APScheduler定时任务的正确(最佳)使用

描述 APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能。最近使用Flask框架使用Flask_APScheduler来做定时任务,在使用过程当中也遇到很多问题,例如在定时任务调用的方法中需要用到flask的app.app_context()时&#…

828华为云征文|使用sysbench对Mysql应用加速测评

文章目录 ❀前言❀测试环境准备❀测试工具选择❀测试工具安装❀mysql配置❀未开启Mysql加速测试❀开启Mysql加速测试❀总结 ❀前言 大家好,我是早九晚十二。 昨天有梳理一篇关于华为云最新推出的云服务器产品Flexus云服务器X。当时有说过,这次的华为云F…

一个好用的Maven依赖冲突解决插件:Maven Helper

在项目开发,或项目Maven需要新增依赖、项目依赖组件升级时,经常会出现添加后,因为各个模块中有相同的依赖、不同的版本而导致依赖冲突,从而导致项目启动不起来,这种冲突非常恶心,因为是传递依赖所以会看不出…