Freeswitch拉人与会时不带视频进行呼叫

问题描述:

会议拉人与会的时候,Freeswitch会把所有支持的codec都带上,但如果这个是语音会议,就没有必要携带视频的编码,这个如何实现呢?


问题解决:

创建拉人三方的channel时,设置该通道支持的codec。



修改:

在mod_conference.c的conference_outcall方法中,发起呼叫前,设置为会议呼叫:

    if (var_event) {
             switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM,  "conference_caller_flag", "1");
	} else {
		if (switch_event_create_plain(&ovars, SWITCH_EVENT_CHANNEL_DATA) != SWITCH_STATUS_SUCCESS) {
			return status;
		}
        var_event = ovars;
        switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM,  "conference_caller_flag", "1");
	}

src\switch_ivr_originate.c中的switch_ivr_originate方法,如果设置了是会议呼叫flag,则设置absolute_codec_string为音频codec。

					if (a_session) {
						switch_channel_t *channel = switch_core_session_get_channel(a_session);
						char *val =
							switch_core_session_sprintf(a_session, "%s;%s;%s",
														
														switch_core_session_get_uuid(oglobals.originate_status[i].peer_session),
														switch_str_nil(switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "callee_id_name")),
														switch_str_nil(switch_channel_get_variable(oglobals.originate_status[i].peer_channel, "callee_id_number")));


						switch_channel_set_variable(oglobals.originate_status[i].peer_channel, "originating_leg_uuid", switch_core_session_get_uuid(a_session));

						switch_channel_add_variable_var_check(channel, "originated_legs", val, SWITCH_FALSE, SWITCH_STACK_PUSH);

					}else{
                         //如果是会议呼叫,设置codec为音频
                          if ((var_val = switch_event_get_header(var_event, "conference_caller_flag"))) {
                              int32_t tmp;
                                    		tmp = atoi(var_val);
                                            
                                    	      switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
                                    				"Conference call flag value: %s   \n", var_val);
                                    		if (tmp > 0) {
						                      switch_channel_set_variable(oglobals.originate_status[i].peer_channel,
						                       "absolute_codec_string", "OPUS,G722,PCMU,PCMA");
                                    		}
                                    	}

                                  }


呱牛笔记




-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com


本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com

请先登录后发表评论
  • 最新评论
  • 总共0条评论