H264视频编码中Annex B 格式介绍

Annex B 格式是 H.264 (也称为 AVC) 视频编码标准中的一种数据表示格式,用于将视频数据从编码器传输到解码器。它主要用于流媒体传输和文件存储。

文章目录

      • Annex B 格式的定义
      • Annex B 格式的主要特点
      • Annex B 与其他格式的对比
      • Annex B 格式示例
      • 将 H.264 数据从 MP4 格式转换为 Annex B 格式
      • 附加信息
        • H.264 标准
        • MP4 容器格式

Annex B 格式的定义

在 H.264 标准中,Annex B 是一种数据格式规范,定义了如何将 H.264 码流以适合网络传输和文件存储的方式进行编码。Annex B 格式以一系列 NAL (Network Abstraction Layer) 单元组成,每个单元以特定的起始码分隔。

Annex B 格式的主要特点

  1. 起始码

    • 在 Annex B 格式中,每个 NAL 单元以一个或多个起始码 (start code) 开始。起始码是一个 3 字节或 4 字节的字节序列,常用的有:
      • 3 字节起始码:0x000001
      • 4 字节起始码:0x00000001
    • 这些起始码用于标识 NAL 单元的开始位置。
  2. NAL 单元

    • NAL 单元是 H.264 视频数据的基本传输单元,每个 NAL 单元包含一个完整的编码视频数据块。
    • NAL 单元可以有不同的类型,如 IDR 帧、P 帧、B 帧、SPS、PPS 等。
  3. NAL 单元类型

    • 每个 NAL 单元的第一个字节包含了 NAL 单元的类型信息。常见的类型包括:
      • SPS (Sequence Parameter Set):序列参数集,包含解码视频流所需的全局配置信息。
      • PPS (Picture Parameter Set):图像参数集,包含解码视频流的图像参数信息。
      • IDR (Instantaneous Decoder Refresh):关键帧,用于刷新解码器的状态。
      • Non-IDR Frames:包括 I 帧、P 帧、B 帧等其他类型的帧。

Annex B 与其他格式的对比

特性Annex B 格式AVC/MPEG-4 Part 10MP4 格式
起始码使用 0x0000010x00000001不使用起始码不使用起始码
数据组织NAL 单元以起始码分隔NAL 单元前有长度字段NAL 单元前有长度字段
用途流媒体传输、文件存储编码标准容器格式

Annex B 格式示例

假设有以下 H.264 NAL 单元数据:

0x000001 0x65 0x88 0x84 0x21 0x00 0x00 0x00 0x01 0x41 0xC8 0x00 0x00 0x00 0x01 0x68 0xEB 0x21 0x00 0x00 0x00 0x01 0x65 0x88 0x84 0x21

这里的 0x0000010x00000001 是起始码,后面的字节是 NAL 单元的内容。

将 H.264 数据从 MP4 格式转换为 Annex B 格式

MP4 格式中,NAL 单元前有一个 4 字节的长度字段,而 Annex B 格式中则使用起始码来分隔 NAL 单元。

附加信息

H.264 标准

H.264 标准是由 ITU-T H.264 和 ISO/IEC 14496-10(MPEG-4 Part 10)定义的,用于视频编码的标准。它提供了高效的视频压缩技术,广泛应用于视频流媒体、高清视频存储等领域。

MP4 容器格式

MP4 是一种常用的多媒体文件容器格式,可以包含视频、音频、字幕等多种媒体数据。MP4 文件中的视频数据通常以 AVCC 格式存储,其中 NAL 单元前面会有一个 4 字节的长度字段。

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

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

相关文章

查询(q_proj)、键(k_proj)和值(v_proj)投影具体含义

查询(q_proj)、键(k_proj)和值(v_proj)投影,这些投影是自注意力机制的核心组件,特别是在Transformer架构中。 让我们通过一个简化的例子来说明: import numpy as np# 假设输入维度是4,注意力头数是2 input_dim 4 num_heads 2 …

每天一道Java面试题系列之--Spring如何解决循环依赖问题

面试题:Spring如何解决循环依赖问题? 问题背景: 在Spring框架中,循环依赖通常发生在单例(Singleton)作用域的bean之间。当两个或多个bean在它们的构造函数中相互引用时,Spring容器在创建这些b…

电脑32位和62位是什么意思

在现代计算机世界中,32位和64位是两个常见的术语,但许多用户可能不太清楚它们的确切含义以及它们之间的区别。本文将详细介绍32位和64位计算机的基本概念、如何查看您的计算机是32位还是64位,以及它们对用户的实际影响。 32位与64位的基本概…

算法之工程化内容(1)—— Linux常用命令

目录 1. cd 命令 2. pwd 查看当前工作目录路径 3. SSH远程登录 4. ln -s 软链相关 5. mkdir 新建空目录 6. cp 复制 7. chown 权限改写 8. 进程相关(nohup/ ps/ kill) 9. tar -czvf/ tar -xzvf,zip/ unzip解压缩文件 10. df/ du/ free 11. hi…

MySQL篇七:复合查询

文章目录 前言1. 基本查询回顾2. 多表查询3. 自连接4. 子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 在from子句中使用子查询4.5 合并查询4.5.1 union4.5.2 union all 前言 前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够。 1.…

【高中数学/指数函数】比较a=0.6^0.9 b=0.6^1.5 c=1.5^0.6的大小

【问题】 比较a0.6^0.9 b0.6^1.5 c1.5^0.6的大小 【解答】 指数函数y0.6^x是减函数&#xff0c;因为0.9<1.5,所以0.6^0.9>0.6^1.5,即a>b; 指数函数y1.5^x是增函数&#xff0c;1.5^0.6>1.5^01>0.6^0.9,即c>a; 综上&#xff0c;得出c>a>b的结论。 …

【运维】docker批量删除临时镜像(两种方式)

docker批量删除Tag<none>的临时镜像 在开发的时候&#xff0c;需要经常发布开发包&#xff0c;在使用docker build构建镜像的时候&#xff0c;同一个版本经常会使用相同tag&#xff0c;频繁打包一段时间后&#xff0c;本地会出现很多Tag<none>的临时镜像&#xff…

【MySQL】MySQL中的字段类型和区别

文章目录 前言一、说明举例1. 数值类型2. 字符串类型3. 日期和时间类型 二、总结 前言 在设计数据库和创建表时&#xff0c;理解MySQL中的各种字段类型及其区别是非常重要的。每种类型都有其特定的用途和存储需求。在本文中&#xff0c;我们将详细讨论MySQL中的各种字段类型&a…

uniapp如何发送websocket请求

方法1&#xff1a; onLoad() {uni.connectSocket({url: ws://127.0.0.1:8000/ws/stat/realTimeStat/,success: (res) > {console.log(connect success, res);}});uni.onSocketOpen(function (res) {console.log(WebSocket连接已打开&#xff01;);uni.sendSocketMessage({d…

Xinstall揭秘:APP推广数据背后的真相,让你的营销更精准!

在这个移动互联网时代&#xff0c;APP如同雨后春笋般涌现&#xff0c;但如何在这片红海中脱颖而出&#xff0c;成为每一个开发者与运营者面临的共同难题。其中&#xff0c;APP推广统计作为衡量营销效果、优化推广策略的关键环节&#xff0c;更是不可忽视的一环。今天&#xff0…

[GDOUCTF 2023]Tea writeup

通过strings找到关键函数 int __fastcall main_0(int argc, const char **argv, const char **envp) {char *v3; // rdi__int64 i; // rcxchar v6; // [rsp20h] [rbp0h] BYREFint v7; // [rsp24h] [rbp4h]int v8; // [rsp44h] [rbp24h]int four_key[12]; // [rsp68h] [rbp48h]…

你知道滚筒式高速视觉检测机外观怎么“看”出产品质量吗?

点火线圈胶套是一种用于保护点火线圈绝缘部分的胶质套管。这种胶套通常由高温耐磨的橡胶或硅胶材料制成&#xff0c;具有良好的绝缘性能和耐高温性能。点火线圈胶套的作用是防止点火线圈与外部环境接触&#xff0c;防止受潮、灰尘或化学物质的侵蚀&#xff0c;同时起到绝缘和保…

python怎么调用cmd命令

关于python调用cmd命令&#xff1a; 1、python的OS模块 OS模块调用CMD命令有两种方式&#xff1a;os.popen()、os.system()都是用当前进程来调用。 OS.system是无法获取返回值的。当运行结束后接着往下面执行程序。用法如&#xff1a;OS.system("ipconfig"). OS.…

随身WiFi市场乱象横生,随身WiFi测评最好的格行随身WiFi如何引领变革?

在当今随身WiFi市场乱象频发、内卷严重的背景下&#xff0c;消费者对于产品的性能与商家是否会后台割韭菜依旧存疑&#xff0c;尤其是“随身WiFi到底卡不卡&#xff1f;”的问题&#xff0c;成为了广大消费者关注的重点。然而&#xff0c;在众多品牌中&#xff0c;格行随身WiFi…

【音频特征提取】傅里叶变换算法源码学习记录

目录 背景快速理解FFT&#xff08;快速傅里叶变换&#xff09;IFFT&#xff08;逆傅里叶变换&#xff09;STFT&#xff08;短时傅里叶变换&#xff09; 代码实现FFT源代码IFFT源代码FFT、IFFT自己实验STFT源代码STFT自己实验 总结 背景 最近用到了相关操作提取音频信号特征&am…

Vue3 根据相对路径加载vue组件

一、设置动态组件加载器 1、"DynamicFormLoader.vue" <template><div><component :is"formComponent" v-if"formComponent" /></div> </template><script setup> import { ref, watch } from vue; import …

如何测试扫地机器人的稳定性

测试扫地机器人的稳定性是一个综合性的过程&#xff0c;旨在确保机器人在各种环境和条件下都能稳定运行。以下是一些关键的测试步骤和方面&#xff1a; 清洁效果测试 目的&#xff1a;评估扫地机器人在不同地面和污渍类型上的清洁能力。 方法&#xff1a; 使用不同类型的地面&…

标签印刷检测,如何做到百分百准确?

印刷标签是一种用于标识、识别或包装产品的平面印刷制品。这些标签通常在纸张、塑料膜、金属箔等材料上印刷产品信息、条形码、图像或公司标识&#xff0c;以便于产品识别和管理。印刷标签有各种形状、尺寸和材质&#xff0c;可以根据具体需求进行定制设计。常见的印刷标签包括…

FlutterFlame游戏实践#15 | 生命游戏 - 演绎启动

theme: cyanosis 本文为稀土掘金技术社区首发签约文章&#xff0c;30天内禁止转载&#xff0c;30天后未获授权禁止转载&#xff0c;侵权必究&#xff01; Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

android 居中对齐

在 Android 中&#xff0c;要使 LinearLayout 中的内容居中对齐&#xff0c;你可以通过设置 android:gravity 属性或使用 android:layout_gravity 属性来实现。这两个属性的使用取决于你希望对齐的内容是 LinearLayout 内部的子视图还是 LinearLayout 本身相对于其父布局的对齐…