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

news2024/11/24 7:05:37

目录

  • 前言
  • 1 环境准备
  • 2 H.264编码原理和基本概念
    • 2.1 图像冗余信息
    • 2.2 h.264编码相关的一些概念
    • 2.3 h264视频流总体分析
    • 2.4 H264的NAL单元详解2
      • 2.4.1 相关概念
    • 2.5 NALU详解
    • 2.6 sps和pps详解
    • 2.7 H264的profile和level
    • 2.8 序列sequence

前言

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

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详解

参考阅读:
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平台得到的,对于其他平台并不一定适用!

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

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

相关文章

【YUNBEE云贝-进阶课】MySQL8.0性能优化实战培训

众多已经学习过MySQL 8.0 OCP认证专家的课程的同学们对 MySQL 8.0 的安装部署、体系结构、配置监控、用户管理、主从复制、系统运维、MGR等基础操作和动手实验有了一定的学习基础.很多学员反馈希望更进一步提升技术能力、解决工作中碰到的性能问题。 针对MySQL8.0的数据库性能优…

设计模式代码实战-建造者模式

1、问题描述 小明家新开了一家自行车工厂,用于使用自行车配件(车架 frame 和车轮 tires )进行组装定制不同的自行车,包括山地车和公路车。 山地车使用的是Aluminum Frame(铝制车架)和 Knobby Tires&#x…

softmax回归:多分类问题的解码器

随着人工智能技术的不断发展,分类问题在机器学习领域中的地位日益凸显。在众多分类算法中,softmax回归以其独特的优势和广泛的应用场景,成为了处理多分类问题的有力工具。本文将深入探讨softmax回归的原理、应用及其优缺点,以期为…

实现智能水控 | 基于ACM32 MCU的分体式水控方案

分体式水控概述 分体式水控是一种常见的水控系统,它的工作原理是通过水的流动来控制水的供应和排放,该系统一般由两部分组成:控制器和水阀。控制器负责监测水的流量和压力,根据设定的参数来控制水阀的开和关,从而实现水…

上位机图像处理和嵌入式模块部署(qmacvisual缺失的光源控制)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 有些场景下面,是不需要光源和光源控制的,比如说利用摄像头识别对应区域的库位,这部分直接利用红外光采集对应的…

找出mongodb的jumbo块并进行分裂

https://www.cnblogs.com/abclife/p/15968628.html 根据这篇文档中的脚本,在我们自己的环境中跑了下,第一次跑的结果如下: 运行完上面跑出的split脚本后,还是存在jumbo块,第二次跑出的结果: 从上面结果可以…

3、JVM对象的创建于内存分配原理

对象的创建 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加…

【hive】远程remote debug hive的方法,用于hive监听器/钩子编写

背景 写hive监听器时候需要拿到hive对象但hive是在集群linux主机上运行的。通过jdbc提交的sql具体执行过程不会再idea中运行。所以如果需要拿到hive对象有可能存在两个思路: (1)想办法写个钩子或者监听器,将需要的内容写成json字…

【微信小程序】canvas开发笔记

【微信小程序】canvasToTempFilePath:fail fail canvas is empty 看说明书 最好是先看一下官方文档点此前往 如果是canvas 2d 写canvas: this.canvas,,如果是旧版写canvasId: ***, 解决问题 修改对应的代码,如下所示,然后再试试运行&#x…

请求分发场景下的鉴权问题

说明:记录一次对请求分发,无法登录系统的问题。 场景 如下,在此结构下,如何判断该用户是已登录的用户; 常规操作,用户登录后给用户发Token,同时将发放的Token存入到Redis中。要求用户后续请求…

鸿蒙OS开发实例:【Native C++】

介绍 本篇Codelab主要介绍如何使用DevEco Studio创建一个Native C应用。应用采用Native C模板,实现使用NAPI调用C标准库的功能。使用C标准库hypot接口计算两个给定数平方和的平方根。在输入框中输入两个数字,点击计算结果按钮显示计算后的数值。 相关概…

【论文研读】Geometric Deep Learning on Molecular Representations

Geometric Deep Learning on Molecular Representationshttps://arxiv.org/pdf/2107.12375.pdf 一、Background 随着网络时代的发展,生活中产生的数据量越来越多,但数据大体分为两类:欧氏数据、非欧氏数据。如图为两类常见的数据&#xff0c…

物联网全栈智能应用实训系统

物联网全栈智能应用实训系统是一款集硬件、软件、网络、数据分析与应用开发于一体的综合性实训平台。它旨在帮助学习者全面掌握物联网技术的各个环节,从硬件设备选型、通信协议理解、软件开发、数据分析到应用部署,都能得到充分的实践锻炼。 一、产品构…

Harmony鸿蒙南向驱动开发-SDIO接口使用

功能简介 SDIO是安全数字输入输出接口(Secure Digital Input and Output)的缩写,是从SD内存卡接口的基础上演化出来的一种外设接口。SDIO接口兼容以前的SD卡,并且可以连接支持SDIO接口的其他设备。 SDIO接口定义了操作SDIO的通用…

【InternLM 实战营第二期-笔记1】书生浦语大模型开源体系详细介绍InternLM2技术报告解读(附相关论文)

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营,我也将会通过笔记博客的方式记录学习的过程与遇到的问题,并为代码添加注释,希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) 书生浦语大模型开源体系…

Linux 删除文件或文件夹命令(新手)

一、删除文件夹 rm -rf 路径/目录名 1 强制删除文件夹及其子文件。 二、删除文件/文件夹:rm 命令 rm 删除命令,它可以永久删除文件系统中指定的文件或目录。 rm [选项] 文件或目录 选项: -f:强制删除(force&am…

QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid

文章目录 场景描述问题排查根据提示查看原因查看封装的 message 个人简介 场景描述 QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid: 失败原因:(550, bThe "From" header is missing or invalid. Ple…

【Kafka】Zookeeper集群 + Kafka集群

Zookeeper 概述 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制★★★ Zookeeper从设计模式角度来理解: 1)是一个基于观察者模式设计的分布式服务管理框架; 它负责存储和管理大家都关…

【LeetCode】二叉树类题目详解

二叉树 二叉树的理论基础 二叉树是结点的度数之和不超过2的树,二叉树总共有五种基本形态 二叉树的种类主要有: 满二叉树完全二叉树 二叉树的存储方式 顺序存储链式存储 二叉树的遍历方式 先序遍历(深度优先搜索)中序遍历&…

什么是RMVB视频?如何把视频转成RMVB格式?视频格式转换的方法

一,什么是RMVB视频格式 RMVB是一种视频文件格式,它基于RealNetworks公司开发的RealMedia编解码器,被广泛应用于互联网上的视频流媒体传输和下载。RMVB文件通常具有较小的文件大小,同时保持较高的视频质量,因此在网络传…