视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的。TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重。UDP非面向连接,发送端只管发送数据,接收端有没有接收到不管。UDP的好处应该是实时性,坏处显而易见:网络抖动大时数据会丢失严重,出现我们常说的花屏的情况。有一些情况是网络也“正常”,ping包延时很低。但是接收端也会出现花屏。这是什为何呢?下面我将讲述这种情况如何解决。

如果视频发送端视频数据播放正常,接收端播放视频花屏,第一件事情就是WireShark抓包。WireShark会告诉你很多问题点。有一种情况是发送端每次发送的数据包过大。一般交换机MTU单元设置一次通过的数据包大小是1500字节。如果WireShark显示很多fragment(分片)说明数据包被拆分。两种解决方案,要么增大MTU值,要么重新组包,保证数据包的大小在MTU范围内。正常情况下,要求网络工程师设置通用值1500字节。因为很多库比如Ffmpeg就遵守这个值。在实际的项目中我就遇到过接收端播放视频花屏,怎么修改代码都没有,最后定位的数据包的网络传输,让网络工程师修改MTU,问题才得以解决。

包大了不行,小了同样也会有问题。这个问题是本文的另一作者皑雪发现并解决的,问题是单个数据包太小接收端播放视频同样出现花屏,我所遇到的网络环境里没有碰到这种情况数据包小了,多发几次也没出现花屏。这个问题的解决方法是如果包太小先缓存,等数据包够数时一起发送。下面给出解决问题的基本代码(代码是皑雪写的)。

#define BUFFER_LEN   1480

if (m_nBufferLen + nDataSize < BUFFER_LEN)

{

memcpy(m_pchBuffer + m_nBufferLen, (char*)pkt + RTP_HEAD_LEN, nDataSize);

m_nBufferLen += nDataSize;

}

else

{

SendData(pthis->sendtransport, m_pchBuffer, m_nBufferLen);

memset(m_pchBuffer, 0, sizeof(m_pchBuffer));

m_nBufferLen = 0;

memcpy(m_pchBuffer, (char*)pkt + RTP_HEAD_LEN, nDataSize);

m_nBufferLen = nDataSize;

}

udp 视频包网络传输花屏的更多相关文章

  1. UDP数据包最大传输长度

    概念以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元). 但这并不是指链路层的长度被限制在1500字 ...

  2. 网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient

    前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机 ...

  3. Qt编写图片及视频TCP/UDP网络传输

    一.前言 很多年前就做过类似的项目,无非就是将本地的图片上传到服务器,就这么简单,其实用http的post上传比较简单容易,无需自定义协议,直接设置好二进制数据即可,而采用TCP或者UDP通信的话,必 ...

  4. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案

    本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...

  5. 网络传输--UDP

    UDP网络编程 一.优缺点 二.套接字socket 三.类型转换 四.UDP发收数据 五.广播和聊天器案例 回到顶部 一.优缺点 UDP : 无连接 (发送端无需确认接收端是否收到), 其主要用途为音 ...

  6. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  7. 各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient

    之前的一篇博客<网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient>,我们介绍了RTSP流的检测和分析工具EasyRTS ...

  8. 解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  9. UNIX网络编程——解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

随机推荐

  1. 05-Tom猫(UIImageView的简单运用)

    ViewController.h文件中: @interface ViewController : UIViewController @property (weak, nonatomic) IBOutl ...

  2. WAMP环境下访问PHP提示下载PHP文件

    原因是服务器没有加载到PHP文件 到http.conf下加载 AddType application/x-httpd-php .php AddType application/x-httpd-php ...

  3. Java通过Executors提供四种线程池

    http://cuisuqiang.iteye.com/blog/2019372 Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果 ...

  4. tomcat学习笔记1

    tomcat是一个开源软件,是由java语言编写的,它工作的话需要运行在jvm虚拟机中,说到jvm不得不说下java这个大名鼎鼎的编程 语言了 java这个编程语言最优秀的特点要数write once ...

  5. centos+php+coreseek+sphinx+mysql之二sphinx配置篇

    先进入文件夹进行以下操作 cd /usr/local/coreseek/etc cp sphinx.conf.dist sphinx.conf source src1 { sql_host = 127 ...

  6. Android EditText 不弹出输入法

    当第一次进入一个activity的时候  一般是第一个edittext是默认选中的,但是该死的软键盘也一起弹出来了 那是相当的不美观哈!(#‵′)凸.为此, 本大人就去寻找在刚进入这个activity ...

  7. Kindeditor小改动

    1.Flash上传时默认的大小为550*400,修改Kindeditor/plugins/flash/flash.js里的 self.plugin.flash内容,根据自己的页面直接设置默认大小,方便 ...

  8. windows下python+flask环境配置详细图文教程

    本帖是本人在安装配置python和flask环境时所用到的资源下载及相关的教程进行了整理罗列,来方便后面的人员,省去搜索的时间.如果你在安装配置是存在问题可留言给我. 首先罗列一下python+fla ...

  9. 自学Python一 迷茫中的开端!

    有心学习一下Python,多门技术多条路啊.经历了找教程,看代码,写demo,这东西入门容易精通难啊!又因为请了两周婚假彻底忘光光.想了想自己还是边复习边写点什么东西吧.很多技术,新东西都是看了n多, ...

  10. Java入门到精通——基础篇之static关键字

    一.概述        static 关键字是声明静态变量,静态方法用的.static的含义是属于类且不属于类对象的变量和函数. 二.static的产生.         在创建对象的时候除非用new ...