一、SODB、RBSP和EBSP的基本概念

SODB:数据比特串,即编码后的最原始的数据;

RBSP:原始字节序列载荷,即在SODB的后面添加了trailing bits,即一个bit 1和若干个bit 0,以便字节对齐;

EBSP:扩展字节序列载荷,即在RBSP的基础上添加了仿校验字节0x03.

二、联系、区别与作用

SODB是编码收的原始数据,经过封装后为RBSP,RBSP是NAL单元的数据部分的封装格式。在NAL内部为了防止与起始码竞争,从而引入填充字节0x03,这样便形成了EBSP。

1、RBSP的形成过程

如果SODB的内容是空的,那么RBSP的内容也是空的;

否则,RBSP的第一个字节取自SODB的第1到第8个比特,RBSP字节内部按照从左到右从高到低的顺序排列。以此类推,RBSP中的每个字节都直接取自SODP的相应比特。RBSP的最后一个字节包含SODB的最后几个比特,以及trailing bits。其中,trailing bits的第一个比特为1,其余的比特为0,保证字节对齐。最后,在结尾添加0x0000,即CABAC ZERO WORD,从而形成RBSP。

2、EBSP的形成过程

NALU数据+起始码就形成了AnnexB格式,起始码包括两种,0x00000001和0x000001。为了不让NALU的主体与起始码之间产生竞争,在对RBSP进行扫描时,如果遇到连续的两个0x00字节,则在该两个字节后面添加一个0x03字节。在解码的时候将该0x03字节去掉,也成为脱壳操作。

通过该种方式形成EBSP,这需要将近两倍的整帧图像码流大小。为了减少存储器需求,在每个macroblock结束后,即检查该macroblock的SODB的起始码竞争问题,并保留SODB的最后两个字节的零字节个数,以便与下一个macroblock的SODB的开始字节形成连续的起始码竞争检测。对一帧图像的最后一个macroblock,先添加结尾停止bit,在检查起始码竞争。

注:起始码包括两种情况,即4字节和3字节。在SPS、PPS和Access Unit的第一个NALU使用4字节起始码,其余情况均使用3字节起始码。

H.264 SODB RBSP EBSP的区别

SODB(String of Data Bits,数据比特串):

最原始,未经过处理的编码数据

RBSP(Raw Byte Sequence Payload,原始字节序列载荷):

在SODB的后面填加了结尾bit(RBSP trailing bits 一个bit ‘1’)若干bit ‘0’,以便字节对齐。

EBSP(Encapsulated Byte Sequence Payload, 扩展字节序列载荷):

NALU的起始码为0x000001或0x00000001(起始码包括两种:3 字节(0x000001) 和 4 字节(0x00000001),在 SPS、PPS 和 Access Unit 的第一个 NALU 使用 4 字节起始码,其余情况均使用 3 字节起始码。)

同时H264规定,当检测到0x000000时,也可以表示当前NALU的结束。那这样就会产生一个问题,就是如果在NALU的内部,出现了0x000001或0x000000时该怎么办?

在RBSP基础上填加了仿校验字节(0x03)它的原因是:在NALU加到Annexb上时,需要填加每组NALU之前的开始码StartCodePrefix,如果该NALU对应的slice为一帧的开始则用4位字节表示,0x00000001,否则用3位字节表示0x000001.为了使NALU主体中不包括与开始码相冲突的,在编码时,每遇到两个字节连续为0,就插入一个字节的0x03。解码时将0x03去掉。也称为脱壳操作。

【点我获取】音视频入门到精通资料
关系图:


Android音视频工程师学习

Android音视频——H.264帧码流(SODB、RBSP、EBSP)浅析相关推荐

  1. Android音视频--H.264视频流解码

    1. 简介 H.264是比较多开发者使用较多的一种数字视频压缩格式,主要用于直播流的传输与视频网站的视频流传输,也有不少开发者开始使用H.265进行视频压缩,性能较H.264提升较大.本篇文章着重介绍 ...

  2. 【音视频数据数据处理 12】【H.264篇】解析H.264原始码流中的I帧 / P帧 / B帧数据(暂未解决,本文先放着,来日更新)

    [音视频数据数据处理 12][H.264篇]解析H.264原始码流中的I帧 / P帧 / B帧数据 一.如何判断是 I帧 / P帧 / B帧 1.1 slice_type 1.2 slice_head ...

  3. H.264/H265码流解析

    H.264/H265码流解析 一.H.264码流解析 一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成 一个原始的 ...

  4. Python解码H.264(二)——将海思处理器编码的H.264裸码流转换为jpg序列

    上一篇我们历尽千辛万苦完成了PyAV的安装,这一篇我们来小试牛刀. 思路:通过PyAV来把海思Hi3516编码处理器编码的h.264裸码流中的每一帧都转换为一张jpeg编码的图片,然后将这些jpg图像 ...

  5. 将h.264裸码流推送到RTMP服务器

    h.264裸码流的格式,参考"H.264-AVC-ISO_IEC_14496-10.pdf, page 211.",这个文档的下载地址:https://github.com/win ...

  6. PX2板实现H.264裸码流的解码

    2019独角兽企业重金招聘Python工程师标准>>> 之前已经有人尝试使用了PX2板实现H.264裸码流的解码,并且给了例程,不过楼主尝试时碰到了一点小问题,现在也是解决了,现在楼 ...

  7. QT5.6 MSVC编译器 实现-海康摄像头,获取H.264裸码流并通过libmp4V2实现MP4写封装生成MP4视频文件

    前言 当前,在国内安防领域,海康摄像头一直是受各个解决方案比较青睐的摄像头选择.本项目主要应用海康摄像头对桥梁道路车辆运行情况进行监控.当桥梁称重系统检测到车辆异常信号后,触发摄像服务程序,采集摄像头 ...

  8. 五. H.264的码流封装格式

    H.264的语法元素进行编码后,生成的输出数据都封装为NAL Unit进行传递,多个NAL Unit的数据组合在一起形成总的输出码流.对于不同的应用场景,NAL规定了一种通用的格式适应不同的传输封装类 ...

  9. 【H.264】码流解析 annexb vs avcc

    H264码流解析及NALU AVCC和ANNEXB 前者是FLV容器.mp4 常用的. 后者 是实时传输使用,所以是TS 一类的标准. VLC显示AVC1就是AVCC AVCC格式 也叫AVC1格式, ...

  10. 音视频开发之旅(58) -H.264 帧内预测

    目录 编码流程和数据格式回顾 4 × 4亮度块的9中预测模式 16 × 16亮度块的4种预测模式 8 × 8 色度块的4种预测模式 JM代码 资料 收获 一.编码流程和数据格式回顾 我们先看下下图来回 ...

最新文章

  1. PCB 3D模型与渲染
  2. C++常见面试题之数据结构和算法
  3. python的100个案例_Python实例100个(基于最新Python3.7版本)
  4. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
  5. java中获取特定时间段_获取某一时间段特定星期几的所有日期(Java实现)
  6. pytorch中数组维度的理解
  7. 2020蓝桥杯省赛---java---A---10( 字串排序)
  8. LeetCode 1293. 网格中的最短路径(DP/BFS)
  9. 信息学奥赛一本通 2055:【例3.5】收费
  10. XP下安装SQL2000企业版
  11. odbc数据源的配置
  12. Zend Framework 开发记录 - 代码片段–jquery–select控件
  13. 部门开始做技术talk
  14. OLAP -- ODS 项目总结 -- BI 中的关键
  15. nginx反向代理nexus3
  16. 格式工厂高清视频转换参数设置
  17. 关于position: sticky的简单用法
  18. js当前日期倒推,向前倒推或往后推算
  19. 滴滴-2019+快手2020(A)-校园招聘算法工程师笔试题
  20. MySQL权限与安全管理之权限表与账户管理

热门文章

  1. DSP程序中 ,如何完成延时且不影响整体程序的工作效率
  2. DSP 程序远程升级 / Bootloader设计指南(四)——Bootloader数据流
  3. JAVA经典面试题附答案(持续更新版)
  4. 系统安装-000 基础二:UEFI+GPT和BIOS+MBR互换(免重装系统,无损数据)
  5. [面经]星环科技大数据后台开发实习面试
  6. 006 与PHP无关的EXCEL分割字符串
  7. 数论 day 2 试题解析
  8. 对象转换成Json字符串是时中文乱码
  9. BIM学习笔记(一)
  10. 自然语言处理与企业对话系统设计