我是靠谱客的博主 复杂手链,最近开发中收集的这篇文章主要介绍iOS 直播-网速监控,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

iOS 直播-网速监控

CXNetworkSpeed.h

 1 //
 2 //
CXNetworkSpeed.h
 3 //
CXNetworkSpeedDemo
 4 //
 5 //
Created by xubaoaichiyu on 16/08/16.
 6 //
Copyright © 2016年 xubaoaichiyu All rights reserved.
 7 //
 8
 9
10
11 #import <Foundation/Foundation.h>
12
13
14 @interface CXNetworkSpeed : NSObject
15
16 @property (nonatomic, copy, readonly) NSString * receivedNetworkSpeed;
17
18 @property (nonatomic, copy, readonly) NSString * sendNetworkSpeed;
19
20 + (instancetype)shareNetworkSpeed;
21
22 - (void)startMonitoringNetworkSpeed;
23
24 - (void)stopMonitoringNetworkSpeed;
25
26 @end
27
28
29
30 /**
31  *
@{@"received":@"100kB/s"}
32
*/
33 FOUNDATION_EXTERN NSString *const kNetworkReceivedSpeedNotification;
34
35 /**
36  *
@{@"send":@"100kB/s"}
37
*/
38 FOUNDATION_EXTERN NSString *const kNetworkSendSpeedNotification;

CXNetworkSpeed.m


1 //

2 //
CXNetworkSpeed.m

3 //
CXNetworkSpeedDemo

4 //

5 //
Created by xubaoaichiyu on 16/08/16.

6 //
Copyright © 2016年 xubaoaichiyu All rights reserved.

7 //

8

9 #import "CXNetworkSpeed.h"
 10 #include <arpa/inet.h>
 11 #include <net/if.h>
 12 #include <ifaddrs.h>
 13 #include <net/if_dl.h>
 14
 15 /**
 16  *
@{@"received":@"100kB/s"}
 17
*/
 18 NSString *const kNetworkReceivedSpeedNotification = @"kNetworkReceivedSpeedNotification";
 19
 20 /**
 21  *
@{@"send":@"100kB/s"}
 22
*/
 23 NSString *const kNetworkSendSpeedNotification = @"kNetworkSendSpeedNotification";
 24
 25 @interface CXNetworkSpeed ()
 26 {
 27 
uint32_t _iBytes;
 28 
uint32_t _oBytes;
 29 
uint32_t _allFlow;
 30 
uint32_t _wifiIBytes;
 31 
uint32_t _wifiOBytes;
 32 
uint32_t _wifiFlow;
 33 
uint32_t _wwanIBytes;
 34 
uint32_t _wwanOBytes;
 35 
uint32_t _wwanFlow;
 36 }
 37
 38 @property (nonatomic, copy) NSString * receivedNetworkSpeed;
 39
 40 @property (nonatomic, copy) NSString * sendNetworkSpeed;
 41
 42 @property (nonatomic, strong) NSTimer * timer;
 43
 44 @end
 45
 46 @implementation CXNetworkSpeed
 47
 48 static CXNetworkSpeed * instance = nil;
 49
 50 + (instancetype)shareNetworkSpeed{
 51
if(instance == nil){
 52
static dispatch_once_t onceToken ;
 53
dispatch_once(&onceToken, ^{
 54
instance = [[self alloc] init] ;
 55 
}) ;
 56 
}
 57
return instance;
 58
 59 }
 60
 61 + (instancetype)allocWithZone:(struct _NSZone *)zone{
 62
 63
if(instance == nil){
 64
static dispatch_once_t onceToken;
 65
dispatch_once(&onceToken, ^{
 66
 67
instance = [super allocWithZone:zone];
 68
 69 
});
 70 
}
 71
return instance;
 72 }
 73
 74 -(instancetype)init{
 75
 76
static dispatch_once_t onceToken;
 77
dispatch_once(&onceToken, ^{
 78
instance = [super init];
 79
_iBytes = _oBytes = _allFlow = _wifiIBytes = _wifiOBytes = _wifiFlow = _wwanIBytes = _wwanOBytes = _wwanFlow = 0;
 80 
});
 81
return instance;
 82
 83 }
 84
 85 - (void)startMonitoringNetworkSpeed{
 86
if(_timer)
 87 
[self stopMonitoringNetworkSpeed];
 88
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(netSpeedNotification) userInfo:nil repeats:YES];
 89 }
 90
 91 - (void)stopMonitoringNetworkSpeed{
 92
if ([_timer isValid]) {
 93 
[_timer invalidate];
 94 
}
 95 }
 96
 97 - (void)netSpeedNotification{
 98 
[self checkNetworkflow];
 99 }
100
101 -(NSString *)bytesToAvaiUnit:(int)bytes
102 {
103
if(bytes < 10)
104 
{
105
return [NSString stringWithFormat:@"0KB"];
106 
}
107
else if(bytes >= 10 && bytes < 1024 * 1024) // KB
108 
{
109
return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];
110 
}
111
else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024)
// MB
112 
{
113
return [NSString stringWithFormat:@"%.1fMB", (double)bytes / (1024 * 1024)];
114 
}
115
else
// GB
116 
{
117
return [NSString stringWithFormat:@"%.1fGB", (double)bytes / (1024 * 1024 * 1024)];
118 
}
119 }
120
121
122 -(void)checkNetworkflow
123 {
124
struct ifaddrs *ifa_list = 0, *ifa;
125
if (getifaddrs(&ifa_list) == -1)
126 
{
127
return ;
128 
}
129
130
uint32_t iBytes
= 0;
131
uint32_t oBytes
= 0;
132
uint32_t allFlow
= 0;
133
uint32_t wifiIBytes = 0;
134
uint32_t wifiOBytes = 0;
135
uint32_t wifiFlow
= 0;
136
uint32_t wwanIBytes = 0;
137
uint32_t wwanOBytes = 0;
138
uint32_t wwanFlow
= 0;
139 //
struct timeval32 time;
140
141
for (ifa = ifa_list; ifa; ifa = ifa->ifa_next)
142 
{
143
if (AF_LINK != ifa->ifa_addr->sa_family)
144
continue;
145
146
if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING))
147
continue;
148
149
if (ifa->ifa_data == 0)
150
continue;
151
152
// network flow
153
if (strncmp(ifa->ifa_name, "lo", 2))
154 
{
155
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
156
iBytes += if_data->ifi_ibytes;
157
oBytes += if_data->ifi_obytes;
158
allFlow = iBytes + oBytes;
159 
}
160
161
//wifi flow
162
if (!strcmp(ifa->ifa_name, "en0"))
163 
{
164
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
165
wifiIBytes += if_data->ifi_ibytes;
166
wifiOBytes += if_data->ifi_obytes;
167
wifiFlow
= wifiIBytes + wifiOBytes;
168 
}
169
170
//3G and gprs flow
171
if (!strcmp(ifa->ifa_name, "pdp_ip0"))
172 
{
173
struct if_data *if_data = (struct if_data *)ifa->ifa_data;
174
wwanIBytes += if_data->ifi_ibytes;
175
wwanOBytes += if_data->ifi_obytes;
176
wwanFlow
= wwanIBytes + wwanOBytes;
177 
}
178 
}
179 
freeifaddrs(ifa_list);
180
181
182
if (_iBytes != 0) {
183
self.receivedNetworkSpeed = [[self bytesToAvaiUnit:iBytes - _iBytes] stringByAppendingString:@"/s"];
184
[[NSNotificationCenter defaultCenter] postNotificationName:kNetworkReceivedSpeedNotification object:@{@"received":self.receivedNetworkSpeed}];
185 
}
186
187
_iBytes = iBytes;
188
189
if (_oBytes != 0) {
190
self.sendNetworkSpeed = [[self bytesToAvaiUnit:oBytes - _oBytes] stringByAppendingString:@"/s"];
191
[[NSNotificationCenter defaultCenter] postNotificationName:kNetworkSendSpeedNotification object:@{@"send":self.sendNetworkSpeed}];
192 
}
193
_oBytes = oBytes;
194 }
195 @end

 

转载于:https://www.cnblogs.com/xubaoaichiyu/p/5819385.html

最后

以上就是复杂手链为你收集整理的iOS 直播-网速监控的全部内容,希望文章能够帮你解决iOS 直播-网速监控所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部