Pārlūkot izejas kodu

1.webrtc数据显示 测试用

huangxiaodong 9 mēneši atpakaļ
vecāks
revīzija
cf3284e1cd

+ 240 - 1
创维盒子/双子星云手机/webRtc/webRtcPlayerViewController.m

@@ -16,6 +16,15 @@
 @interface webRtcPlayerViewController ()<MediaStreamClientEventsDelegate>
 {
     BOOL outputVolumeKVO;/*标记声音监听通知*/
+    
+    double lastTimestamp;/*最后一帧时间戳*/
+    NSNumber *lastBytesReceived;/*最后一帧数据量*/
+    UILabel* netWorkInfoLabel;//网络延时等信息  正式环境屏蔽
+    
+    //记录上次 线性增长接收包数
+    long lasPacketsReceived;
+    //记录上次 总丢包数据
+    long lastAlllostData;
 }
 @property (nonatomic, copy)   NSTimer      *playerSecondTimer; // 定时器-控制按钮
 @property (nonatomic, assign) RTCIceConnectionState linkState;
@@ -155,6 +164,8 @@
                           token:@"vclusters"];
     
     HLog(@"result:%ld",result)
+    
+    [_mediaStream setShouldGetStats:YES];
 }
 
 #pragma mark 重连
@@ -189,6 +200,22 @@
 #pragma mark 初始化其他UI
 - (void)initBaseUIFun
 {
+    if(netWorkInfoLabel){
+        [netWorkInfoLabel removeFromSuperview];
+        netWorkInfoLabel = nil;
+    }
+    netWorkInfoLabel = [[UILabel alloc] init];
+    [netWorkInfoLabel setTextColor:[UIColor greenColor]];
+    [netWorkInfoLabel setBackgroundColor:HW000000Color60];
+    [netWorkInfoLabel setFont:[UIFont systemFontOfSize:17]];
+    [netWorkInfoLabel setNumberOfLines:0];
+    [self.view addSubview:netWorkInfoLabel];
+    
+    [netWorkInfoLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(80);
+        make.left.mas_equalTo(20);
+    }];
+    
     if(_bottomContrView){
         [_bottomContrView removeFromSuperview];
         _bottomContrView = nil;
@@ -861,7 +888,219 @@
 }
 
 -(void)didGetStats:(NSString*)peerName stats:(RTC_OBJC_TYPE(RTCStatisticsReport) *)stats {
-    HLog(@"推拉流 stats:%@",stats);
+    NSString *selectedCandidatePairId = nil;
+    NSString *localCandidateId  = nil;
+    NSString *remoteCandidateId = nil;
+    /*延时数据*/
+    NSNumber *currentRoundTripTime = nil;
+    
+    //线性增长接收包数
+    long packetsReceived = 0;
+   
+    //视频丢包数据
+    long videolostData = 0;
+    //音频丢包数据
+    long audiolostData = 0;
+    //总丢包数据
+    long alllostData = 0;
+    
+    //每秒帧数 ----界面展示的帧率
+    NSInteger framesPerSecond = 0;
+    
+    //计算传输速度
+    long preReceive = 0;
+    
+    KWeakSelf
+    for (NSString *key in [stats.statistics allKeys]) {
+        RTCStatistics *rtcStatistics = [stats.statistics objectForKey:key];
+        //HLog(@"hxd11111---->%@",rtcStatistics.type);
+        
+        if ([rtcStatistics.type isEqualToString:@"transport"]) {
+            //HLog(@"传输数据---->%@",rtcStatistics.values);
+            double timestamp     = rtcStatistics.timestamp_us;
+            NSNumber *bytesReceived = [rtcStatistics.values objectForKey:@"bytesReceived"];
+            
+            NSNumber *packetsReceivedNumber = [rtcStatistics.values objectForKey:@"packetsReceived"];
+            packetsReceived = [packetsReceivedNumber longValue];
+            
+            if (lastTimestamp > 0) {
+                long diffReceive = [bytesReceived longValue] - [lastBytesReceived longValue];
+                double diffTime    = timestamp - lastTimestamp;
+                
+                preReceive = (diffReceive / diffTime) * 1000000;
+                
+                HLog(@"传输数据速度---->%ld",preReceive);
+                
+//                mainBlock((^{
+//                    if (self->mPlayerView.upControlView.hidden == NO){
+//                        NSString *str = [NSString stringWithFormat:@"清晰度 %ldk/s",preReceive/1024];
+//                        NSMutableAttributedString *underAttr = [[NSMutableAttributedString alloc] initWithString:str attributes:@{NSForegroundColorAttributeName:[UIColor hwColor:@"#FFFFFF"]}];
+//                        [underAttr addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12]} range:NSMakeRange(0, str.length - 2)];
+//                        [underAttr addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10]} range:NSMakeRange(str.length - 2,2)];
+//                        [self->mPlayerView.upControlView.articulationBtn setAttributedTitle:underAttr forState:(UIControlStateNormal)];
+//                    }else{
+//                        NSString *str = [NSString stringWithFormat:@"%ldk/s",preReceive/1024];
+//                        NSMutableAttributedString *underAttr = [[NSMutableAttributedString alloc] initWithString:str attributes:@{NSForegroundColorAttributeName:[UIColor hwColor:@"#FFFFFF"]}];
+//                        [underAttr addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12]} range:NSMakeRange(0, str.length - 2)];
+//                        [underAttr addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:10]} range:NSMakeRange(str.length - 2,2)];
+//                        [self->mPlayerView.controlBtn setAttributedTitle:underAttr forState:(UIControlStateNormal)];
+//                    }
+//                }));
+            }else{
+                lastTimestamp = timestamp;
+                lastBytesReceived = bytesReceived;
+            }
+            
+            selectedCandidatePairId = [rtcStatistics.values objectForKey:@"selectedCandidatePairId"];
+            //HLog(@"三网数据--selectedCandidatePairId-->%@",selectedCandidatePairId);
+        }
+        
+        /*丢包数据*/
+        if ([rtcStatistics.type isEqualToString:@"inbound-rtp"]) {
+            NSString *kind = [rtcStatistics.values objectForKey:@"kind"];
+            
+            if([kind isEqualToString:@"video"]){
+                NSNumber*videolostDataNumber = [rtcStatistics.values objectForKey:@"packetsLost"];
+                videolostData = [videolostDataNumber longValue];
+                
+                NSNumber*framesPerSecondNumber = [rtcStatistics.values objectForKey:@"framesPerSecond"];
+                framesPerSecond = [framesPerSecondNumber integerValue];
+            }
+            else if([kind isEqualToString:@"audio"]){
+                NSNumber*audiolostDataNumber = [rtcStatistics.values objectForKey:@"packetsLost"];
+                audiolostData = [audiolostDataNumber longValue];
+            }
+        
+        }
+        
+        for (NSString *keyin in [rtcStatistics.values allKeys]) {
+            if ([keyin isEqualToString:@"currentRoundTripTime"]){
+                /*延时数据*/
+                currentRoundTripTime = [rtcStatistics.values objectForKey:@"currentRoundTripTime"];
+                  
+                //[self updateAutoRateAndNetWorkStatesWithDelatyMS:(NSInteger)currentRoundTripTime.floatValue*1000];
+                break;
+            }
+        }
+    }
+
+    //netWorkInfoLabel 网络信息 测试用
+    
+    if (selectedCandidatePairId) {
+        for (NSString *key in [stats.statistics allKeys]) {
+            RTCStatistics *rtcStatistics = [stats.statistics objectForKey:key];
+            if ([rtcStatistics.type isEqualToString:@"candidate-pair"]){
+                NSString *tempselectedCandidatePairId = rtcStatistics.id;
+                if ([tempselectedCandidatePairId isEqualToString:selectedCandidatePairId]) {
+                    localCandidateId  = [rtcStatistics.values objectForKey:@"localCandidateId"];
+                    remoteCandidateId = [rtcStatistics.values objectForKey:@"remoteCandidateId"];
+
+                    HLog(@"三网数据--localCandidateId-->%@",localCandidateId);
+                    HLog(@"三网数据--remoteCandidateId-->%@",remoteCandidateId);
+                }
+            }
+        }
+    }
+
+    NSString *remoteCandidateStr = nil;
+    NSString *localCandidateStr  = nil;
+    if (localCandidateId && remoteCandidateId) {
+        for (NSString *key in [stats.statistics allKeys]) {
+            RTCStatistics *rtcStatistics = [stats.statistics objectForKey:key];
+            if ([rtcStatistics.type isEqualToString:@"local-candidate"]){
+                NSString *templocalCandidateId = rtcStatistics.id;
+                if ([templocalCandidateId isEqualToString:localCandidateId]) {
+                    HLog(@"三网数据--localCandidateIdInfo-->%@",rtcStatistics.values);
+                    localCandidateStr = @"本地\n";
+                    NSString *candidateType = [rtcStatistics.values objectForKey:@"candidateType"];
+                    if (candidateType) {
+                        localCandidateStr = [localCandidateStr stringByAppendingString:[NSString stringWithFormat:@"candidateType:%@",candidateType]];
+                        localCandidateStr = [localCandidateStr stringByAppendingString:@"\n"];
+                    }
+                    NSString *address = [rtcStatistics.values objectForKey:@"address"];
+                    if (address) {
+                        localCandidateStr = [localCandidateStr stringByAppendingString:[NSString stringWithFormat:@"address:%@",address]];
+                        localCandidateStr = [localCandidateStr stringByAppendingString:@"\n"];
+                    }
+                    NSString *ip = [rtcStatistics.values objectForKey:@"ip"];
+                    if (ip) {
+                        localCandidateStr = [localCandidateStr stringByAppendingString:[NSString stringWithFormat:@"ip:%@",ip]];
+                        localCandidateStr = [localCandidateStr stringByAppendingString:@"\n"];
+                    }
+                    NSString *relatedAddress = [rtcStatistics.values objectForKey:@"relatedAddress"];
+                    if (relatedAddress) {
+                        localCandidateStr = [localCandidateStr stringByAppendingString:[NSString stringWithFormat:@"relatedAddress:%@",relatedAddress]];
+                        localCandidateStr = [localCandidateStr stringByAppendingString:@"\n"];
+                    }
+                }
+            }else if ([rtcStatistics.type isEqualToString:@"remote-candidate"]){
+                NSString *tempRemoteCandidateId = rtcStatistics.id;
+                if ([tempRemoteCandidateId isEqualToString:remoteCandidateId]) {
+                    HLog(@"三网数据--remoteCandidateIdInfo-->%@",rtcStatistics.values);
+                    remoteCandidateStr = @"远端\n";
+                    NSString *candidateType = [rtcStatistics.values objectForKey:@"candidateType"];
+                    if (candidateType) {
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:[NSString stringWithFormat:@"candidateType:%@",candidateType]];
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:@"\n"];
+                    }
+                    NSString *address = [rtcStatistics.values objectForKey:@"address"];
+                    if (address) {
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:[NSString stringWithFormat:@"address:%@",address]];
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:@"\n"];
+                    }
+                    NSString *ip = [rtcStatistics.values objectForKey:@"ip"];
+                    if (ip) {
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:[NSString stringWithFormat:@"ip:%@",ip]];
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:@"\n"];
+                    }
+                    NSString *relatedAddress = [rtcStatistics.values objectForKey:@"relatedAddress"];
+                    if (relatedAddress) {
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:[NSString stringWithFormat:@"relatedAddress:%@",relatedAddress]];
+                        remoteCandidateStr = [remoteCandidateStr stringByAppendingString:@"\n"];
+                    }
+                }
+            }
+        }
+    }
+
+    NSString *showStr = @"";
+    if (localCandidateStr) {
+        showStr = [showStr stringByAppendingString:localCandidateStr];
+    }
+    if (remoteCandidateStr) {
+        showStr = [showStr stringByAppendingString:remoteCandidateStr];
+    }
+    
+    //网络延迟, 丢包率,FPS,网速 分辨率   流量
+    //延时数据
+    NSString*currentRoundTripTimeStr = [[NSString alloc] initWithFormat:@"延时:%ldms\n",(NSInteger)(currentRoundTripTime.floatValue*1000)];
+    showStr = [showStr stringByAppendingString:currentRoundTripTimeStr];
+    
+    //计算上次报道到这一次的丢包率---------界面展示百分比丢包率
+    long allPacketsReceived = packetsReceived - lasPacketsReceived;
+    alllostData = audiolostData + videolostData;
+    
+    NSInteger lostRate = ((alllostData - lastAlllostData) *1.0 / (allPacketsReceived + (alllostData - lastAlllostData))) *100;
+      //记录上一次丢包数
+    lastAlllostData = alllostData;
+      //记录上一次接收包数
+    lasPacketsReceived = packetsReceived;
+    
+    NSString*lostDataStr = [[NSString alloc] initWithFormat:@"丢包率:(%ld/%ld) %ld%%\n",alllostData - lastAlllostData,allPacketsReceived + alllostData - lastAlllostData,lostRate];
+    showStr = [showStr stringByAppendingString:lostDataStr];
+    
+    //FPS
+    NSString*FPSStr = [[NSString alloc] initWithFormat:@"FPS:%ld\n",framesPerSecond];
+    showStr = [showStr stringByAppendingString:FPSStr];
+    
+    //网速 传输数据速度
+    NSString *netDataSpeedStr = [NSString stringWithFormat:@"传输数据速度:%ldk/s\n",preReceive/1024];
+    showStr = [showStr stringByAppendingString:netDataSpeedStr];
+    
+    mainBlock(^{
+        [self->netWorkInfoLabel setText:showStr];
+    });
+    
 }
 
 #pragma mark 收到的webrtc消息处理