iOS 直播-網速監控,ios直播監控

來源:互聯網
上載者:User

iOS 直播-網速監控,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 : NSObject15 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 @end27 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)bytes102 {103     if(bytes < 10)104     {105         return [NSString stringWithFormat:@"0KB"];106     }107     else if(bytes >= 10 && bytes < 1024 * 1024) // KB108     {109         return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];110     }111     else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024)   // MB112     {113         return [NSString stringWithFormat:@"%.1fMB", (double)bytes / (1024 * 1024)];114     }115     else    // GB116     {117         return [NSString stringWithFormat:@"%.1fGB", (double)bytes / (1024 * 1024 * 1024)];118     }119 }120 121 122 -(void)checkNetworkflow123 {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 flow153         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 flow162         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 flow171         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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.