From d92ebb4619e32ee0c2448de4e5ba2da96e0684fe Mon Sep 17 00:00:00 2001 From: Jim Date: Sun, 2 Feb 2014 19:01:31 +0800 Subject: [PATCH] modify post 04-02-01 --- .../2014-02-01-Flex-real-time-video-app.md | 23 ++++++++++++------ media/pic2014/0201-4.png | Bin 0 -> 6950 bytes media/pic2014/0201-5.png | Bin 0 -> 15108 bytes media/pic2014/0201-6.png | Bin 0 -> 12412 bytes 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 media/pic2014/0201-4.png create mode 100644 media/pic2014/0201-5.png create mode 100644 media/pic2014/0201-6.png diff --git a/_posts/2014/2014-02-01-Flex-real-time-video-app.md b/_posts/2014/2014-02-01-Flex-real-time-video-app.md index 90b9c89..c9f38f0 100644 --- a/_posts/2014/2014-02-01-Flex-real-time-video-app.md +++ b/_posts/2014/2014-02-01-Flex-real-time-video-app.md @@ -16,22 +16,29 @@ tags: ---------- -#### 3G下测试出的情况 +## 3G下测试出的情况 在3G网络下测试的时候我先在设备上运行了一个网速测试的APP,得出当时的网速是上行4.5M下行1.6M左右,对WCDMA来说这是一个比较好的数字,而我们的服务器设置中视频质量仅需要320K的带宽就够了。然而实际通话时的视频和音频质量都非常差(最后双方关上视频,仅用音频的质量都比较差)。 -#### 服务器上抓包 +## 服务器上抓包 > **NOTE:** > 需要注意抓包的准确性问题。在服务器上如果用tcpdump抓包,特别是像视频实时应用的时候由于数据量大,tcpdump依赖的底层库可能会来不及处理而buffer溢出,使得数据文件不完整。这样在用wireshark分析的时候会看到的丢包量就是不准确的。 ![](/media/pic2014/0201-2.png) - -解决方法参考[tcpdump抓包丢失问题](http://wenku.baidu.com/view/74b3166e1eb91a37f1115cf6.html)。 +>解决方法参考[tcpdump抓包丢失问题](http://wenku.baidu.com/view/74b3166e1eb91a37f1115cf6.html)。 在分析抓到的包时我们看到大量的丢包,如下图: ![](/media/pic2014/0201-1.png) -更多测试的结果 +###更多测试的结果 +下面的对比测试中我们对比一下不同丢包情况所导致的不同TCP吞吐率曲线。(前面一个小峰是带宽测试留下的。) +下图是视频质量好的时候的TCP呑吐率情况 +![](/media/pic2014/0201-4.png) +下图是视频时断时续丟包 +![](/media/pic2014/0201-5.png) +下图是视频几乎无法进行的情况 +![](/media/pic2014/0201-6.png) -#### 3G带宽与TCP丢包 +由上面的图形我们看到不同的丢包对TCP传输率产生了不同的影响。 +## 3G带宽与TCP丢包 这轮测试下来得出的重要结论是**TCP在WCDMA3G下的网速远达不到其宣称值**!因为丢包会导致TCP误以为是网络拥塞,而双方减小收发窗口,主动降速。 下图就是我实测的TCP网速。 @@ -48,8 +55,8 @@ tags: 注意标称网速不包括自身的信令消耗,所以150M的WiFi实际数据传输速度超不过80兆。3G消耗的信令可能更多。 -#### 如何改进 -===== +## 如何改进 + **带宽检测** diff --git a/media/pic2014/0201-4.png b/media/pic2014/0201-4.png new file mode 100644 index 0000000000000000000000000000000000000000..1d835cd81307de1abfddbe894a64c00b6c26382a GIT binary patch literal 6950 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