音视频开发—H264码流组成

2024-06-01 22:44

本文主要是介绍音视频开发—H264码流组成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文包含了编码过程的相关概念,如果不了解编码过程,请看这篇文章:H264相关概念和压缩原理详解
H.264视频编码标准将视频编码过程分为两个主要层次:视频编码层(VCL, Video Coding Layer)和网络抽象层(NAL, Network Abstraction Layer)。

文章目录

    • 视频编码层(VCL, Video Coding Layer)
      • VCL结构关系
    • 网络抽象层(NAL, Network Abstraction Layer)
    • H264码流相关概念
      • SODB(String Of Data Bits)
      • RBSP(Raw Byte Sequence Payload)
      • NALU(Network Abstraction Layer Unit)
      • H264切片:
    • 整体组成架构

视频编码层(VCL, Video Coding Layer)

  • 定义:VCL负责实际的视频数据编码。这一层执行视频压缩算法,将原始视频帧转换为压缩的比特流。
  • 功能:
    • 运动估计和补偿:减少时间冗余,通过参考前后帧来预测当前帧。
    • 变换和量化:减少空间冗余,使用离散余弦变换(DCT)等技术将图像数据转换为频率域并进行量化。
    • 熵编码:进一步压缩数据,通过无损编码技术如CABAC(上下文自适应二进制算术编码)或CAVLC(上下文自适应变长编码)进行压缩。
  • 输出:VCL生成的输出是SODB(String Of Data Bits),即原始数据比特流

VCL结构关系

每一个被压缩的视频帧由slice组成。大多数情况下,一帧图片帧对应一个slice,每一个slice 有很多宏块。宏块中又包含了子块。

在这里插入图片描述

网络抽象层(NAL, Network Abstraction Layer)

  • 定义:NAL负责将VCL生成的比特流封装成适合传输和存储的格式。NAL使得H.264编码的数据能够适应各种网络和存储环境。
  • 功能:
    • 封装和分片:将VCL生成的SODB封装成NAL单元(NALU),并根据需要将大的NALU分片。
    • 传输适应性:提供一种通用的格式,使视频数据能够在不同的传输协议(如RTP、MPEG-2 TS、HLS等)和存储格式(如MP4、MKV等)中传输和存储。
    • 错误恢复和同步:通过包含参数集(如SPS和PPS)和补充增强信息(SEI),提供错误恢复和流同步的支持。
  • 输出:NAL生成的输出是NALU(Network Abstraction Layer Unit),每个NALU包含一个NAL头和一个RBSP(Raw Byte Sequence Payload)。

H264码流相关概念

SODB(String Of Data Bits)

  • 定义:SODB是由视频编码层(VCL, Video Coding Layer)生成的原始数据比特流
  • 特性:长度不一定是8的倍数,这意味着在实际编码时,它可能需要进行一些填充以确保数据的对齐。

RBSP(Raw Byte Sequence Payload)

  • 定义:RBSP是对SODB进行处理后的数据,比SODB更接近传输格式。

  • 填充(Padding)

    :为了确保RBSP长度是字节的倍数(8的倍数),需要在SODB的末尾添加填充位。这些填充位通常是一个比特的"1"后跟零个或多个"0"。

    • 示例:假设SODB长度是10比特,RBSP将通过在末尾添加一个“1”比特和6个“0”比特,形成一个16比特(2字节)的数据。

NALU(Network Abstraction Layer Unit)

  • 定义:NALU是H.264码流的基本传输单元,由NAL头(NAL Header)和RBSP(Raw Byte Sequence Payload)组成。
  • 结构:
    • NAL头(NAL Header):包含关于NALU类型、优先级等的信息,通常是一个字节(8比特)。
    • RBSP(Raw Byte Sequence Payload):承载实际的编码数据,已经过填充处理以保证字节对齐。

相关关系如下图:

在这里插入图片描述

H264切片:

slice 储存在原始比特流中,slice包含了很多个宏块,宏块又包含了宏块类型,预测模式,残差值

在这里插入图片描述

整体组成架构

H264 码流分为两种类型,一种储存在文件中, 格式对应为Annexb 格式。一种通过网络传输,格式对应RTP格式。唯一的区别就是码流文件有起始码,而RTP包没有起始码

NALU是H.264码流的基本传输单元,由NAL头(NAL Header)和NALU Body组成。

NALU body 包含了具体的编码数据,这些编码数据由slice 组成。slice由许多的宏块组成,宏块又包含了宏块类型,预测模式,残差值压缩数据。

在这里插入图片描述

这篇关于音视频开发—H264码流组成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块