当前位置: 首页 > news >正文

音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB

=================================================================

音视频入门基础:H.264专题系列文章:

音视频入门基础:H.264专题(1)——H.264官方文档下载

音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件

音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB

=================================================================

一、NALU

H.264码流中,所有的数据,都被封装成一个个NALU(又叫NAL Unit,全称为:Network Abstraction Layer Unit,中文被翻译为:网络抽象层单元)。而目前 H.264 流行的包装方式分别为AnnexB和avcC。对于AnnexB格式的H.264码流来讲,为了分割各个 NALU ,编码时在每个 NALU 前面加上0x000001或0x00000001作为startcode(起始码)。解码时,要将带有startcode的NALU 去掉 startcode,变为不带startcode的NALU:

二、EBSP

去掉startcode后,NALU 的第一个字节 为 占用 1 位的forbidden_zero_bit  + 占用 2 位 的nal_ref_idc  + 占用 5 位的nal_unit_type。它们加起来刚好8位,也就是1个字节,一般被我们称为NALU Header(NAL Unit Header)。解码时,去掉startcode然后去掉NALU Header后的NALU负载被我们称为EBSP(Encapsulate Byte Sequence Payload):

三、RBSP

由于去掉startcode然后去掉NALU Header后的NALU负载 中可能存在形式为0x00000X(其中X为0、1、2或3)的数据,为了防止它们跟startcode冲突,编码时会在0x0000之后添加一个emulation_preventon_three_byte (防竞争字节,值为0x03),使其变为0x0000030X,就像下面这样:

0x000000 => 0x00000300
0x000001 => 0x00000301
0x000002 => 0x00000302
0x000003 => 0x00000303

解码时,将EBSP中的防竞争字节去掉,就是RBSP(Raw Byte Sequence Payload)

四、SODB

SODB是真正的未加工过的H.264流。H.264 码流中的操作单位是位,而不是字节。因为视频的传输和存贮是十分在乎体积的,对于每一个比特(bit)要格外珍惜。所以H.264 中的操作单位是比特。比如H.264中的sps,它的constraint_set0_flag等属性就只占了1比特。

这就导致可能出现一种情况:H.264数据写完后,写入的数据量不满一个字节。所以编码时要在未加工过的H.264流之后,添加一个值等于1的尾部来表示H.264流的结束,该位称为停止位(rbsp_stop_one_bit)。然后为了字节对齐,在停止位(值为1)之后添加0位使得8位对齐(简单来讲,就是为了让H.264数据写完后,最后写入的数据满一个字节)。编码时通过补齐,让H.264流从位流(SODB)变为字节流(RBSP),以便每个语法的第一个位始终与字节的第一个位对齐。RBSP 去掉补齐的数据后,就是 SODB(String of Data Bits):

五、总结

六、参考文章

《H.264 stream structure》

《H.264中NALU、RBSP、SODB的关系》

《Introduction to H.264: (1) NAL Unit》
《H264 - what, why and how》

相关文章:

音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…...

误删群晖NAS数据有什么找回的方法?

1、使用群晖 NAS 自带的备份功能:如果您之前启用了群晖的备份计划,例如 Hyper Backup 或 Snapshot Replication,您可以从备份中恢复数据。 1.1、Hyper Backup 可以将数据备份到多种目的地,包括本地存储、外部硬盘、其他 NAS 设备等…...

【CRASH】freelist异常导致的异常地址访问

freelist异常导致的异常地址访问 问题现象初步分析继续深入新的发现沙盘推演寻找元凶分析代码后记 问题现象 项目一台设备几天内出现了两次crash,都是异常地址访问导致。 [66005.261660] BUG: unable to handle page fault for address: ffffff8881575110初步分析…...

【QT】C++ || 左值引用、右值引用、移动语义、完美转发

在C中,左右值引用是高级语言特性,用于更高效的内存和资源管理。了解左右值引用的概念对于编写高效的C代码非常重要。下面解释左右值引用的概念、用途和区别,并通过示例来说明它们的使用。 左值引用(Lvalue Reference)…...

【深度学习驱动流体力学】计算流体力学算例剖析与实现

目录 一.求解器分类汇总压缩性流动求解器(Compressible Flow Solvers):不可压缩流动求解器(Incompressible Flow Solvers):多相流动求解器(Multiphase Flow Solvers):热传递求解器(Heat Transfer Solvers):其他特殊求解器:其他常见求解器:求解器分类:二.求解器案…...

Midjourney角色一致性如何控制两个人物

实操演示 如何用Midjourney完成《甄嬛大战蝙蝠侠》 思路 先生成一个大致符合要求的图片,作为底图基于底图,用局部重绘功能,逐步修改细节 生成底图 我们想要甄嬛大战蝙蝠侠,先试一下直接让他生成 Zhen Huan vs. Batman, in t…...

Python基础-引用参数、斐波那契数列、无极分类

1.引用参数的问题 (1)列表(list) 引用参数,传地址的参数,即list1会因list2修改而改变。 list1 [1,2,3,4] list2 list1 print(list1) list2[2] 1 print(list2) print(list1)非引用参数,不传…...

【MySQL统计函数count详解】

MySQL统计函数count详解 1. count()概述2. count(1)和count(*)和count(列名)的区别3. count(*)的实现方式 1. count()概述 count() 是一个聚合函数,返回指定匹配条件的行数。开发中常用来统计表中数据,全部数据,不为null数据,或…...

大数据的发展,带动电子商务产业链,促进了社会的进步【电商数据采集API接口推动电商项目的源动力】

最近几年计算机技术在诸多领域得到了有效的应用,同时在多方面深刻影响着我国经济水平的发展。除此之外,人民群众的日常生活水平也受大数据技术的影响。 在这其中电子商务领域也在大数据技术的支持下,得到了明显的进步。虽然电子商务领域的发…...

Python类中变量定义详解

✨前言: Python中的类可以定义两种类型的变量:类变量和实例变量。 类变量(Class Variables): 类变量是在类级别上定义的变量,它们是对所有实例共享的。这意味着类变量只有一个副本,无论你创建了…...

c++ extern 关键字详解

extern关键字在C中用于声明变量或函数的外部链接。它通常用于以下几种场景: 声明全局变量:在一个文件中定义变量,在其他文件中使用extern声明该变量,以便在多个文件之间共享。C和C混合编程:在C代码中引用C语言编写的函…...

计算机网络:运输层 - TCP 流量控制 拥塞控制

计算机网络:运输层 - TCP 流量控制 & 拥塞控制 滑动窗口流量控制拥塞控制慢开始算法拥塞避免算法快重传算法快恢复算法 滑动窗口 如图所示: 在TCP首部中有一个窗口字段,该字段就基于滑动窗口来辅助流量控制和拥塞控制。所以我们先讲解滑…...

Python学习打卡:day10

day10 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day1073、文件的读取操作文件的操作步骤open()打开函数mode常用的三种基础访问模式读操作相关方法read()方法readlines()方法readline()方法for循…...

新书速览|Ubuntu Linux运维从零开始学

《Ubuntu Linux运维从零开始学》 本书内容 Ubuntu Linux是目前最流行的Linux操作系统之一。Ubuntu的目标在于为一般用户提供一个最新的、相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。《Ubuntu Linux运…...

[Qt的学习日常]--窗口

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、窗口的分…...

Vue发送http请求

1.创建项目 创建一个新的 Vue 2 项目非常简单。在终端中,进入您希望创建项目的目录(我的目录是D:\vue),并运行以下命令: vue create vue_test 2.切换到项目目录,运行项目 运行成功后,你将会看到以下的编译成功的提示…...

学习使用js和jquery修改css路径,实现html页面主题切换功能

学习使用js和jquery修改css路径&#xff0c;实现html页面主题切换功能 效果图html代码js切换css关键代码jquery切换css关键代码 效果图 html代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>修改css路径</title&g…...

(转)请介绍一下Redis的数据淘汰策略

1. **NoEviction&#xff08;不淘汰&#xff09;**&#xff1a;当内存不足时&#xff0c;直接返回错误&#xff0c;不淘汰任何数据。该策略适用于禁止数据淘汰的场景&#xff0c;但需要保证内存足够。 2. **AllKeysLFU&#xff08;最少使用次数淘汰&#xff09;**&#xff1a;…...

APP自动化测试-Appium常见操作之详讲

一、基本操作 1、点击操作 示例&#xff1a;element.click() 针对元素进行点击操作 2、初始化&#xff1a;输入中文的处理 说明&#xff1a;如果连接的是虚拟机&#xff08;真机无需加这两个参数&#xff0c;加上可能会影响手工输入&#xff09;&#xff0c;在初始化配置中…...

写给大数据开发:谈谈数仓建模的反三范式

在数仓建设中&#xff0c;我们经常谈论反三范式。顾名思义&#xff0c;反范式化指的是通过增加冗余或重复的数据来提高数据库的读性能。简单来说&#xff0c;就是浪费存储空间&#xff0c;节省查询时间。用行话讲&#xff0c;这就是以空间换时间。听起来像是用大炮打蚊子&#…...

Stable diffusion 3 正式开源

6月12日晚&#xff0c;著名开源大模型平台Stability AI正式开源了&#xff0c;文生图片模型Stable Diffusion 3 Medium&#xff08;以下简称“SD3-M”&#xff09;权重。 SD3-M有20亿参数&#xff0c;平均生成图片时间在2—10秒左右推理效率非常高&#xff0c;同时对硬件的需求…...

如何配置node.js环境

文章目录 step1. 下载node.js安装包step2. 创建node_global, node_cache文件夹step3.配置node环境变量step3. cmd窗口检查安装的node和npm版本号step4. 设置缓存路径\全局安装路径\下载镜像step5. 测试配置的nodejs环境 step1. 下载node.js安装包 下载地址&#xff1a;node.js…...

python tensorflow 各种神经元

感知机神经元&#xff08;Perceptron Neuron&#xff09;&#xff1a; 最基本的人工神经元模型&#xff0c;用于线性分类任务。 import numpy as npclass Perceptron:def __init__(self, input_size, learning_rate0.01, epochs1000):self.weights np.zeros(input_size 1) #…...

Gone框架介绍27 - 再讲 Goner 和 依赖注入

gone是可以高效开发Web服务的Golang依赖注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文档地址&#xff1a;https://goner.fun/zh/ 文章目录 Goner 和 依赖注入Goner的定义依赖标记Goners 注册Priest函数 Goner 和 依赖注入 Gone 作为一个依赖注入框架&am…...

【Python/Pytorch 】-- 滑动窗口算法

文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面 写这个算法原因是&#xff1a;训练了一个时序网络&#xff0c;该网络模型的时序维度为32&#xff0c;而测试数据的时序维度为90。因此需要采用滑动窗口的方法&#xff0c;生成一系列32…...

Clickhouse集群create drop database可删除集群数据库或只删除本地数据库

集群环境下&#xff0c;在任意一个节点创建数据库&#xff0c;如果加上了ON CLUSTER clustername&#xff0c;则在集群环境的所有节点上都创建了该数据库&#xff0c;并在集群环境的所有节点上都创建了该数据库对应的目录&#xff0c;且数据库的metadata_path对应的目录路径在所…...

【docker】adoptopenjdk/openjdk8-openj9:alpine-slim了解

adoptopenjdk/openjdk8-openj9:alpine-slim 是一个 Docker 镜像的标签&#xff0c;它指的是一个特定的软件包&#xff0c;用于在容器化环境中运行 Java 应用程序。 镜像相关的网站和资源&#xff1a; AdoptOpenJDK 官方网站 - AdoptOpenJDK 这是 AdoptOpenJDK 项目的官方网站&…...

Vscode interaction window

python 代码关联到 jupyter 模式 在代码前添加&#xff1a; # %%print("hellow wolrd!") 参考文档链接&#xff1a; https://code.visualstudio.com/docs/python/jupyter-support-py...

后端数据null前端统一显示成空

handleNullValues方法在封装请求接口返回数据时统一处理 // null 转 function handleNullValues(data) {// 使用递归处理多层嵌套的对象或数组function processItem(item) {if (Array.isArray(item)) {return item.map(processItem);} else if (typeof item object &&…...

【设计模式深度剖析】【9】【行为型】【访问者模式】| 以博物馆的导览员为例加深理解

&#x1f448;️上一篇:备忘录模式 | 下一篇:状态模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 文章目录 访问者模式定义英文原话直译如何理解呢&#xff1f; 访问者模式的角色类图代码示例 访问者模式的应用优点缺点使用场景 示例解析:博物馆的导览员代码示例 访问…...

做公众号app网站app吗/免费建站哪个网站最好

mysql在更新记录时&#xff0c;需要在原来的值上在累加新的值。例如原来有条记录:idcountrya784829a-c0dc-4cb6-88a9-8c376fab83a6USA现在更新更新country字段&#xff1a;在原值的基础上添加“$$UK”&#xff0c;使其变为如下值&#xff1a;idcountrya784829a-c0dc-4cb6-88a9-…...

国外网站 备案吗/seo刷点击软件

这篇随笔将详细讲解Linux磁盘管理机制中的LVM逻辑卷的基本概念以及LVM的工作原理&#xff01;&#xff01;&#xff01; 一、传统的磁盘管理 其实在Linux操作系统中&#xff0c;我们的磁盘管理机制和windows上的差不多&#xff0c;绝大多数都是使用MBR(Master Boot Recorder)都…...

织梦手机网站怎么仿制/代运营套餐价格表

如果要评选当下IT圈最火爆的话题&#xff0c;相信就算生成式AI&#xff08;Artificial Intelligence Generated Content&#xff0c;简称AIGC&#xff09;甘认第二&#xff0c;也没有人敢认第一。于是我们看到&#xff0c;在ChatGPT快速升级迭代的同时&#xff0c;百度、360、商…...

云建站网址/企业seo的措施有哪些

用安乐业系统的请点击下载download/...

门户网站模板免费下载/深圳经济最新新闻

这是我在拓朴上配置的单闭路由&#xff0c;可是老是分配不了IP 地址&#xff0c;请你们帮我看下 这是在交换机上的配置 Switch>en Switch# Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#vlan 2 Switch(config-vlan)#ex Swi…...

固镇网站建设哪家好/如何写推广软文

直接点击跳转到系统设置界面, 设置通知定位等等 在操作之前, 你需要info中设置 URLTypes, 如下图所示 直接通过 root *什么来配置NSArray *dataArray [ {"系统设置":"prefs:rootINTERNET_TETHERING"}, {"WIFI设置":"prefs:rootWIFI&quo…...