草庐IT

结合实战,浅析GB/T28181(八)——视频丢包(卡顿、花屏、绿屏)排查

来灵 2023-04-28 原文

1 问题现象

在视频专网(局域网)中,通过GB/T 28181视频平台接入大量的网络摄像机,比如上百、上千,甚至上万台。当系统同一时刻实况点播并发的视频路数较多时,常常会在客户端或电视墙监视器上,出现视频卡顿、花屏、绿屏等现象。

是视频平台软件媒体转发性能跟不上,支撑不起当前的系统压力;还是网络带宽出现瓶颈、负载过高引起丢包;抑或是服务器/客户机配置不够,媒体转发或解码时,机器资源(CPU占用率、内存等)即将耗尽?面对用户一脸的疑惑和这一个个问号,此情此景,该如何是好?

客户端播放花屏截图

客户端播放卡顿截图

 客户端播放绿屏截图

 电视墙播放紫色条纹幻影截图

 如果您碰到了这些问题,或类似的问题,先别急。其实这些问题,大部分情况下,都是由于网络丢包引起的。可能您会问,我使用ping命令ping过摄像机,ping过NVR,ping过下级平台了,ping的时候,没有延迟,更没有超时,怎么可能会是网络丢包呢?

Ping命令,一定程度上可以帮我们来调查网络是否连通,是否有延迟,是否有超时,但是面对视频流大并发传输这种应用场景,ping命令从准确率上来说,是不够的。那么我们用什么工具来排查是否网络丢包呢?大名鼎鼎的Wireshark,此时便可以派上用场了。下面跟我一起看一下用Wireshark怎么来分析和定位网络是否存在丢包。

2 排查思路

复现问题,进行排查:比如在客户端播放问题摄像机视频;

1,先确保前端摄像机设置的视频参数是合适的,视频参数主要包括:编码格式、分辨率、码率。结合项目实践经验,以下是比较合理的参数设置,供参考

海康摄像机

大华摄像机

宇视摄像机

2,确认该摄像机,在平台是直连接入的,还是NVR或下级平台推上来的。如果是直连接入,在平台服务器上抓SIP信令包,用摄像机IP地址过滤;如果是NVR或下级平台推上来的,用NVR或下级平台IP地址过滤SIP信令抓包;

3,客户端点击播放问题摄像机;

4,在平台服务器上,用IP地址过滤,抓信令(SIP)包,获取接收视频流的媒体服务IP和端口号;

5,在媒体服务器上,选中媒体服务IP对应的网卡,用收流端口号过滤视频流包;

6,查看媒体流是否有丢包。如果有丢包,联系现场人员或下级平台厂家,排查网络;如果没丢包,则要转换排查方向了。

3 抓包分析

比如摄像机是下级平台推上来的,那么在平台服务器上,抓取与下级平台的SIP信令包。并用下级平台的IP地址进行过滤。如下图所示,抓取实况点播INVITE信令交互包,从其SDP中,可以获取平台媒体服务的收流IP地址和端口号,比如收流端口是37610。

接着在媒体服务器上,对收流IP地址对应的网卡进行抓包,用端口37610过滤(抓取的是下级平台发给本级平台媒体服务的视频流RTP包)。

接下来将UDP包解码为RTP包:

接下来对RTP进行流分析

由截图得知,在时长54.6秒的抓包中,共抓取6274个数据包,其中丢包2518个,乱序包724个,丢包率达到了40.13%,相当高了。这么高的丢包率,一般在客户端展现的视频就是花屏、绿屏。丢包率低一些的,展现为卡顿、拖影。一般丢包率高于1%时,客户端和电视墙上播放的视频质量,就会受到影响了。

4 丢包外的思考

使用Wireshark基本可以判断和确定网络是否存在丢包。可如果网络不存在丢包,那怎么办呢?那就要从以下几方面着手分析和排查咯:

1、媒体服务器的网卡带宽是否满载。怎么排查?比如媒体服务程序的收流IP和发流IP配置在同一块网卡上,该网卡为千兆网卡,即1Gbps。如果收流流量与发流流量峰值之和,已接近或超过1G,那么就要考虑给媒体服务器添加网卡分摊流量了;

2、单台媒体服务器最大转发视频路数能达到多少?如果视频并发路数已超过单台服务器的路数,那么就要考虑给媒体服务器扩容,添加媒体服务器;

3、客户机的硬件配置是否合适?比如在客户端进行多画面高清视频播放,16画面、25画面、甚至36画面等,这个场景播放非常耗费客户机的CPU、内存和显卡资源,如果配置跟不上,也会引起视频卡顿、花屏、绿屏;

4、客户端播放库的排查,播放库软解能力评估与测试。

※※如果您还有其它方面的补充或建议,欢迎留言进行交流和讨论。原创不易,感谢您的耐心阅读和支持!

有关结合实战,浅析GB/T28181(八)——视频丢包(卡顿、花屏、绿屏)排查的更多相关文章

  1. ruby-on-rails - 结合 meta_search 与 acts_as_taggable_on - 2

    我在开发的Rails3网站的一些搜索功能上遇到了一个小问题。我有一个简单的Post模型,如下所示:classPost我正在使用acts_as_taggable_on来更轻松地向我的帖子添加标签。当我有一个标记为“rails”的帖子并执行以下操作时,一切正常:@posts=Post.tagged_with("rails")问题是,我还想搜索帖子的标题。当我有一篇标题为“Helloworld”并标记为“rails”的帖子时,我希望能够通过搜索“hello”或“rails”来找到这篇帖子。因此,我希望标题列的LIKE语句与acts_as_taggable_on提供的tagged_with方法

  2. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  3. ruby-on-rails - 如何将大于 5GB 的文件上传到 Amazon S3? - 2

    我目前正在使用带有Carrierwavegem的Rails3.2将文件上传到AmazonS3。现在我需要能够处理用户提交的大于5GB的文件,同时仍然使用Carrierwavegem。Carrierwave或Fog是否有任何其他gem或分支可以处理5GB以上的文件上传到S3?编辑:我不想重写一个完整的Rails上传解决方案,所以像这样的链接没有帮助:https://gist.github.com/908875. 最佳答案 我想出了如何做到这一点,并且现在可以正常工作了。在正确的config/environment文件中,添加以下内容以

  4. ruby-on-rails - 将 Amazon Simple Notification service SNS 与 ruby​​ 结合使用 - 2

    很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭9年前。我需要从基于ruby​​的应用程序使用AmazonSimpleNotificationService,但不知道从哪里开始。您对从哪里开始有什么建议吗?

  5. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

  6. ruby-on-rails - 将 Rails 与 Paperclip 和 SWFUpload 结合使用 - 2

    我有一个基本的Rails应用程序测试,其中包含一个用回形针处理的照片字段的用户模型。我创建了能够创建/编辑用户的View,并且照片上传工作正常。Editinguseruser_path(@user),:html=>{:method=>"put",:multipart=>true}do|f|%>|然后,我想将SWFUpload集成到我的应用程序中。我试着按照这个tutorial并运行testproject没有任何成功:浏览按钮不会打开文件对话框,并抛出错误#2176,这是关于selectFiles()方法的。首先,问题是Flashv.10与项目中包含的旧版本SWFUpload(2.1.0

  7. ruby-on-rails - 将 Facebook Connect 与 Authlogic 结合使用 - 2

    我正在尝试使Authlogic和FacebookConnect(使用Facebook)发挥良好的作用,以便您可以通过正常注册方式或使用Facebookconnect创建帐户。我已经能够让连接以一种方式工作,但注销只会在facebook而不是我的网站上注销,我必须删除cookie才能使其正常工作。任何帮助都会很棒,谢谢! 最佳答案 这是我使用FacebookConnect扩展、authlogic和OpenID制作的示例应用程序。它仍然需要一些工作,但它确实起作用了。http://big-glow-mama.heroku.com/htt

  8. 你真正了解什么是接口测试么?接口实战一“篇”入魂 - 2

    最近在工作中,看到一些新手测试同学,对接口测试存在很多疑问,甚至包括一些从事软件测试3,5年的同学,在聊到接口时,也是一知半解;今天借着这个机会,对接口测试做个实战教学,顺便总结一下经验,分享给大家。计划拆分成4个模块跟大家做一个分享,(接口测试、接口基础知识、接口自动化、接口进阶)感兴趣的小伙伴记得关注,希望对你的日常工作和求职面试,带来一些帮助。注:文章较长有5000多字,希望小伙伴们认真看完,当然有些内容对小白同学不是太友好,如果你需要详细了解其中的一些概念或者名词,请在文章之后留言,后续我将针对大家的疑问,整理输出一些大家感兴趣的文章。随着开发模式的迭代更新,前后端分离已不是新的概念,

  9. FIFO实战学习-同步FIFO/异步FIFO-格雷码 - 2

    目录FIFO一.自定义同步FIFO1.1代码设计1.2Testbech1.3行为仿真***学习位宽计算函数$clog2()***$clog2()系统函数使用,可以不关注***分布式资源或者BLOCKBRAM二.异步FIFO2.1在FIFO判满的时候有两种方式:2.2异步FIFO为什么要使用格雷码2.2.1介绍格雷码2.2.2格雷码在异步FIFO中的应用2.2.2格雷码判满2.4二进制与格雷码之间的转换2.4.1二进制码转换为格雷码的方法2.4.2格雷码转换为二进制码的方法2.3实现框图2.5实现及仿真代码2.6仿真图验证2.7结论FIFO  这篇更多的是记录FIFO学习,参考了众多优秀的文章,

  10. ruby - 如何将 DynamoDB Local 与 AWS Ruby 开发工具包结合使用? - 2

    亚马逊的documentation提供有关如何使用DynamoDBLocal的Java、.NET和PHP示例。你如何用AWSRubySDK做同样的事情??我的猜测是你在初始化时传入了一些参数,但我不知道它们是什么。dynamo_db=AWS::DynamoDB.new(:access_key_id=>'...',:secret_access_key=>'...') 最佳答案 您使用的是SDK的v1还是v2?您需要找出答案;从上面的简短片段来看,它看起来像v2。为了以防万一,我已经包含了这两个答案。v1答案:AWS.config(us

随机推荐