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

news2024/9/20 9:36:01

一、 问题现象
【问题现象】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

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

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

相关文章

Facebook的魅力:数字时代的社交热点

在当今数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的巨头,一直以其独特的魅力吸引着全球数十亿用户。本文将深入探讨Facebook的魅力所在,以及它在数字时代的社交热点。 1. 社交网络的霸主&…

如何做好投入式水位计的安装与维护

投入式水位计是一种广泛应用于各种环境和水位监测场景的精确测量设备。为了确保其长期稳定运行和测量准确性,正确的安装和维护至关重要。本文将详细介绍投入式水位计的安装步骤和注意事项,以及维护过程中的关键要点。 一、投入式水位计的安装 准备工作&a…

JAVA类与方法·易错题分析

分析一下作业中关于类与方法写错或者易错的题。 N o . 1 No.1 No.1 下面程序的执行结果是______。 public class Test7 {public static void main(String[] args){new B().display();} } class A{public void draw() {System.out.print("Draw A.");}public void di…

基于STM32单片机老人体温心率血氧跌倒定位短信报警

一.硬件及设计功能 以STM32F103C8T6为中央处理器,GPS模块用采集数据,将数据发送给单片机后,单片机根据定位计算公式得出当前位置的经纬度信息和时间信息。经过LCD显示器处理后得出和时间信息SIM800模块发送短信到设定的手机号上,将…

软件系统测试的类型和方法介绍

测试是软件开发过程中至关重要的一环,负责验证和确认软件系统是否符合预期的需求,并帮助开发团队消除潜在的缺陷。系统测试作为软件测试中不可缺少的过程,是根据预先制定的测试计划和测试用例,以检查软件系统功能、性能、安全性和…

【C++】---二叉搜索树

【C】---二叉搜索树 一、二叉搜索树概念二、二叉搜索树操作(非递归)1.二叉搜索树的查找 (非递归)(1)查找(2)中序遍历 2.二叉搜索树的插入(非递归)3.二叉搜索树…

TH方程学习(1)

一、背景介绍 根据CW方程的学习,CW方程的限制条件为圆轨道,不考虑摄动,二者距离相对较小。TH方程则可以将物体间的相对运动推广到椭圆轨道的二体运动模型,本部分将结合STK的仿真功能,联合考察TH方程的有用性&#xff…

postman教程-7-文件上传接口

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了postman发送get请求的方法,本小节我们讲解一下postman文件上传接口的请求方法。 postman文件上传的方式大概有两种,一种是form-data类型上传文件,一种是bin…

电脑丢失api-ms-win-crt-runtime-l1-1-0.dll的多种修复方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中,它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&#xf…

【CTF-Web】XXE学习笔记(附ctfshow例题)

XXE 文章目录 XXE0x01 前置知识汇总XMLDTD (Document Type Definition) 0x02 XXE0x03 XXE危害0x04 攻击方式1. 通过File协议读取文件Web373(有回显)Web374(无回显) Web375Web376Web377Web378 0x01 前置知识汇总 XML 可扩展标记语言(eXtensi…

【YashanDB知识库】ODBC驱动类问题定位方法

【标题】ODBC驱动类问题定位方法 【需求分类】故障分析 【关键字】ODBC 【需求描述】由于我们的ODBC接口目前尚不完善,经常会遇见ODBC接口能力不足导致应用功能无法运行的问题,需要定位手段确定底层是哪个接口报错 【需求原因分析】方便一线数据库管…

【408真题】2009-27

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…

牛客热题:数据流中的中位数

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:数据流中的中位数题目链接方法一…

Marin说PCB之如何在主板上补偿链路中的走线的等长误差?

一场雨把我困在这里,你冷漠地看我没有穿雨衣淋成落汤鸡。今天刚刚出门时候看天气预报没有雨,于是我就没有带雨衣骑电动车去公司了,谁知道回来的路上被淋成狗了。天气预报就像是女人的脾气那样,不能完全相信的。 好了,我…

MATLAB分类与判别模型算法: 快速近邻法(FastNN)分类程序【含Matlab源码 MX_005期】

算法思路介绍: 1. 数据准备阶段: 生成一个合成数据集 X,其中包含三个簇,每个簇分布在不同的区域。 定义聚类层数 L 和每个层次的子集数量 l。 2. 聚类阶段: 使用K均值聚类算法将初始数据集 X 分成 l 个簇。…

大模型对齐方法笔记二:基于Rank的对齐方法RRHF和PRO

文章目录 RRHFPRO将RLHF嫁接到PRO 参考资料 RRHF RRHF(Rank Responses to align Human Feedback)出自2023年4月的论文《RRHF: Rank Responses to Align Language Models with Human Feedback without tears》,是较早提出的不需要使用PPO来对齐人类偏好的方法。 设…

五个超级好用的Prompt网站,让你的GPT效率碾压旁人!

五个超级好用的Prompt网站,让你的GPT效率碾压旁人! 1. 150 Best ChatGPT Prompts for All Kinds of Workflow 该网站包含了150个能够显著提升工作流程效率的ChatGPT Prompt。从制作引人入胜的内容到简化项目,这些提示应该有助于将 ChatGPT …

【高频】redis快的原因

相关问题: 1.为什么Redis能够如此快速地进行数据存储和检索? 2.Redis作为内存数据库,其内存存储有什么优势吗? 3.Redis的网络模型有何特点,如何帮助提升性能? 一、问题回答 Redis使用了内存数据结构,例如字符串、哈希表、列表、集合、有…

QT系列教程(5) 模态对话框消息传递

模态对话框接受和拒绝消息 我们创建一个模态对话框,调用exec函数后可以根据其返回值进行不同的处理,exec的返回值有两种,Qt的官方文档记录的为 QDialog::Accepted QDialog::RejectedAccepted 表示接受消息, Rejected表示拒绝消息…

可视化大屏:随意堆数据,错!要主次分明、重点突出,动静结合。

可视化大屏是一种展示数据的方式,它的设计应该遵循一些原则,以确保信息的传递和理解效果最佳。以下是一些关键点,可以帮助设计出主次分明、重点突出、动静结合的可视化大屏: 定义目标和重点: 在开始设计可视化大屏之前…