第六季:RTSP协议详解与实时流视频预览

前言

本篇文章用于记录实验过程

1 环境准备

资料:

链接:https://pan.baidu.com/s/18J8JjYrWGIQMgYxwacIYjg?pwd=wgg9 
提取码:wgg9 
--来自百度网盘超级会员V4的分享

下载的sample_rtsp.rar加压到mpp目录下,并改名

unrar x sample_rtsp.rar
mv sample_bak/ sample_rtsp
ls

在这里插入图片描述

cd sample_rtsp/venc
make clean
make -j6
ls

在这里插入图片描述

cp sample_venc /mnt/hisilion_nfs/ -rf

在开发板中运行程序。

打开VLC播放器,使用网络串流连接开发板,URL改成你的开发板IP地址
在这里插入图片描述

2 H.264编码原理和基本概念

2.1 图像冗余信息

(1)空间冗余:一张图片中,颜色完全相同的一大片区域,可以用一个点表示颜色,另外需要记录着个区域的范围,这样可以节省很多内存空间。
(2)时间冗余:一个视频中,有些时间段,一直是一幅图片保持不变,这种情况可以只保留一张图片。

2.2 h.264编码相关的一些概念

(1)宏块 MB macroblock:多个像素点组成的一个区域,这些像素点的颜色应保持相似或相同,压缩算法以宏块为单位进行压缩。
(2)片 slice:一个帧可以由一个片或者多个片构成,片内包含一个或多个宏块。
(3)帧 frame:一帧就是一幅图片。
(4)I帧、B帧、P帧:
I帧(这一帧和前后帧不相关,例如:不需要考虑时间冗余,起始帧就是I帧,只能去除空间冗余)。
B帧(参考前一帧也参考后一帧,B帧很少见到)。
P帧(只参考前一帧,进行空间冗余和时间冗余的计算)。
(5)帧率 fps:每秒钟,显示多少张图片。
(6)像素->宏块->片->帧->序列->码流

2.3 h264视频流总体分析

(1)h264标准有多个版本,可能会有差异,具体差异不详
(2)网上看的资料有时讲法会有冲突,或者无法验证的差异
(3)以海思平台为主、为准、为案例,不能保证其他平台也完全一样
(4)海思平台编码出来的H.264码流都是一个序列包含:1sps+1pps+1sei+1I帧+若干p帧

2.4 H264的NAL单元详解2

NAL全称Network Abstract Layer, 即网络抽象层。
在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPS、PPS、SEI除外)。在实际的H264数据帧中,往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,有的标准中也包含SEI,接着为I帧……

NAL单元 = I帧 + P帧

2.4.1 相关概念

(1)序列 sequence
一个序列包含:1sps+1pps+1sei+1I帧+若干p帧
使用百度网盘内附带的软件打开 ar0130.h264 这个文件
在这里插入图片描述
如上图所示,图中只展示了有效数据,没有展示分隔符,序列号3 是I帧,4是P帧。0 1 2 在后面会进行详细介绍。

(2)分隔符
使用winhex打开 ar0130.h264 这个文件,这个文件在本文开头的百度网盘内
在这里插入图片描述
上面的00 00 00 01就是一个分隔符,这是h.264编码协议规定的,如果有效数据中包含了连续的三个00,则在第二个和第三个之间添加03,即00 00 03 00 01。
分隔符后面的第一个字节决定了这段内容属于什么帧,详细内容:

https://blog.csdn.net/jefry_xdz/article/details/8461343

在这里插入图片描述
对引用的博客进行说明补充,上面图片中的(2)部分,表示数据传输时的优先级,数字越大优先级越高。
在这里插入图片描述

由图可知,P帧的优先级为3,首位为0,帧类型为P帧。如果出现网速慢,而且需要保持网络视频的实时性,通信协议会丢弃优先级较低的内容。

(3)sps (sequence paramater set)
sps和pps详解:

https://www.cnblogs.com/wainiwann/p/7477794.html

先介绍SPS。

在这里插入图片描述
上图,NAL_Size表示字节,图中的SPS占14个字节。
在这里插入图片描述
如上图所示,结合SPS占14个字节,67 42 … 80 81,这段内容就是SPS。

(4)pps
pps对应的内容68 CE 3C 80,共占4个字节。
在这里插入图片描述

(5)sei
sei对应的内容06 E5 01 34 80,共占5个字节。
在这里插入图片描述

(6)NALU

2.5 NALU详解

H.264由一个一个的NALU组成,每个NALU之间使用00 00 00 01或00 00 01分隔开

参考阅读:
https://blog.csdn.net/jefry_xdz/article/details/8461343
https://blog.csdn.net/special00/article/details/82533768

2.6 sps和pps详解

 https://www.cnblogs.com/wainiwann/p/7477794.html

2.7 H264的profile和level

https://blog.csdn.net/xiaojun111111/article/details/52090185

2.8 序列sequence

(1)一段h.264的码流其实就是多个sequence组成的

(2)每个sequence均有固定结构:1sps+1pps+1sei+1I帧+若干p帧

(3)sps和pps和sei描述该sequence的图像信息,这些信息有利于网络传输或解码

(4)I帧是关键,丢了I帧整个sequence就废了,因为P帧参考I帧,I帧是起始帧,每个sequence有且只有1个I帧

(5)p帧的个数等于fps-1

(6)I帧越大则P帧可以越小,反之I帧越小则P帧会越大

(7)I帧的大小取决于图像本身内容,和压缩算法的空间压缩部分

(8)P帧的大小取决于图像变化的剧烈程度

(9)CBR(固定码率)和VBR(可变码率)下P帧的大小策略会不同,CBR时P帧大小基本恒定,VBR时变化会比较剧烈。码率就是P帧的大小,P帧大小固定时,如果当前帧相比于前一帧的变化不大,清晰度保持不变,如果变化大,而且变化的字节数超过了固定的码率,清晰度会下降;可变码率的清晰度一直不变,但当图像变化大时,字节数会增加,导致网络传输的字节数变大,如果网速慢,视频会出现卡顿的情况。

(10)如果当前帧和前一帧相比,变化非常小,则P帧所占的字节数就很小。

本文许多结论是基于我们的海思HI3518E平台得到的,对于其他平台并不一定适用!

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值