问题描述

在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,调用简单且成熟稳定!

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyDarwin在做拉模式转发海康RTSP摄像机视频流的过程中出现花屏问题的解决方案的更多相关文章

  1. 用Darwin开发RTSP级联server(拉模式转发)(附源代码)

    源代码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描写叙述了流媒体serv ...

  2. 用Darwin开发RTSP级联服务器(拉模式转发)(附源码)

    源码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描述了流媒体服务器对源端音 ...

  3. 海康网络摄像机调用SDK解码Java版

    两个回调函数: FRealDataCallBack 实现预览回调数据 DecCallBack 解码回调函数 在HCNetSDK.java补充相关函数和结构声明 //播放库函数声明,PlayCtrl.d ...

  4. rtsp学习----海康RTSP客户端连接深入分析

    转载于:http://blog.csdn.net/zhouyongku/article/details/41546789 海康相机RTSP连接代码分析 最近在做海康相机rtsp连接获取音视频的工作,现 ...

  5. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

  6. (HK1-1)海康网络摄像机的使用

    https://blog.csdn.net/u014552102/article/details/86700057 一.手机客户端操作:  首先在莹石商城官网https://www.ys7.com/下 ...

  7. 基于EasyIPCamera实现的RTSP跨平台拉模式转发流媒体服务器

    本文转自博客:http://blog.csdn.net/xinlanbobo/article/details/53224445 上一篇博客<EasyIPCamera通过RTSP协议接入海康.大华 ...

  8. EasyDarwin云存储方案调研:海康萤石云采用的是MPEG-PS打包的方式进行的存储

    EasyDarwin开源流媒体服务器项目在直播功能稳定和完善之后,开始涉及服务器端存储与回放功能的调研与开发,当然,这里就要研究一下行业标杆萤石云是怎么来做的,我们通过非常复杂的流程将萤石存储的录像文 ...

  9. 海康RTSP取流URL格式

    预览取流url [海康威视]举例说明: 主码流取流: rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream 子码流取流: rtsp://a ...

随机推荐

  1. AC日记——[NOI2006]最大获利 bzoj 1497

    1497 思路: 最小割: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #inc ...

  2. FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】

    [唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个 ...

  3. Android学习--RecyclerView

    前面一篇总结了ListView,在这篇我们总结一些这个RecyclerView,我们就从最基本的开始,安卓团队是将RecyclerView定义在support库当中的,因此想要使用RecyclerVi ...

  4. 集合点-Jmeter-集合点详解

    集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户 ...

  5. Excel Sheet Column Title - LeetCode

    Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...

  6. 笔记-迎难而上之Java基础进阶-终

    使用Stream流的方式,遍历集合 import java.util.*; public class StreamDemo{ public static void main(String[] args ...

  7. 363. Max Sum of Rectangle No Larger Than K

    /* * 363. Max Sum of Rectangle No Larger Than K * 2016-7-15 by Mingyang */ public int maxSumSubmatri ...

  8. Storyboards Tutorial 02

    内容中包含 base64string 图片造成字符过多,拒绝显示

  9. 【spring boot hibernate】hibernate命名策略spring.jpa.hibernate.naming-strategy不起作用

    对于 spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy hibernate命名策略设置之后 ...

  10. 都是 htmlspecialchars的错,解决 织梦cms dedecms 标题不能为空 不支持php5.3 php5.4 php5.5版本

    article_add.php  101行 $title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen)); 改成 $title = h ...