问题描述:
会议拉人与会的时候,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