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

2024-09-05 18:12

本文主要是介绍【音视频】播放音视频时发生了什么? 视频的编解码 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详解

这篇关于【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139698

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是:

PC与android平板通过浏览器监控Verybot的视频

下面这个视频是PC与android平板通过浏览器监控Verybot的视频:           http://v.youku.com/v_show/id_XNjYzNzYyMTIw.html