H264重点笔记记录

news2024/12/24 18:24:58

H264格式

目前视频中的H.264流行的NALU包装方式有两种,一种叫做annexB,一种叫做avcC。对于这两种格式,不同的厂商支持程度也不太一样,例如,Android硬解码MediaCodec只接受annexB格式的数据,而Apple的VideoToolBox,只支持avcC的格式。

(1)avcc格式也叫AVC1格式,MPEG-4格式,字节对齐,因此也叫Byte-Stream Format。用于mp4、flv、mkv等封装中。
(2)annexB格式也叫MPEG-2 transport stream format格式(ts格式),ElementaryStream格式。用于ts流中(以及使用ts作为切片的hls格式中即".ts"文件中),也是手机视频m3u8(HLS协议的格式)常用的方式

NALU的作用

NALU的最核心的用处就是起到一个承上启下的作用。我们知道,在通常情况下,H.264 码流只存放了原始的画面信息,而不包含其他信息,所以严格来说,H.264 码流和我们通常意义上的“视频”还是有一定差距的。比如,我们通常说的视频要包含音频,H.264 码流里就没有。除了音频之外,我们还需要存放其他辅助信息,比如视频的播放时长,每一帧的播放时间,帧率,画面是否旋转,等等非常多的信息。所以我们日常使用过程中,往往是把 H.264 码流插入到其他视频容器内,比如 mp4,flv等。而 NALU 的作用,就是很好的把 H.264 码流和上层的封装容器进行有效得分割,使得两者可以相互不干扰,相互独立。

RTP

大多情况下,NALU在网络发送时,会封装成RTP格式,有两种方式:

(1)单包模式:rtp payload仅由一个完整NALU组成,这种情况一般用于H264 NALU大小 小于MTU(Maximum Transmission Unit,最大传输单元)。SPS、PPS采用单包模式发送。

(2)分包模式:当H264 NALU 的长度超过MTU时, 就必须对NALU进行分片封包,也称为 Fragmentation Units。

H264之AnnexB

AnnexB格式也叫做MPEG-2 transport stream format格式(ts格式),用于TS流中,以及使用TS作为切片的HLS格式中

它的原理是通过在NALU前面添加一个叫Start Code(起始码)的东西,起始码的内容为三字节的0 0 1或者4字节的0 0 0 1 (其中起始码在NALU为SPS、PPS或NALU为AU的第一个NALU时使用4字节,其他情况使用3字节)

当我们读取一个 H264码流的时候,一旦遇到起始码,就认为一个新的 NALU 开始了。
在这里插入图片描述
不过在NALU前加入起始码会引入一个新的问题,因为原始码流中是可能出现和起始码一样的数据,这样就会导致错误的NALU分割。为了防止这种情况发生,AnnexB 引入了防竞争字节(Emulation Prevention Bytes)的概念
具体操作为:编码器编完一个NALU后,检查内部是否出现如下左侧的字节序列,如果存在,则在最后一个字节前插入一个新的字节0x03
在这里插入图片描述
解码器在NALU内部检测到防竞争字节后将0x03丢弃来恢复原始数据。

annexB格式下不同帧发送顺序,发送第一个I帧之前,至少要发送一次SPS/PPS。如果码流没有改变,则只发送一次SPS/PPS即可,不用每一个I帧之前都发送SPS/PPS。但是如果码流中间有变,比如分辨率、帧率或者其它编码参数有改变,则要重新发送SPS/PPS。

在这里插入图片描述

H264之AVCC

AVCC格式也叫AVC1格式,MPEG-4格式,常用于mp4/flv等封装中
它的原理是在NALU 前面添加固定字节(可能是1字节、2字节或4字节,其中4字节较常见),这几个字节组成一个整数(大端字节序)表示整个 NALU 的长度,在读取的时候,先把这个整数读出来(例如ffmpeg从extradata获取),拿到这个 NALU 的长度,再按照长度读取整个 NALU

在这里插入图片描述

AVCC header sequence or extradata
在这里插入图片描述
在这里插入图片描述

读取 NALULengthSizeMinusOne的值然后加 1 ,我们就得出了后续每个 NALU 前面表示NAL size(也就是上图紫色块length)的字节数,一般NALULengthSizeMinusOne 是 3,那么每个 NALU length就是 4 个字节,然后把这四个字节转成整数,就是这个 NALU 的长度。

学习文档:

【H264/AVC 句法和语义详解】(三):NALU详解二(EBSP、RBSP与SODB)

H264编码基本原理(一)

AnnexB和AVCC的区别

1、NALU的分割方式不同

annexB格式使用start code进行分割,start code为0x000001或0x00000001。
avcC格式使用NALU长度(固定字节,字节数由extradata中的信息给定)进行分割。

2、SPS/PPS的数据结构不同

annexB格式中,SPS/PPS存放在NALU中,以start code作为分隔符。这种格式下SPS/PPS通常放在关键帧之前。
avcC格式中,SPS/PPS存放在extradata中,不是放在NALU中。这种格式下SPS/PPS的存放位置和帧数据无关。例如普通模式下的mp4,SPS/PPS放在MOOV中,在帧数据后面。

3、适用场景不同

annexB格式通常用于实时的流格式,比如说传输流,通过无线传输的广播、DVD等。在这些格式中通常会周期性的重复SPS和PPS包,经常是在每一个关键帧之前。
avcC格式的一个优点是在开始配置解码器的时候可以跳到流的中间播放,这种格式通常用于可以被随机访问的多媒体数据,如存储在硬盘的文件。也因为这个特性,MP4、FLV、MKV通常用avcC格式来存储。(H.264流媒体协议格式中的Annex B格式和AVCC格式深度解析-CSDN博客)

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

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

相关文章

AI绘画,AI生成图片

分享一个可以免费使用的AI生成图片的网站: https://openart.aihttps://openart.ai/create 1、登陆后点击右上角create 2、在创建页面左侧输入描述文案,下面调整生成图片张数,点击create,右边即可生成 我这里输入了在吃麦当劳的超…

【bug】paddleocr draw_ocr_box_txt ValueError: incorrect coordinate type

【bug】paddleocr draw_ocr_box_txt ValueError: incorrect coordinate type 环境 python 3.10.15pillow 10.4.0 paddleocr 2.8.1错误详情 错误文本 Traceback (most recent call last):....draw_left.polygon(box, fillcolor)ValueError: inco…

社交媒体对人际关系的影响:Facebook的案例分析

随着社交媒体的快速发展,人们的沟通方式和人际关系发生了深刻变化。作为全球最大的社交网络之一,Facebook在这一进程中扮演了重要角色。本文将分析Facebook如何影响人际关系,包括沟通方式的转变、情感连接的变化以及社交互动的质量。 1. 沟通…

echarts的option,设置折线图鼠标悬浮显示数据

在series平级位置加代码 效果看起来还不错

深度学习:词嵌入embedding和Word2Vec模型

目录 前言 一、词嵌入(Embedding) 1.传统自然语言处理问题 2.什么是词嵌入 3.主要特点 二、Word2vec模型 1.连续词袋模型(CBOW) 2.跳字模型(Skip-gram) 三、CBOW模型训练过程 前言 在机器学习里的…

包材推荐中的算法应用|得物技术

目录 一、业务背景 二、算法架构 规则算法 三、算法原理 装箱装袋 四、衍生应用 切箱合包箱型设计包装方案推荐 五、作者结语 一、业务背景 任何一家电商的商品出库场景中,都涉及到打包——即把订单中的商品用包材进行包裹,常见的打包方式有装袋和装箱。…

Lazada该怎么直播?开播需要有哪些条件?

随着电商平台的快速发展,直播电商已成为一种重要的销售和营销手段。作为东南亚领先的电商平台之一,Lazada也提供了直播功能——LazLive,使商家和品牌能够通过直播与消费者进行实时互动,推广产品并提升销量。要在Lazada上顺利进行直…

bmp格式如何转换成jpg?5个软件帮助你快速转换文件格式

bmp格式如何转换成jpg?5个软件帮助你快速转换文件格式 将BMP格式转换为JPG格式是许多人在处理图片文件时常遇到的需求。BMP是一种无压缩的图像格式,占用空间较大,而JPG是一种有压缩的图片格式,能大幅减少文件大小,更适…

链表的回顾与总结(一)正序、逆序、有序、插入、修改、删除

逆序链表 #include<iostream> using namespace std; struct node {int data;node* next; };//最好不要全局定义指针&#xff0c;很麻烦 void show(node* head) {while (head){cout << head->data << ;head head->next;} } int main() {int i, j, k…

链表的回顾与总结(二)有序链表合并、约瑟夫问题

两个有序链表的合并 #include<iostream> using namespace std; struct node {int num;node* next; }; void show(node* head) {while (head){cout << head->num << ;head head->next;} } void add(node* head1, node* head2,node*&head3) {hea…

东营市自闭症寄宿学校,专注提供个性化教育

自闭症&#xff0c;这个听起来遥远而陌生的词汇&#xff0c;实际上正在影响着越来越多的家庭。自闭症儿童&#xff0c;被亲切地称为“星星的孩子”&#xff0c;他们活在自己的世界里&#xff0c;对周围的一切往往视而不见、听而不闻。然而&#xff0c;在广州的星贝育园自闭症儿…

万恶之源:端口不通

解决方案 本地端口开放&#xff0c;第三方使用者无法访问&#xff0c;原因无非有三&#xff1a; 1、基础网络不通 网不通&#xff0c;别说端口了&#xff0c;连ping都没办法&#xff1a;因此&#xff0c;请首先检查双方网络基础环境是否互通 2、防火墙拦截 新开的服务器&#x…

P4可编程技术详解:从理论到硬件实现

P4的诞生 为打破传统的固定封装模式&#xff0c;充分解放数据平面的编程能力&#xff0c;Nick McKeown领导的斯坦福大学研究团队于2014年提出可编程处理语言P4。借助P4的数据平面编程能力&#xff0c;用户可在网卡、交换机、路由器等网络设备上实现包括VXLAN、MPLS等在内的各种…

Docker容器不断重启问题

1. compose配置文件 docker-compose.yml services:node_app:image: dockerproxy.cn/node:lts-bullseye-slimcontainer_name: node_appnetworks:macvlan_net:ipv4_address: 192.168.2.3# 挂载的卷标volumes:- app:/app# 工作目录working_dir: /app# 自动重启restart: always# …

系统移植三

一、设备树 设备树&#xff08;Device Tree&#xff09;是 Linux 系统中用于描述硬件信息的一种机制&#xff0c;尤其在 ARM 平台上广泛使用。在早期版本的 Linux&#xff08;如 2.6 及之前&#xff09;&#xff0c;设备的硬件信息通常是通过硬编码方式写在平台相关的文件中。…

python爬虫--tx动漫完整信息抓取

python爬虫--tx动漫完整信息抓取 一、采集主页信息二、采集详情页信息三、完整代码一、采集主页信息 先看一下采集到的信息,结果保存为csv文件: 打开开发者工具,找到数据接口。 使用xpath提取详情页url。 二、采集详情页信息 如上图所示,使用xpath提取详情页的标题、作…

CPU超线程技术是什么,怎么启用超线程技术

超线程技术是一种允许单个物理CPU核心模拟成两个逻辑核心的技术&#xff0c;从而提升处理器的并行性能和效率。以下是对超线程技术的详细介绍&#xff1a; 基本概念&#xff1a;超线程&#xff08;Hyper-Threading&#xff0c;HT&#xff09;是Intel公司研发的一种技术&#x…

mbist之sharebus知识小结

本文摘录至微信公众号 搞搞芯意思 为何用sharebus? CPU/NPU/GPU等关键模块对性能要求很高,对功耗、时序、面积敏感,是整个芯片设计瓶颈。常规mbist设计插入的额外电路会对function时序收敛带来负面影响,而且会造成布线拥堵,给芯片性能和pd设计带来挑战。sharebus方…

【环境搭建】远程服务器搭建ElasticSearch

参考&#xff1a; 非常详细的阿里云服务器安装ElasticSearch过程..._阿里云服务器使用elasticsearch-CSDN博客 服务器平台&#xff1a;AutoDL 注意&#xff1a; 1、切换为非root用户&#xff0c;su 新用户名&#xff0c;否则ES无法启动 2、安装过程中没有出现设置账号密码…

python发送邮件带附件:配置全指南与步骤?

python发送邮件带附件教程&#xff1f;python如何发邮件带附件&#xff1f; 无论是工作报告、项目文档还是个人通知&#xff0c;邮件都能快速传递信息。而当这些信息需要附带文件时&#xff0c;Python发送邮件带附件的功能就显得尤为重要。AokSend将详细介绍如何使用Python发送…