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 ...
随机推荐
- Android进阶之Fragment与Activity之间的数据交互
1 为什么 因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. 2 Activity把值传递给Fragment 2.1 第一种方式,也是最常用的 ...
- Manifest值冲突解决方法
FBI Warning:欢迎转载,但请标明出处:http://blog.csdn.net/codezjx/article/details/38669939,未经本人同意请勿用于商业用途,感谢支持! 整 ...
- dedecms调用新闻文章列表
效果如下: 代码如下: <div class="list"> <ul class="d6 ico4"> {dede:list pages ...
- 2016.3.23 集成新版activiti-modeler(5.17+)到项目中
书:<activiti实战> 博客: http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html h ...
- HM编码器代码阅读(14)——帧间预測之AMVP模式(二)predInterSearch函数
简单介绍 predInterSearch基本的工作是ME(运动预计)和MC(运动补偿). 函数中有一个bTestNormalMC变量.它表示是否进行正常的MC过程,正常的MC过程就是进 ...
- 手机话费充值和手机流量充值 API
最近正好需要用到手机充值和流量充值接口,网上找到的,记录并分享下. 聚合数据上面有手机充值的接口,也有流量充值的接口:注册以后可以使用它的OpenId和AppKey. 手机话费充值的接口:https: ...
- vue install 注册组件
1.myPlugin.js文件 let MyPlugin = {}; MyPlugin.install = function (Vue, options) { // 1. 添加全局方法或属性 Vue. ...
- vector(可变数组) 用于UDP通信
头文件: #include<vector.h> 然后,声明并初始化vctor数组. vector<char> str(len); 其中len可以是变量或者常量.(其实用常量就 ...
- android Gallery2 onPause时候,其背景界面显示黑色
改动: Src/com/android/gallery3d/app/AbstracGalleryActivity.java OnResume()函数约290行 去掉 mGLRootView.setVi ...
- 16进制颜色转换为UIColor
objc #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >& ...