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

news2024/9/23 11:27:16

目录

  • ✨播放一个视频的流程
  • ✨为什么要编码(压缩)视频数据?
  • ✨如何编码(压缩)数据
    • 🎄简单的例子
    • 🎄音视频编码方式
    • 🎄视频编码格式
      • 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.coloradmin.cn/o/2105597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用python+opencv解析图像和文本数据

1. 创建虚拟环境 新建文件夹, 并在文件夹中创建虚拟环境,可以使用Vscode打开文件夹, 然后在终端中输入以下命令: python -m venv venv2. 激活虚拟环境 在终端中输入以下命令: venv\Scripts\activate3. 安装依赖 在终端中输入以下命令: pip install opencv-pythonpip inst…

docker pull命令拉取镜像失败的解决方案

docker pull命令拉取镜像失败的解决方案 一、执行docker pull命令,拉取镜像失败 报错信息:error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/51/5107333e08a87b836d48f…

第86集《大佛顶首楞严经》

《大佛顶如来密因修正了义诸菩萨万行首楞严经》。监院法师慈悲,诸位法师,诸位同学,阿弥陀佛! 请大家打开讲义188面 我们这一科讲到,辛三、盗戒。透过大乘的理观跟事修,所谓大乘的戒法来对治偷盗的行为跟偷…

EasyExcel单行或多行表头的简单Excel导出

一般Excel不需要复杂的数据格式导出,只是在表头上略有区别,下面展示单行和多行表头Excel导出 1、单行表头 例如:Excel表头只有单行,那就只需要使用注解ExcelProperty即可实现 ① 添加依赖 首先,在 pom.xml 中添加 E…

zhidianyun01/基于 ThinkPHP+Mysql 的智慧园区+智慧园区管理系统+园区物业管理系统+园区物业管理系统源码

园区物业管理系统园区管理系统园区管理园区物业物业管理系统园区物业管理系统源码 软件架构 ThinkPHPMysql 源码合作 提供完整源代码 软件界面展示

imap发送邮件:如何配置IMAP服务器发邮件?

imap发送邮件的设置教程?如何使用IMAP服务发送邮件? IMAP发送邮件作为一种高效的邮件管理方式,允许用户在多个设备上同步邮件,极大地提升了工作效率。AokSend将详细介绍如何配置IMAP服务器以实现邮件的发送。 imap发送邮件&…

Linux入门攻坚——31、rpc概念及nfs和samba

NFS:Network File System 传统意义上,文件系统在内核中实现 RPC:函数调用(远程主机上的函数),Remote Procedure Call protocol 一部分功能由本地程序完成 另一部分功能由远程主机上的 NFS本质…

通过FFmpeg和URL查看流的编码格式

FFmpeg下载后会有三个执行文件,跳转到FFmpeg所在文件夹 查看视频流URL地址的编码格式命令: // 在下载ffmpeg的文件夹中执行如下命令,可查看流的编码格式,这里的测试流是H264编码ffprobe http://devimages.apple.com/iphone/sample…

CSS学习13

CSS例子 学成网 需要使用的图片&#xff1a; 代码&#xff1a; <html><head><style>/*CSS初始化*/* { /*清除内外边框*/padding: 0;margin: 0;}ul {list-style: none; /*清除列表样式*/}.clearfix:before,.clearfix:after { /*清除浮动*/content: &qu…

C++11(1)

目录 前言 小故事 C11优势 统一的列表初始化 1.{}初始化 2. std::initializer_list 声明 1.auto 2.decltype 3.nullptr 前言 小故事 1998 年是 C 标准委员会成立的第一年&#xff0c;本来计划以后每 5 年视实际需要更新一次标准&#xff0c; C 国际 标准委员会在研究…

如何使用ChatGPT撰写研究计划书?AI写作全攻略

大家好&#xff0c;感谢关注。我是七哥&#xff0c;一个在高校里不务正业&#xff0c;折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥&#xff08;yida985&#xff09;交流&#xff0c;多多交流&#xff0c;相互成就&#xff0c;共同进步&a…

从安卓开发到AI产品经理——我的AI绘画之旅

大家好&#xff0c;我是一名有着多年安卓开发经验的程序员。在日复一日的编码生活中&#xff0c;我对AI行业产生了浓厚的兴趣。于是&#xff0c;我决定转行成为一名AI产品经理。在这个过程中&#xff0c;我通过学习AI绘画工具初步了解了AI行业&#xff0c;下面我将分享我的学习…

Apache DolphinScheduler在Cisco Webex的应用与优化实践

引言 我叫李庆旺&#xff0c;是Cisco Webex的一名软件工程师&#xff0c;同时也是Apache DolphinScheduler&#xff08;以下简称DS&#xff09;的Committer。 在过去的两年里&#xff0c;公司基于Apache DolphinScheduler进行了多项持续改进和创新&#xff0c;以更好地适应我们…

Docker 的安装

讲解下在 Linux 下如何安装 Docker ‍ 官网 Docker 官网&#xff1a;https://www.docker.com Docker Hub 官网&#xff1a; https://hub.docker.com &#xff08;有很多 Docker 镜像的仓库&#xff0c;可能得魔法上网&#xff09; 对于 Docker 初学者&#xff0c;可以从官…

SSH免密登录(Mac版)

1、查看ssh版本确保已安装 ssh -V 2、生成密钥对 ssh-keygen &#xff08;我之前安装过了所以选no&#xff09; 3、将公钥追加到需要设置免密登录的服务器上 使用ssh-copy-id命令进行追加ssh-copy-id -i id_rsa.pub useridip ( userid 和 ip 需要对应换成自己的)

opencv --- 人脸识别、人脸比对

opencv — 人脸比对 1、opencv安装参考: windows: windows 环境下安装OpenCV For Java linux:linux — CentOS 7 环境下编译安装OpenCV For Java 进入到opencv的安装目录: 进入到build\java 目录 2、准备文件 # 1. 特征分类器:windows 和 linux 中的配置文件都一样…

计算机网络:http协议

计算机网络&#xff1a;http协议 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、HTTP协议工作简介1. 特点2. 传输时间分析3. http报文结构 三、HTTP版本迭代1. HTTP1.0和HTTP1.1主要区别2. HTTP1.1和HTTP2主要区别3. HTTPS与HTTP的主要区别 四、参考文献 一、本文内容…

如何操作可以有效的防止其他人修改Excel文件?

工作中&#xff0c;我们经常遇到同一份表格可能需要好多人共同去完成&#xff0c;但是当你整理好数据发给别的同事的时候&#xff0c;等表格再回来的时候&#xff0c;你可能发现你之前设置的资料格式内容等都被修改了&#xff0c;遇到这种情况时&#xff0c;如何操作可以有效的…

Codeforces Round 970 (Div. 3)(A~H)

​​​​​题目链接​​​​​​​​​​​​​​​​​​​​​ A 当 a 为奇数的时候&#xff0c;无论如何配对都无法将最后一个 1 减去&#xff1b; 当 a 为偶数的时候&#xff0c;b 也偶数&#xff0c;自然可以内部通过加减操作变成 0&#xff1b;当 b 为奇数的时候&#…

观察者设计模式详解

观察者设计模式详解 文章目录 观察者设计模式详解一、定义二、观察者模式的结构三、特点四、应用场景五、实现 一、定义 **观察者设计模式&#xff08;Observer Pattern&#xff09;**是一种行为设计模式&#xff0c;也叫做 “发布-订阅模式”&#xff0c; 它定义了一种一对多…