wxr
2024-12-03 cb9232b3ab413fae7bcc2b94abd70f18ca02b263
HDLLinPhoneSDK£¨OC£©/HDLLinPhoneSDK/HDLLinphoneManager.m
@@ -54,6 +54,8 @@
//#import "configManager.h"
#import "HDLLinphoneLog.h"
#import "HDLLinphoneTimerManager.h"
#define LINPHONE_LOGS_MAX_ENTRY 5000
@@ -68,6 +70,9 @@
#define kIAPReady @"IAPReady"                          // no data
#define IPAD (HDLLinphoneManager.runningOnIpad)
#define RESET_VIDEO_ENABLE_TIMER_NAME @"hdlLinphoneVideoEnableTimer" //重设视频开计时器名称
#define RESET_VIDEO_DISABLE_TIMER_NAME @"hdlLinphoneVideoDisableTimer" //重设视频关计时器名称
static LinphoneCore *theLinphoneCore = nil;
static HDLLinphoneManager *theLinphoneManager = nil;
@@ -164,6 +169,24 @@
                     {"BV16", 8000, "bv16_preference"},
                     {"CODEC2", 8000, "codec2_preference"},
                     {NULL, 0, Nil}};
-(void)disableVP8{
    const MSList *codecs =  linphone_core_get_video_codecs(LC);
    PayloadType *pt;
    const MSList *elem;
    for (elem = codecs; elem != NULL; elem = elem->next) {
        pt = (PayloadType *)elem->data;
        NSString *pref = [HDLLinphoneManager getPreferenceForCodec:pt->mime_type withRate:pt->clock_rate];
//        NSLog(@"编码pref:%@",pref);
        if([pref isEqualToString:@"vp8_preference"]){
            linphone_core_enable_payload_type(LC, pt, FALSE);
        }else{
            linphone_core_enable_payload_type(LC, pt, TRUE);
        }
    }
}
+ (NSString *)getPreferenceForCodec:(const char *)name withRate:(int)rate {
   int i;
@@ -544,6 +567,8 @@
    
    [self loadAssistantConfig:@"assistant_external_sip.rc"];
    
    [self disableVP8];
}
- (void)loadAssistantConfig:(NSString *)rcFilename {
@@ -564,6 +589,7 @@
//    linphone_core_enable_video_capture([HDLLinphoneManager getLc], false);
//    linphone_core_enable_video_preview([HDLLinphoneManager getLc], FALSE);
}
@@ -684,7 +710,7 @@
//    linphone_core_enable_mic(LC, false);
}
- (void)login:(NSString*)username password:(NSString*)pwd domain:(NSString*) domain{
- (void)login:(NSString*)username password:(NSString*)pwd domain:(NSString*) domain {
//    NSString *domain = [self findTextField:ViewElement_Domain].text;
//    NSString *username = username;
    NSString *displayName = @"";
@@ -708,10 +734,134 @@
    // set transport
    NSString *type = @"UDP";
//    NSString *type = @"TCP";
    linphone_proxy_config_set_route(
    linphone_proxy_config_set_routes(
                                    config,
                                    [NSString stringWithFormat:@"%s;transport=%s", domain.UTF8String, type.lowercaseString.UTF8String]
                                    .UTF8String);
    linphone_proxy_config_set_server_addr(
                                          config,
                                          [NSString stringWithFormat:@"%s;transport=%s", domain.UTF8String, type.lowercaseString.UTF8String]
                                          .UTF8String);
    linphone_proxy_config_enable_publish(config, FALSE);
    linphone_proxy_config_enable_register(config, TRUE);
    LinphoneAuthInfo *info =
        linphone_auth_info_new(linphone_address_get_username(addr), // username
                               NULL,                                // user id
                               pwd.UTF8String,                        // passwd
                               NULL,                                // ha1
                               linphone_address_get_domain(addr),   // realm - assumed to be domain
                               linphone_address_get_domain(addr)    // domain
                               );
    linphone_core_add_auth_info(LC, info);
    linphone_address_unref(addr);
    linphone_address_unref(tmpAddr);
    if (config) {
        [[HDLLinphoneManager instance] configurePushTokenForProxyConfig:config];
        if (linphone_core_add_proxy_config(LC, config) != -1) {
            linphone_core_set_default_proxy_config(LC, config);
            // reload address book to prepend proxy config domain to contacts' phone number
            // todo: STOP doing that!
//            [[LinphoneManager.instance fastAddressBook] fetchContactsInBackGroundThread];
//            [PhoneMainView.instance changeCurrentView:DialerView.compositeViewDescription];
            NSLog(@"登录成功了?");
        } else {
//          [self displayAssistantConfigurationError];
        }
    } else {
//      [self displayAssistantConfigurationError];
    }
}
- (void)tcpLogin:(NSString*)username password:(NSString*)pwd domain:(NSString*) domain {
    NSString *displayName = @"";
    LinphoneProxyConfig *config = linphone_core_create_proxy_config(LC);
    LinphoneAddress *addr = linphone_address_new(NULL);
    LinphoneAddress *tmpAddr = linphone_address_new([NSString stringWithFormat:@"sip:%@",domain].UTF8String);
    if (tmpAddr == nil) {
        return;
    }
    linphone_address_set_username(addr, username.UTF8String);
    linphone_address_set_port(addr, linphone_address_get_port(tmpAddr));
    linphone_address_set_domain(addr, linphone_address_get_domain(tmpAddr));
    if (displayName && ![displayName isEqualToString:@""]) {
        linphone_address_set_display_name(addr, displayName.UTF8String);
    }
    linphone_proxy_config_set_identity_address(config, addr);
    NSString *type = @"TCP";
//    linphone_proxy_config_set_routes(
//                                    config,
//                                    [NSString stringWithFormat:@"%s;transport=%s", domain.UTF8String, type.lowercaseString.UTF8String]
//                                    .UTF8String);
    // åˆ›å»ºä¸€ä¸ªè·¯ç”±åˆ—表
    bctbx_list_t *routes = NULL;
    // æ·»åŠ è·¯ç”±åˆ°åˆ—è¡¨ä¸­
    routes = bctbx_list_append(routes, (void *)tmpAddr);
    // è®¾ç½®è·¯ç”±
    linphone_proxy_config_set_routes(config, routes);
    linphone_proxy_config_set_server_addr(
                                          config,
                                          [NSString stringWithFormat:@"%s;transport=%s", domain.UTF8String, type.lowercaseString.UTF8String]
                                          .UTF8String);
    linphone_proxy_config_enable_publish(config, FALSE);
    linphone_proxy_config_enable_register(config, TRUE);
    LinphoneAuthInfo *info =
        linphone_auth_info_new(linphone_address_get_username(addr), // username
                               NULL,                                // user id
                               pwd.UTF8String,                        // passwd
                               NULL,                                // ha1
                               linphone_address_get_domain(addr),   // realm - assumed to be domain
                               linphone_address_get_domain(addr)    // domain
                               );
    linphone_core_add_auth_info(LC, info);
    linphone_address_unref(addr);
    linphone_address_unref(tmpAddr);
    if (config) {
        [[HDLLinphoneManager instance] configurePushTokenForProxyConfig:config];
        if (linphone_core_add_proxy_config(LC, config) != -1) {
            linphone_core_set_default_proxy_config(LC, config);
            NSLog(@"登录成功了?");
        } else {
        }
    } else {
    }
}
- (void)udpLogin:(NSString*)username password:(NSString*)pwd domain:(NSString*) domain {
    NSString *displayName = @"";
    LinphoneProxyConfig *config = linphone_core_create_proxy_config(LC);
    LinphoneAddress *addr = linphone_address_new(NULL);
    LinphoneAddress *tmpAddr = linphone_address_new([NSString stringWithFormat:@"sip:%@",domain].UTF8String);
    if (tmpAddr == nil) {
        return;
    }
    linphone_address_set_username(addr, username.UTF8String);
    linphone_address_set_port(addr, linphone_address_get_port(tmpAddr));
    linphone_address_set_domain(addr, linphone_address_get_domain(tmpAddr));
    if (displayName && ![displayName isEqualToString:@""]) {
        linphone_address_set_display_name(addr, displayName.UTF8String);
    }
    linphone_proxy_config_set_identity_address(config, addr);
    NSString *type = @"UDP";
//    linphone_proxy_config_set_routes(
//                                    config,
//                                    [NSString stringWithFormat:@"%s;transport=%s", domain.UTF8String, type.lowercaseString.UTF8String]
//                                    .UTF8String);
    linphone_proxy_config_set_server_addr(
                                          config,
                                          [NSString stringWithFormat:@"%s;transport=%s", domain.UTF8String, type.lowercaseString.UTF8String]
@@ -832,7 +982,7 @@
- (void)onCall:(LinphoneCall *)call StateChanged:(LinphoneCallState)state withMessage:(const char *)message {
    NSLog(@"呼叫状态:%u",state);
    NSLog(@"呼叫状态:%u,信息:%s",state,message);
    
    HDLLinPhoneSDK.instance.IsIncomingReceivedCallState=false;
   // Handling wrapper
@@ -1153,12 +1303,22 @@
         speaker_already_enabled = TRUE;
      }
   }
    if( state == LinphoneCallConnected ){
        NSLog(@"连接了");
//        [self enableVideoPlay:TRUE];
    }
   if (state == LinphoneCallStreamsRunning) {
      if (_speakerBeforePause) {
         _speakerBeforePause = FALSE;
         [self setSpeakerEnabled:TRUE];
         speaker_already_enabled = TRUE;
      }
        if (!self.isResettingVideoEnable&&self.deviceType==HDLLPType_HDLSR) {
            self.isResettingVideoEnable=YES;
            [self resetVideoEnable];
        }
   }
   if (state == LinphoneCallConnected && !mCallCenter) {
      /*only register CT call center CB for connected call*/
@@ -1179,6 +1339,31 @@
    userInfo:dict];
}
/*重新拉取视频流(解决自研可视对讲偶尔出现视频流拉取很慢的问题)
 */
-(void)resetVideoEnable{
    NSLog(@"重置视频开关");
    __weak typeof(self) weakSelf = self;
    [self enableVideoPlay:TRUE];
//    [self enableVideoPlay:FALSE];
//    [[HDLLinphoneTimerManager sharedInstance] scheduleTimerWithInterval:0.5 timerName:RESET_VIDEO_ENABLE_TIMER_NAME count:^(double count) {
//
//    } finished:^{
//        NSLog(@"打开视频");
//        [weakSelf enableVideoPlay:TRUE];
//    }];
}
/*是否允许视频播放
 */
-(void)enableVideoPlay:(bool_t)enable{
    LinphoneCall *call = linphone_core_get_current_call(LC);
    LinphoneCallParams *call_params = linphone_core_create_call_params(LC,call);
    linphone_call_params_enable_video(call_params, enable);
    linphone_call_update(call, call_params);
    linphone_call_params_unref(call_params);
}
static void linphone_iphone_call_state(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState state,
                   const char *message) {
   [(__bridge HDLLinphoneManager *)linphone_core_cbs_get_user_data(linphone_core_get_current_callbacks(lc)) onCall:call StateChanged:state withMessage:message];
@@ -1196,7 +1381,7 @@
}
- (void)onGlobalStateChanged:(LinphoneGlobalState)state withMessage:(const char *)message {
//   LOGI(@"onGlobalStateChanged: %d (message: %s)", state, message);
   LOGI(@"onGlobalStateChanged: %d (message: %s)", state, message);
   NSDictionary *dict = [NSDictionary
               dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:state], @"state",