EasyDarwin在做拉模式转发海康RTSP摄像机视频流的过程中出现花屏问题的解决方案
问题描述
在3年前我当时基于EasyDarwin为用户开发了一款RTSP拉模式转发的程序,也发布了一篇博客《用Darwin开发RTSP级联服务器(拉模式转发)》,当时考虑的很简单,只要将RTSP源的sdp和RTP流拉取过来,不做任何变动立即转发即可实现拉模式转发了,而且CPU占用也会非常低,基本上就是跑一个数传,其效果也正如预期的那样,一个EasyDarwin拉模式转发的服务器,可以带动很多个IPC的流分发,再次以RTSP+RTP协议的形式分发出去;
但是,近期有我们的一位EasyDarwin的用户反馈道:转发大部分的IPC都是没有问题的,但是转发海康的某几款设备的时候,总是会出现花屏,而且是必现的!?!
问题排查
再次重新操刀负责此事,我决定拆分拉模式转发的流程,做排除法进行分析:
- 第一步是IPC到EasyDarwin的数据是否完整;
- 第二步是EasyDarwin的RTSPClient的数据是否完整;
- 第三步是RTSPClient是否将有效的数据丢掉了;
我们先从第三部分开始,直接通过EasyRTSPClient从EasyDarwin获取转发的RTSP流,存储到文件,其试用方法可以参考博客《[工具]利用EasyRTSPClient工具检查摄像机RTSP流不能播放原因以及排查音视频数据无法播放问题》,我发现存储下来的H.264文件确实就是花屏的;
我们再从第一部分开始排查,我们选择从服务器端打印RTP序列号的方式来进行的,因为比较简单,当发现上一个RTP Number跟下一个RTP Number不连续的时候,我们就打印日志,结果发现,始终都很连续,非常稳定!排除此部分的问题!
再排查第二个部分就是EasyDarwin到RTSPClient的RTP流是否完整了,这一部分我们采用了wireshark抓包的方式,查看RTP Sequence是否是连续的,结果发现也是RTP非常连续的,没有遗漏,也就是说,数据也确实都完整地转发到了客户端!排除此部分的问题!
那么问题就出在了RTSPClient阶段,是如何将收到的数据,却给丢掉了!
通过反复打印EasyRTSPClient中的日志,我们发现了一段代码如图:
海康的RTP流在RTP中设置的Padding为True,也就是尾部有附加数据,而我们转发的时候却只转发的RTP部分,附带的部分没有进行转发,结果就导致RTSPClient将这部分数据认为是不完整的数据,直接丢掉了,那么就导致了花屏的产生!
解决方案
我们在EasyDarwin中人为地将Padding字段设置为0就可以了,这样附加数据也不用转发了,只转发视频部分:
关于EasyRTSPClient
EasyRTSPClient是一套非常稳定、易用、支持重连的RTSPClient工具,SDK形式提供,接口调用非常简单,再也不用像调用live555那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY的复杂流程,担心内存释放的问题了,全平台支持(包括Windows/Linux 32&64,ARM各平台,Android,iOS),支持RTP Over TCP/UDP,支持断线重连,连续维护与迭代超过5年,能够接入市面上99%以上的IPC,调用简单且成熟稳定!
获取更多信息
Copyright © EasyDarwin.org 2012-2017

EasyDarwin在做拉模式转发海康RTSP摄像机视频流的过程中出现花屏问题的解决方案的更多相关文章
- 用Darwin开发RTSP级联server(拉模式转发)(附源代码)
源代码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描写叙述了流媒体serv ...
- 用Darwin开发RTSP级联服务器(拉模式转发)(附源码)
源码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描述了流媒体服务器对源端音 ...
- 海康网络摄像机调用SDK解码Java版
两个回调函数: FRealDataCallBack 实现预览回调数据 DecCallBack 解码回调函数 在HCNetSDK.java补充相关函数和结构声明 //播放库函数声明,PlayCtrl.d ...
- rtsp学习----海康RTSP客户端连接深入分析
转载于:http://blog.csdn.net/zhouyongku/article/details/41546789 海康相机RTSP连接代码分析 最近在做海康相机rtsp连接获取音视频的工作,现 ...
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...
- (HK1-1)海康网络摄像机的使用
https://blog.csdn.net/u014552102/article/details/86700057 一.手机客户端操作: 首先在莹石商城官网https://www.ys7.com/下 ...
- 基于EasyIPCamera实现的RTSP跨平台拉模式转发流媒体服务器
本文转自博客:http://blog.csdn.net/xinlanbobo/article/details/53224445 上一篇博客<EasyIPCamera通过RTSP协议接入海康.大华 ...
- EasyDarwin云存储方案调研:海康萤石云采用的是MPEG-PS打包的方式进行的存储
EasyDarwin开源流媒体服务器项目在直播功能稳定和完善之后,开始涉及服务器端存储与回放功能的调研与开发,当然,这里就要研究一下行业标杆萤石云是怎么来做的,我们通过非常复杂的流程将萤石存储的录像文 ...
- 海康RTSP取流URL格式
预览取流url [海康威视]举例说明: 主码流取流: rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream 子码流取流: rtsp://a ...
随机推荐
- Spark-RDD之 zip
zip这个函数是在scala中的,spark中也应用于RDD类型 val posLeftRDD = FreqDic1.map(line => line._1) zip sc.paralleliz ...
- 身份识别协议枚举工具ident-user-enum
身份识别协议枚举工具ident-user-enum 身份识别协议(Ident protocol,IDENT)是一种Internet协议,用于识别使用特定TCP端口的用户身份.服务器开启该服务后,会 ...
- Codeforces 869 C The Intriguing Obsession
题目描述 — This is not playing but duty as allies of justice, Nii-chan! — Not allies but justice itself, ...
- weight initilzation
1. pytorch提供接口 method 1 torch.nn.init里面有很多初始化分布 import torch.nn.init as init self.conv1 = nn.Conv2d ...
- Ubuntu 16.04下使用Wine安装Notepad++
说明: 1.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 2.关于没有.wine文件夹的解决方法:在命令行上运行winecfg: 下载: (链接 ...
- Linux运维:CentOS6和7的区别
Liunx笔记:CentOS6和CentOS7的区别 路飞学城运维人员 在线流程图软件 Ago linux运维群: 93324526 笔者QQ:578843228 常用安装包下载 yum instal ...
- 使用nginx实现的灰度发布思路研究(待实践)
灰度发布也叫 A/B 测试,原理是一套系统在实现了负载均衡,全国节点都部署了系统之后,可以在新功能上线后,让一小部分用户先使用,从中收集使用信息来做对比和发现bug,及时调整,最终分发到全国的节点. ...
- Microsoft JET Database Engine(0x80004005)未指定错误的解决方法
今天在给一台新的电脑安装IIS,安装成功,建立虚目录后,运行一个已经在别的机器上的正确的asp文件,就是不成功,提示:Microsoft JET Database Engine (0x80004005 ...
- 关于 OGRE 与 OSG 的简单比较 (转)
关于 OGRE 与 OSG 的简单比较 1 前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(man ...
- 2017.2.21 activiti实战--第七章--Activiti与spring集成(一)配置文件
学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 ...