要对RTSP有清晰的认识和理解就需要知道推流的是什么数据,RTSP 只是视频传输的一个统称,实际分为RTP RTCP RTSP等不同部分,需要先对其传输流即H264结构有一个完整的分析。
一、H264 NAL结构简介
- 首先是用到的软件
H264文件分析软件:
国内有雷神的:SpecialVH264
国外有:Elecard StreamEye Tools
二进制文件:WinHex18 - H264 NAL结构
用SpecialVH264软件分析可以看到有多个slice(片),这就涉及到H264的组成了,下面就讲解相关的几个重点概念; - NALU和H264的相关概念
H.264的2大组成部分:VCL和NAL
视频流组成:
像素->宏块->片->帧->序列->码流
NAL:VCL只关心编码部分,重点在于编码算法以及在特定硬件平台的实现,VCL输出的是编码后的纯视频流信息,没有任何冗余头信息
VCL:NAL关心的是VCL的输出纯视频流如何被表达和封包以利于网络传输
SODB:String Of Data Bits
RBSP:Raw Byte Sequence Payload
NALU:Network Abstraction Layer Units
关系:
SODB + RBSP trailing bits = RBSP
NAL header(1 byte) + RBSP = NALU - H264结构
H264数据包含一个个NALU
NALU单元结构:
一个NALU包含 START CODE、NALU HEADER、RBSP
START CODE :00 00 00 01 代表一个NALU的开始
NALU HEADER:紧跟在start code后面的一个字节 ,八个位最高位开始做为第一个bit1
(1)bit1禁止位,值为1表示语法出错,所以要数据准确该值应该为0;
(2)第2~3位为参考级别,可以理解为该slice的重要性,值越小越重要;
(3)第4~8为是nal单元类型,表示slice的类型,例如
0x67的二进制码为:0110 0111
4-8为00111,转为十进制7,参考第二幅图:7对应序列参数集SPS
0x68的二进制码为:0110 1000
4-8为01000,转为十进制8,参考第二幅图:8对应图像参数集PPS
0x65的二进制码为:0110 0101
4-8为00101,转为十进制5,参考第二幅图:5对应IDR图像中的片(I帧)
先对H264结构做一个基本分析,做为海思RTSP推流第一篇——H264结构分析。
参考:
https://blog.csdn.net/jefry_xdz/article/details/8461343
https://blog.csdn.net/m0_73443478/article/details/135843054?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172249528216800226517114%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=172249528216800226517114&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-135843054-null-null.142v100pc_search_result_base8&utm_term=h264%E6%95%B0%E6%8D%AE&spm=1018.2226.3001.4187