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

目录

  • 前言
  • 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平台得到的,对于其他平台并不一定适用!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django中间件路由映射自动加/斜杠问题原因及分析

输入 http://127.0.0.1:8000/main/index/ 输入 http://127.0.0.1:8000/main/index 路由定义情况 urlpatterns [path("index/", views.index) ]可以发现我在输入URL的index路由时,如果没有和Django定义的路由匹配规则一样的话,浏览器自…

深度学习在三维点云处理与三维重建中的应用探索

目录 点云数据处理 数据清洗 数据降噪和简化 数据配准 特征提取 数据增强 数据组织 性能考量 PointNet PointNet 算法问题 改进方法 三维重建 重建算法 架构模块 流程步骤 标记说明 优点和挑战 点云数据处理 数据清洗 去噪:点云数据通常包含噪声…

云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow

目录 一、实验 1.环境 2.Linux 部署 OVS 集群(控制端) 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…

银行司库系统应用架构介绍

继国务院国资委印发了《关于推动中央企业加快司库体系建设进一步加强资金管理的意见》以及《关于中央企业加快建设世界一流财务管理体系的指导意见》,司库体系建设开始得到了更多重视。其中,作为改革风向标,央企数字化转型及司库建设对整个行…

Node.js从基础到高级运用】二十三、Node.js中自动重启服务器

引言 在Node.js开发过程中,我们经常需要修改代码后重启服务器来应用这些更改。手动重启不仅效率低下,而且会打断开发流程。幸运的是,有一些工具可以帮助我们自动化这个过程。本文将介绍如何使用nodemon来实现Node.js服务器的自动重启。 什么是…

OR36 链表的回文结构

描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->…

Unity面经(自整)——移动开发与Shader

Unity与Android混合开发 为什么使用Flutter构建 Flutter 是 Google 的开源工具包,用于从单个代码库为移动、Web、桌面和嵌入式设备构建应用程序(一套代码跨平台构建app是它最大的优点),并且可以构建高性能、稳定和丰富UI的应用程…

Django Rest Framework的序列化和反序列化

DRF的序列化和反序列化 目录 DRF的序列化和反序列化Django传统序列化Django传统反序列化安装DRF序列化器serializers序列化反序列化反序列化保存instance和data CBV和APIView执行流程源码解析CBV源码分析APIView源码分析 DRF的Request解析魔法方法__getattr__ 什么是序列化&…

第十二届蓝桥杯大赛软件赛省赛Java 大学 B 组题解

1、ASC public class Main {public static void main(String[] args) {System.out.println(

dns服务的正反向解析

目的:完成DNS正反向解析,将步骤及测试同时提交 一、正向解析 1、准备工作 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld 2、服务端、客户端均安装软件 [rootserver ~]# yum install bind -y [rootnode1 ~]# yum install b…

扭蛋机小程序:线上扭蛋机模式发展空间有多大?

潮玩行业近几年的发展非常快,推动了扭蛋机市场的发展,越来越多的人加入到了扭蛋机赛道中,市场迎来了新的发展期。如今,我国的二次元文化的发展不断成熟,扭蛋机主打的二次元商品迎来了更多的商业机会。 一、互联网扭蛋机…

使用shell管理和配置网络服务_1

1、请使用nmcli命令配置仅主机模式网络环境,要求如下: 1) 创建一个新的网卡连接eth1,该连接映射到ens32网卡上; 首先,确保 ens32 网卡没有被其他网络配置文件使用。然后,使用 nmcli 创建一个新的连接,并将其绑定到 e…

在Spring Boot中使用POI完成一个excel报表导入数据到MySQL的功能

最近看了自己玩过的很多项目,忽然发现有一个在实际开发中我们经常用到的功能,但是我没有正儿八经的玩过这个功能,那就是在Spring Boot中实现一个excel报表的导入导出功能,这篇博客,主要是围绕excel报表数据导入进行&am…

分享一下项目中遇到的排序失效问题

今天把原来的一个查询接口的业务代码进行了优化&#xff0c;减少了十几行冗余的代码。 原来的代码 ChongwuServiceImpl.java /*** author heyunlin* version 1.0*/ Slf4j Service public class ChongwuServiceImpl implements ChongwuService {Overridepublic JsonResult<…

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

本期深入解析云原生数据库海山PostgreSQL版&#xff08;以下简称“He3DB”&#xff09;的设计理念&#xff0c;探讨在设计云原生数据库过程中遇到的工程挑战&#xff0c;并展示He3DB如何有效地解决这些问题。 He3DB是移动云受到 Amazon Aurora 论文启发而独立自主设计的云原生数…

html+javascript,用date完成,距离某一天还有多少天

图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…

Day98:云上攻防-云原生篇K8s安全Config泄漏Etcd存储Dashboard鉴权Proxy暴露

目录 云原生-K8s安全-etcd(Master-数据库)未授权访问 etcdV2版本利用 etcdV3版本利用 云原生-K8s安全-Dashboard(Master-web面板)未授权访问 云原生-K8s安全-Configfile鉴权文件泄漏 云原生-K8s安全-Kubectl Proxy不安全配置 知识点&#xff1a; 1、云原生-K8s安全-etcd未…

性能优化-02

uptime 依次显示当前时间、系统运行时间以及正在登录用户数&#xff0c;最后三个数字依次则是过去1分钟、5 分钟、15 分钟的平均负载(Load Average) 平均负载是指单位时间内&#xff0c;系统处于可运行状态和不可中断状态的平均进程数&#xff0c;也就是平均活跃进程数&#xf…

执行npm命令一直出现sill idealTree buildDeps怎么办?

一、问题 今天在运行npm时候一直出项sill idealTree buildDeps问题 二、 解决 1、网上查了一下&#xff0c;有网友说先删除用户界面下的npmrc文件&#xff08;注意一定是用户C:\Users\{账户}\下的.npmrc文件下不是nodejs里面&#xff09;&#xff0c;进入到对应目录下&#x…

golang实现定时监控 CLOSE_WAIT 连接的数量

文章目录 go实现定时检查大量的 CLOSE_WAIT 连接背景&#xff1a;为什么监控指定端口上的 CLOSE_WAIT 连接数量原因&#xff1a;什么是CLOSE_WAITgo实现定时检查大量的 CLOSE_WAIT 连接参考 go实现定时检查大量的 CLOSE_WAIT 连接 监控指定端口的连接状态&#xff0c;特别是关…