diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c index dcb6580b54..69c420006f 100644 --- a/src/mod/applications/mod_conference/mod_conference.c +++ b/src/mod/applications/mod_conference/mod_conference.c @@ -1666,9 +1666,9 @@ static void write_canvas_image_to_codec_group(conference_obj_t *conference, code continue; } - if (need_refresh) { - switch_core_session_request_video_refresh(imember->session); - } + //if (need_refresh) { + // switch_core_session_request_video_refresh(imember->session); + //} //switch_core_session_write_encoded_video_frame(imember->session, frame, 0, 0); switch_set_flag(frame, SFF_ENCODED); @@ -1754,9 +1754,11 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_write_thread_run(switch_ switch_core_media_gen_key_frame(member->session); switch_core_session_request_video_refresh(member->session); } - loops++; + loops++; + frame = (switch_frame_t *) pop; + if (switch_test_flag(frame, SFF_ENCODED)) { switch_core_session_write_encoded_video_frame(member->session, frame, 0, 0); } else { @@ -1874,6 +1876,7 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread switch_image_t *write_img = NULL, *file_img = NULL; uint32_t timestamp = 0, avatar_layers = 0; video_layout_t *vlayout = get_layout(conference); + switch_time_t last_refresh_req = 0; if (!vlayout) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot find layout\n"); @@ -1948,9 +1951,13 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread if (switch_test_flag(conference, CFLAG_MINIMIZE_VIDEO_ENCODING) && switch_channel_test_flag(imember->channel, CF_VIDEO)) { if (switch_channel_test_flag(imember->channel, CF_VIDEO_REFRESH_REQ)) { switch_channel_clear_flag(imember->channel, CF_VIDEO_REFRESH_REQ); - need_refresh = SWITCH_TRUE; + + if (!last_refresh_req || (now - last_refresh_req) > 1000) { + need_refresh = SWITCH_TRUE; + last_refresh_req = now; + } } - + if (imember->video_codec_index < 0 && (check_codec = switch_core_session_get_video_write_codec(imember->session))) { for (i = 0; write_codecs[i] && switch_core_codec_ready(&write_codecs[i]->codec) && i < MAX_MUX_CODECS; i++) { if (check_codec->implementation->codec_id == write_codecs[i]->codec.implementation->codec_id) { @@ -2021,6 +2028,11 @@ static void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread if (flushed && imember->blanks) { switch_img_free(&imember->avatar_png_img); + + if (layer) { + layer->is_avatar = 0; + } + imember->blanks = 0; switch_core_session_request_video_refresh(imember->session); switch_channel_video_sync(imember->channel); diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 6e59403bf0..678f3d0385 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -1295,21 +1295,24 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi #if 1 case SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ: { - //const char *pl = "\n\n\n\n\n\n\n\n"; - const char *pl = "\n\n"; - time_t now = switch_epoch_time_now(NULL); + const char *ua = switch_channel_get_variable(tech_pvt->channel, "sip_user_agent"); + if (ua && switch_stristr("polycom", ua)) { - if (!tech_pvt->last_vid_info || (now - tech_pvt->last_vid_info) > 1) { + //const char *pl = "\n\n\n\n\n\n\n\n"; + const char *pl = "\n\n"; + time_t now = switch_epoch_time_now(NULL); - tech_pvt->last_vid_info = now; - - if (!zstr(msg->string_arg)) { - pl = msg->string_arg; + if (!tech_pvt->last_vid_info || (now - tech_pvt->last_vid_info) > 1) { + + tech_pvt->last_vid_info = now; + + if (!zstr(msg->string_arg)) { + pl = msg->string_arg; + } + + nua_info(tech_pvt->nh, SIPTAG_CONTENT_TYPE_STR("application/media_control+xml"), SIPTAG_PAYLOAD_STR(pl), TAG_END()); } - - nua_info(tech_pvt->nh, SIPTAG_CONTENT_TYPE_STR("application/media_control+xml"), SIPTAG_PAYLOAD_STR(pl), TAG_END()); } - } break; #endif