NVR对接三方相机预览黑屏问题案例

一、 问题现象
【问题现象】NVR接入三方相机,通道状态显示在线,但本地、web预览显示黑屏。更换H.264,H.265均预览黑屏,且NVR侧的萤石云手机APP预览报错260025。
【现场拓扑】现场拓扑如下
(1) IPC使用onvif协议添加至NVR,NVR通过光猫跨公网注册至萤石云。
(2) IPC也通过光猫跨公网注册至萤石云。
(3) IPC及NVR在同一局域网下
在这里插入图片描述
图1.1:网络拓扑
二、 问题排查过程
此问题可以归类与三方相机对接问题,onvif的本质就是HTTP协商+RTSP取流,所以可以使用VLC同时取相机流测试。
1、NVR异常时使用VLC取流测试
使用VLC取预览流测试结果如下
(1)时间进度条正常走动,但VLC不显示画面。
上述的测试证明相机发流存在问题,但仍需进一步定位问题原因。
2、简化网络环境
(1)因相机侧单独添加到萤石云上,同时又被添加至NVR,问题本质是NVR无法预览相机。
(2)所以可先删除萤石云上单独添加的相机,只保留NVR这一路取流,排除其他可能的影响条件,进一步排查问题。
(3)当萤石云APP上删除ipc后,此时发现,NVR本地、web预览正常
3、抓包分析
所以目前需要找出IPC单独添加到萤石云APP后NVR预览IPC画面显示黑屏的原因。
(1)异常期间抓包分析。
在这里插入图片描述

图2.1:异常期间抓包分析
从图2.1可看出,异常期间相机是与录像机之间是正常协商且正常推流的,而且并无丢包现象,此时排除了相机取流路数上限以及网络环境问题。但是实际上录像机预览依然黑屏。
(2)异常情况下与正常情况下抓包追踪流对比。
在这里插入图片描述
图2.2:异常期间流追踪
在这里插入图片描述
图2.3:正常期间流追踪
由图2.2及图2.3可看出,设备侧正常及异常情况下 RTSP协商的码流类型均为H.264。
由上两图可看出,设备侧在RTSP报文协商阶段并无问题。
(3)异常情况下与正常情况下相机推流对比。
在这里插入图片描述
图2.4:异常推流报文
在这里插入图片描述
图2.5:正常推流报文
通过Payload字段分析
(1) 异常期间设备侧收到的码流实际为H.265,但是由图2.2可得出RTSP协商时码流协商类型为H.264。
(2) 正常期间设备收到的码流类型为H.264,从图2.3也可得知RTSP协商时码流协商类型为H.264。
三、 问题原因
萤石相机单独添加萤石云后,主机RTSP取流协商推流为H.264实际推流为H.265,导致NVR解码失败,预览黑屏。
PS:
(1)H.264格式Payload字段前两位一般为 67/68
(2)H.265格式Payload字段前两位一般为 40/42/44
四、 附录
1.H.265的码流格式
1、H.265一个图像序列的组成:VPS+SPS+PPS+SEI+一个I帧+若干个P帧。VPS、SPS、PPS、SEI、一个I帧、一个P帧都可以称 为一个NALU。
2、H.265的NALU结构:开始码+NALU头+NALU数据
(1)开始码大小为四个字节,是一个固定值00 00 00 01(十六进制),标识一个NALU的开始。
(2)NALU头大小为两个字节,共16位,第1位值为0,第2-7位为NALU的type位(共6位),标识当前NALU的类型 ,第8-15位值为0,第16位值为1。
(3)NALU数据为编码器编出来的图像信息或图像数据。
3、六种类型的NALU
(1)VPS(视频参数集):NALU头值为0x40 01(十六进制),NALU头type位值为32(十进制)。
(2)SPS(序列参数集):NALU头值为0x42 01(十六进制),NALU头type位值为33(十进制)。
(3)PPS(图像参数集):NALU头值为0x44 01(十六进制),NALU头type位值为34(十进制)。
(4)SEI(补充增强信息):NALU头值为0x4e 01(十六进制),NALU头type位值为39(十进制)。
(5)I帧:NALU头值为0x26 01(十六进制),NALU头type位值为19(十进制)。
(6)P帧:NALU头值为0x02 01(十六进制),NALU头type位值为1(十进制)。
H.265 UDP码流payload字段分析例:
Payload:40:01:0c:01:ff:ff:21:60:00:00:03:00:00:03:00:00:03:00:00:03:00:96:ac:09
40:01—(二进制)---- 0100 0000 0000 0001
第一位:0
NalType:100 000 》32 =》VPS
LayerID:0 0000 0
》0
TID:001 ==》1

4、H.265的NALU打包成RTP包的模式(下面是用到的两种模式)
(1)一个NALU打包成一个RTP包,只需要在一个12字节的RTP包头后添加去掉开始码的NALU即可 (此问题中设备使用的方式)
(这种模式在一个NALU的大小小于MTU时使用)。
(2)一个NALU打包成几个RTP包(FUs模式),在12个字节的RTP头后面有两个字节的PayloadHdr和一个字节的FUheader。PayloadHdr的值等于NALU头的type位改为49(十进制)后的值,FUheader第1位标记RTP包是否为NALU的第一片,第2位标记RTP包是否为NALU的最后一片。后6位是NALU头的type位。
SDP参考:
h.265的VPS/SPS/PPS
(1)与分辨率有关
(2)与帧率无关(与帧率是否有关主要看sps中某个字段的值,
(3)与N/P制无关
1、4M
Payload: 40010c01ffff016000000300b00000030000030099aa0240
Payload: 420101016000000300b00000030000030099a001402005a1636aa4932f90
Payload: 4401c0f2f03c90
2、4M_4x3
Payload: 40010c01ffff016000000300b00000030000030099aa0240
Payload: 420101016000000300b00000030000030099a001202006c1636aa4932f90
Payload: 4401c0f2f03c90
3、3M
Payload: 40010c01ffff016000000300b00000030000030099aa0240
Payload: 420101016000000300b00000030000030099a00100200601636aa4932f90
Payload: 4401c0f2f03c90
4、1080P
Payload: 40010c01ffff016000000300b0000003000003007baa0240
Payload: 420101016000000300b0000003000003007ba003c08010e58daa924cbe40
Payload: 4401c0f2f03c90
5、960P
Payload: 40010c01ffff016000000300b0000003000003007baa0240
Payload: 420101016000000300b0000003000003007ba00280803c1636aa4932f9
Payload: 4401c0f2f03c90
6、720P
Payload: 40010c01ffff016000000300b0000003000003005daa0240
Payload: 420101016000000300b0000003000003005da00280802d1636aa4932f9
Payload: 4401c0f2f03c90
7、D1
Payload: 40010c01ffff016000000300b0000003000003005aaa0240
Payload: 420101016000000300b0000003000003005aa00582009058daa924cbe4
Payload: 4401c0f2f03c90
8、CIF
Payload: 40010c01ffff016000000300b0000003000003003caa0240
Payload: 420101016000000300b0000003000003003ca00b0804858daa924cbe40
Payload: 4401c0f2f03c90
2.H.264的码流类型判断
(1)NAL的封装方式:
    NAL是将每一帧数据写入到一个NAL单元中,进行传输或存储的
    NALU分为NAL头和NAL体
    NALU头通常为00 00 00 01,作为一个新的NALU的起始标识
    NALU体封装着VCL编码后的信息或者其他信息
(2)NAL的封装过程:
I帧、P帧、B帧都是被封装成一个或者多个NALU进行传输或者存储
每一个I帧开始之前也有非VCL的NAL单元,用于保存其他信息,它们是PPS、SPS
  PPS(Picture Parameter Sets):图像参数集
  SPS(Sequence Parameter Set):序列参数集
  在实际的H.264数据帧中,往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧,后续是B帧、P帧等数据。
H.264的判断方法可以参考H.265,注意报文中如下帧的参数即可。
SPS:0X67、PPS:0X68、I帧:0X65、P帧:0X41

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

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

相关文章

YOLOv5改进 | 主干网络 | 用repvgg模块替换Conv【教程+代码 】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法,YOLOv5可能比YOLOv8的效果更好。…

IC617 虚拟机下载 RHEL6_ic617_hspice2015_spectre15

下载地址: 链接:https://pan.baidu.com/s/1kFEkq-SVkpSXcSS49THkiA?pwdtpm8 提取码:tpm8

tomcat学习--部署java项目

主流开发项目,springboot框架下,jar部署java传统的tomcat发布war包 一 什么是tomcat? 是一个用于运行java程序的软件,发布的时候:开发将源码使用maven打包,生产war包 二 安装tomcat tomcat是java写的&a…

磁带存储:“不老的传说”依然在继续

现在是一个数据指数增长的时代,根据IDC数据预测,2025年全世界将产生175ZB的数据。 这里面大部分数据是不需要存储的,在2025预计每年需要存储11ZB的数据。换算个容易理解的说法,1ZB是10^18Bytes, 相当于要写5556万块容量18TB的硬盘…

【介绍下运维开发】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

【1.文件和目录相关(上)】

一、Linux的文件系统结构 1、Linux文件系统就是一个树形的分层组织结构。 2、文件系统层次结构标准FHS:用于规范文件目录命名和存放标准。 (1)/bin:是二进制英文缩写。 (2)/boot:存放的是系统启动时要用到的程序。 …

个股期权开户的准入条件

今天带你了解个股期权开户的准入条件。个股期权是一种金融行生品,投资者可以通过购买期权来获得在未来某个时间点以约定价格买入或卖出某只股票的权利,但不承担义务。 个股期权开户的准入条件 场外个股期权(OTC股票期权)相对于交…

【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper)

【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper) 文章目录 1、如何设计一个分布式系统?(底层原理)理论&a…

服务器感染了. rmallox勒索病毒,如何确保数据文件完整恢复?

导言: 近年来,随着信息技术的飞速发展,网络安全问题日益凸显。其中,勒索病毒作为一种严重的网络威胁,对个人和企业数据造成了巨大的威胁。本文将重点介绍.rmallox勒索病毒的特点、传播途径以及应对策略,旨…

MySQL的安全性

给root用户设置密码 点击用户--下面三个账号双击--进行编辑 修改密码--修改完进行保存 关闭数据库后连接不上 重新编辑,设置密码 新建账号 填入信息--保存(主机哪里要选择%) 连接这个新的账号 点击连接--填写连接的名称,地址&…

如何编写高效的单片机代码?

单片机的程序比软开少一些,真正想编写出高效的代码,还是要积累很多年的。 在做研发工程师的10年里,我经历过几个公司,看过很多工程师写的代码,但真正能让我跪着看完的,极少。哪怕是大厂工程师,也…

【深度好文】AI企业融合联盟营销,做的好就是最大赢家!

AI工具市场正在迅速发展,现仍有不少企业陆续涌出,那么如何让你的工具受到目标群体的关注呢?这相比是AI工具营销人员一直在思考的问题。 即使这个市场正蓬勃发展,也无法保证营销就能轻易成功。AI工具虽然被越来越多人认可和接受&a…

短视频矩阵系统源码---开发BS架构B/S(Browser/Server Architecture)架构

短视频矩阵系统源头开发------- 第一款叫做筷子科技,这个筷子科技剪辑和发布都是没有问题的,但是前一段时间他的剪辑发个公告,每个账号只能发两条,另外它的唯一缺点就是它成本比较高的,入门门槛应该在12800左右&#…

Linux学习笔记(epoll,IO多路复用)

Linux learning note 1、epoll的使用场景2、epoll的使用方法和内部原理2.1、创建epoll2.2、使用epoll监听和处理事件 3、示例 1、epoll的使用场景 epoll的英文全称是extend poll,顾名思义是poll的升级版。常见的IO复用技术有select,poll,epo…

HaloDB 的 Oracle 兼容模式

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~ 前倾回顾 前面介绍了“光环”数据库的基本情况和安装办法。 哈喽,国产数据库!Halo DB! 三步走,Halo DB 安装指引 ★ HaloDB是基于原生PG打造的新一代高性能安…

海医大三院使用先进血管外科微创技术成功救治危重主动脉夹层患者

近日,上海东方肝胆外科医院血管外科周建教授团队采用主动脉弓分支型一体化移植物联合体外开窗技术,成功救治复杂危重主动脉夹层患者,为上海嘉定首例,彰显了上海东方肝胆外科医院血管外科的优势与特色。 患者谢先生,72岁,两周前突发剧烈胸背部撕裂样疼痛,休息后症状未能得到缓解…

MyBatis的坑(动态SQL会把0和空串比较相等为true)

文章目录 前言一、场景如下二、原因分析1. 源码分析2. 写代码验证 三、解决办法代码及执行结果如下 总结 前言 在开发过程中遇到MyBatis的动态SQL的if条件不生效的情况,但经过debuger发现并不是参数问题,已经拿到了参数并传给了MyBatis,且从表…

APP逆向之调试的开启

很基础的一个功能设置,大佬轻喷。 背景 在开始进行对APP逆向分析的时候,需要对APP打开调试模式。 打开调试的模式有多种方式可以通过直接改包方式也可以通过借助第三方工具进行打开调试模式。 下面就整理下这个打开调试模式的一些方式。 改包修改模…

计算机网络学习笔记——应用层

一、应用层概述 二、客户/服务器方式(C/S方式)和对等方式(P2P方式) 客户/服务器(Client/Server,C/S)方式 服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固…

四川汇聚荣聚荣科技有限公司是正规的吗?

在当今社会,随着科技的飞速发展,越来越多的科技公司如雨后春笋般涌现。然而,在这个信息爆炸的时代,如何判断一家公司是否正规成为了许多人关注的焦点。本文将围绕“四川汇聚荣聚荣科技有限公司是否正规”这一问题展开讨论&#xf…