视频数据传输在传输层可以选择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. Linux下tftp安装与配置

    1. 背景 开发板在u-boot下从pc获取文件的方式有三种: 1)dnw传输:http://www.cnblogs.com/tanghuimin0713/p/3614768.html 2)串口传输: ...

  2. Asp.net从文件夹中读取图片,随机背景图

    第一步:配置文件web.config里添加 <system.web><connectionStrings> <!--name 是自定义的,connectionString ...

  3. 多屏判断css改写

    function replaceBodyClass(){ for(var i in map){ if(map[i](width)){ document.body.className = documen ...

  4. ListView的几种形式

    一. ArrayAdapter ListView listView = (ListView) findViewById(R.id.list_view);//ListView的参数为id listVie ...

  5. 一幅图证明chrome的由来和目的

  6. WPF实现3D翻转的动画效果

    1.前端代码实现 1.1 原理见代码注析 <Grid MouseDown="Grid_MouseDown"> <Viewport3D> <Viewpo ...

  7. 创建表 添加主键 添加列常用SQL语句

    --删除主键 alter table 表名 drop constraint 主键名--添加主键alter table 表名 add constraint 主键名 primary key(字段名1,字段 ...

  8. WIndows7 多版本

    Windows7 安装U盘 删除source\ei.cfg 以后开机安装会提示安装的版本

  9. Linux/Android 系统怎么修改mac地址

    使用 busybox ifconfig eth0 hw ether AA:BB:CC:DD:EE 可以修改, 但是每次重启都会改回原来的. 所以要修改 /etc/init.mini210.sh (可能 ...

  10. Your First ASP.NET 5 Application on a Mac

    Your First ASP.NET 5 Application on a Mac By Daniel Roth, Steve Smith, Rick Anderson ASP.NET 5 is cr ...