Skip to content

Commit 9f1c89b

Browse files
committed
FS-8545 #resolve [Improve controls for screen share]
1 parent 67491b1 commit 9f1c89b

File tree

8 files changed

+72
-34
lines changed

8 files changed

+72
-34
lines changed

htdocs/portal/assets/bootstrap/css/bootstrap.css

+3-4
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ textarea {
223223

224224
body {
225225
margin: 0;
226-
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
226+
font-family: verdana, "Helvetica Neue", Helvetica, Arial, sans-serif;
227227
font-size: 14px;
228228
line-height: 20px;
229229
color: #333333;
@@ -1065,7 +1065,7 @@ input,
10651065
button,
10661066
select,
10671067
textarea {
1068-
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1068+
font-family: verdana, "Helvetica Neue", Helvetica, Arial, sans-serif;
10691069
}
10701070

10711071
label {
@@ -4510,7 +4510,7 @@ input[type="submit"].btn.btn-mini {
45104510
.navbar-search .search-query {
45114511
padding: 4px 14px;
45124512
margin-bottom: 0;
4513-
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
4513+
font-family: verdana, "Helvetica Neue", Helvetica, Arial, sans-serif;
45144514
font-size: 13px;
45154515
font-weight: normal;
45164516
line-height: 1;
@@ -5624,7 +5624,6 @@ a.thumbnail:focus {
56245624
display: inline-block;
56255625
padding: 2px 4px;
56265626
font-size: 11.844px;
5627-
font-weight: bold;
56285627
line-height: 14px;
56295628
color: #ffffff;
56305629
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);

html5/verto/verto_communicator/src/css/verto.css

-1
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,6 @@ body .modal-body .btn-group .btn.active {
918918

919919
.members-badges {
920920
font-size: 10px;
921-
text-transform: uppercase;
922921
margin-top: -2px;
923922
}
924923

html5/verto/verto_communicator/src/partials/chat.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ <h4 class="chat-members-name">
2828

2929
<div class="members-badges">
3030
<div ng-if="member.status.video.floor" class="label badge-floor" ng-class="{'label-danger': member.status.video.floorLocked, 'label-info': !member.status.video.floorLocked}"><i class="mdi mdi-action-https lock-floor" ng-if="member.status.video.floorLocked"></i> <span>Floor</span></div>
31-
<div ng-if="member.status.video.reservationID == 'presenter'" class="label label-warning">Presenter</div>
31+
<div ng-if="member.status.video.reservationID == 'presenter'" class="label label-info">Presenter</div>
32+
<div ng-if="member.status.video.screenShare" class="label label-info">Screen Share</div>
3233
</div>
3334
</h4>
3435

html5/verto/verto_communicator/src/vertoService/services/vertoService.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -471,9 +471,11 @@ vertoService.service('verto', ['$rootScope', '$cookieStore', '$location', 'stora
471471
if (params.pvtData) {
472472
switch (params.pvtData.action) {
473473
case "conference-liveArray-join":
474-
console.log("conference-liveArray-join");
475-
stopConference();
476-
startConference(v, dialog, params.pvtData);
474+
if (!params.pvtData.secondScreen && !params.pvtData.screenShare && !params.pvtData.videoOnly) {
475+
console.log("conference-liveArray-join");
476+
stopConference();
477+
startConference(v, dialog, params.pvtData);
478+
}
477479
break;
478480
case "conference-liveArray-part":
479481
console.log("conference-liveArray-part");

src/mod/applications/mod_conference/conference_event.c

+9-4
Original file line numberDiff line numberDiff line change
@@ -378,13 +378,10 @@ void conference_event_la_command_handler(switch_live_array_t *la, const char *cm
378378
void conference_event_adv_la(conference_obj_t *conference, conference_member_t *member, switch_bool_t join)
379379
{
380380

381-
//if (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY) {
382381
switch_channel_set_flag(member->channel, CF_VIDEO_REFRESH_REQ);
383382
switch_core_media_gen_key_frame(member->session);
384-
//}
385383

386-
if (conference && conference->la && member->session &&
387-
!switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) {
384+
if (conference && conference->la && member->session) {
388385
cJSON *msg, *data;
389386
const char *uuid = switch_core_session_get_uuid(member->session);
390387
const char *cookie = switch_channel_get_variable(member->channel, "event_channel_cookie");
@@ -412,6 +409,14 @@ void conference_event_adv_la(conference_obj_t *conference, conference_member_t *
412409
cJSON_AddItemToObject(data, "secondScreen", cJSON_CreateTrue());
413410
}
414411

412+
if (switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) {
413+
cJSON_AddItemToObject(data, "videoOnly", cJSON_CreateTrue());
414+
}
415+
416+
if (switch_true(switch_channel_get_variable_dup(member->channel, "video_screen_share", SWITCH_FALSE, -1))) {
417+
cJSON_AddItemToObject(data, "screenShare", cJSON_CreateTrue());
418+
}
419+
415420
if (conference_utils_member_test_flag(member, MFLAG_MOD)) {
416421
cJSON_AddItemToObject(data, "modChannel", cJSON_CreateString(conference->mod_event_channel));
417422
}

src/mod/applications/mod_conference/conference_member.c

+18-6
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,10 @@ void conference_member_update_status_field(conference_member_t *member)
150150
char *str, *vstr = "", display[128] = "", *json_display = NULL;
151151
cJSON *json, *audio, *video;
152152

153-
if (!member->conference->la || !member->json ||
154-
!member->status_field || switch_channel_test_flag(member->channel, CF_VIDEO_ONLY) || conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
153+
if (!member->conference->la || !member->json || !member->status_field || conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
155154
return;
156155
}
157-
156+
158157
switch_live_array_lock(member->conference->la);
159158

160159
if (conference_utils_test_flag(member->conference, CFLAG_JSON_STATUS)) {
@@ -169,6 +168,19 @@ void conference_member_update_status_field(conference_member_t *member)
169168

170169
if (switch_channel_test_flag(member->channel, CF_VIDEO) || member->avatar_png_img) {
171170
video = cJSON_CreateObject();
171+
172+
if (conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) &&
173+
member->video_layer_id > -1 && switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) != SWITCH_MEDIA_FLOW_SENDONLY) {
174+
cJSON_AddItemToObject(video, "visible", cJSON_CreateTrue());
175+
} else {
176+
cJSON_AddItemToObject(video, "visible", cJSON_CreateFalse());
177+
}
178+
179+
cJSON_AddItemToObject(video, "videoOnly", cJSON_CreateBool(switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)));
180+
if (switch_true(switch_channel_get_variable_dup(member->channel, "video_screen_share", SWITCH_FALSE, -1))) {
181+
cJSON_AddItemToObject(video, "screenShare", cJSON_CreateTrue());
182+
}
183+
172184
cJSON_AddItemToObject(video, "avatarPresented", cJSON_CreateBool(!!member->avatar_png_img));
173185
cJSON_AddItemToObject(video, "mediaFlow", cJSON_CreateString(switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY ? "sendOnly" : "sendRecv"));
174186
cJSON_AddItemToObject(video, "muted", cJSON_CreateBool(!conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN)));
@@ -914,7 +926,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
914926
switch_mutex_unlock(member->audio_out_mutex);
915927
switch_mutex_unlock(member->audio_in_mutex);
916928

917-
if (conference->la && member->channel && !switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) {
929+
if (conference->la && member->channel) {
918930
if (!conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
919931
cJSON *dvars;
920932
switch_event_t *var_event;
@@ -929,7 +941,6 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
929941
switch_channel_get_variable(member->channel, "original_read_codec"),
930942
switch_channel_get_variable(member->channel, "original_read_rate")
931943
));
932-
933944
member->status_field = cJSON_CreateString("");
934945
cJSON_AddItemToArray(member->json, member->status_field);
935946

@@ -964,6 +975,7 @@ switch_status_t conference_member_add(conference_obj_t *conference, conference_m
964975
if (!conference_utils_member_test_flag(member, MFLAG_SECOND_SCREEN)) {
965976
switch_live_array_add(conference->la, switch_core_session_get_uuid(member->session), -1, &member->json, SWITCH_FALSE);
966977
}
978+
967979
}
968980

969981

@@ -1224,7 +1236,7 @@ switch_status_t conference_member_del(conference_obj_t *conference, conference_m
12241236
switch_mutex_unlock(member->audio_in_mutex);
12251237

12261238

1227-
if (conference->la && member->session && !switch_channel_test_flag(member->channel, CF_VIDEO_ONLY)) {
1239+
if (conference->la && member->session) {
12281240
switch_live_array_del(conference->la, switch_core_session_get_uuid(member->session));
12291241
//switch_live_array_clear_alias(conference->la, switch_core_session_get_uuid(member->session), "conference");
12301242
conference_event_adv_la(conference, member, SWITCH_FALSE);

src/mod/applications/mod_conference/conference_video.c

+34-15
Original file line numberDiff line numberDiff line change
@@ -617,11 +617,9 @@ void conference_video_detach_video_layer(conference_member_t *member)
617617
mcu_layer_t *layer = NULL;
618618
mcu_canvas_t *canvas = NULL;
619619

620-
if (member->canvas_id < 0) return;
620+
if (member->canvas_id < 0 || member->video_layer_id < 0) return;
621621

622-
canvas = conference_video_get_canvas_locked(member);
623-
624-
if (!canvas || member->video_layer_id < 0) {
622+
if (!(canvas = conference_video_get_canvas_locked(member))) {
625623
return;
626624
}
627625

@@ -894,10 +892,12 @@ switch_status_t conference_video_attach_video_layer(conference_member_t *member,
894892

895893

896894
if (!switch_channel_test_flag(channel, CF_VIDEO) && !member->avatar_png_img) {
895+
printf("WTF %d\n", __LINE__);
897896
return SWITCH_STATUS_FALSE;
898897
}
899898

900899
if (switch_core_session_media_flow(member->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_SENDONLY && !member->avatar_png_img) {
900+
printf("WTF %d\n", __LINE__);
901901
return SWITCH_STATUS_FALSE;
902902
}
903903

@@ -908,26 +908,31 @@ switch_status_t conference_video_attach_video_layer(conference_member_t *member,
908908
layer->tagged = 0;
909909

910910
if (layer->fnode || layer->geometry.fileonly) {
911+
printf("WTF %d\n", __LINE__);
911912
switch_goto_status(SWITCH_STATUS_FALSE, end);
912913
}
913914

914915
if (layer->geometry.flooronly && member->id != member->conference->video_floor_holder) {
916+
printf("WTF %d\n", __LINE__);
915917
switch_goto_status(SWITCH_STATUS_FALSE, end);
916918
}
917919

918920
if (layer->geometry.res_id) {
919921
if (!member->video_reservation_id || strcmp(layer->geometry.res_id, member->video_reservation_id)) {
922+
printf("WTF %d\n", __LINE__);
920923
switch_goto_status(SWITCH_STATUS_FALSE, end);
921924
}
922925
}
923926

924927
if (layer->member_id && layer->member_id == (int)member->id) {
925928
member->video_layer_id = idx;
929+
printf("WTF %d\n", __LINE__);
926930
switch_goto_status(SWITCH_STATUS_BREAK, end);
927931
}
928932

929933
if (layer->geometry.res_id || member->video_reservation_id) {
930934
if (!layer->geometry.res_id || !member->video_reservation_id || strcmp(layer->geometry.res_id, member->video_reservation_id)) {
935+
printf("WTF %d\n", __LINE__);
931936
switch_goto_status(SWITCH_STATUS_FALSE, end);
932937
}
933938
}
@@ -1267,7 +1272,6 @@ void conference_video_write_canvas_image_to_codec_group(conference_obj_t *confer
12671272
}
12681273

12691274
if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
1270-
switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_RECVONLY ||
12711275
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
12721276
continue;
12731277
}
@@ -1276,6 +1280,10 @@ void conference_video_write_canvas_image_to_codec_group(conference_obj_t *confer
12761280
switch_core_session_request_video_refresh(imember->session);
12771281
}
12781282

1283+
if (switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_RECVONLY) {
1284+
continue;
1285+
}
1286+
12791287
//switch_core_session_write_encoded_video_frame(imember->session, frame, 0, 0);
12801288
switch_set_flag(frame, SFF_ENCODED);
12811289

@@ -2184,7 +2192,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
21842192
}
21852193

21862194
//VIDFLOOR
2187-
if (conference->canvas_count == 1 && canvas->layout_floor_id > -1 && imember->id == conference->video_floor_holder &&
2195+
if (canvas->layout_floor_id > -1 && imember->id == conference->video_floor_holder &&
21882196
imember->video_layer_id != canvas->layout_floor_id) {
21892197
conference_video_attach_video_layer(imember, canvas, canvas->layout_floor_id);
21902198
}
@@ -2681,7 +2689,6 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
26812689
}
26822690

26832691
if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
2684-
switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_RECVONLY ||
26852692
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
26862693
continue;
26872694
}
@@ -2690,6 +2697,11 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
26902697
switch_core_session_request_video_refresh(imember->session);
26912698
}
26922699

2700+
if (switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_RECVONLY) {
2701+
continue;
2702+
}
2703+
2704+
26932705
if (send_keyframe) {
26942706
switch_core_media_gen_key_frame(imember->session);
26952707
}
@@ -3024,10 +3036,7 @@ void *SWITCH_THREAD_FUNC conference_video_super_muxing_thread_run(switch_thread_
30243036
continue;
30253037
}
30263038

3027-
if (switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_RECVONLY) {
3028-
continue;
3029-
}
3030-
3039+
30313040
if (!imember->session || !switch_channel_test_flag(imember->channel, CF_VIDEO) ||
30323041
switch_core_session_read_lock(imember->session) != SWITCH_STATUS_SUCCESS) {
30333042
continue;
@@ -3037,6 +3046,10 @@ void *SWITCH_THREAD_FUNC conference_video_super_muxing_thread_run(switch_thread_
30373046
switch_core_session_request_video_refresh(imember->session);
30383047
}
30393048

3049+
if (switch_core_session_media_flow(imember->session, SWITCH_MEDIA_TYPE_VIDEO) == SWITCH_MEDIA_FLOW_RECVONLY) {
3050+
continue;
3051+
}
3052+
30403053
if (send_keyframe) {
30413054
switch_core_media_gen_key_frame(imember->session);
30423055
}
@@ -3213,11 +3226,17 @@ void conference_video_set_floor_holder(conference_obj_t *conference, conference_
32133226
}
32143227

32153228
//VIDFLOOR
3216-
if (conference->canvas_count == 1 && member && conference->canvases[0] && conference->canvases[0]->layout_floor_id > -1) {
3217-
conference_video_attach_video_layer(member, conference->canvases[0], conference->canvases[0]->layout_floor_id);
3218-
}
3219-
32203229
if (member) {
3230+
mcu_canvas_t *canvas = NULL;
3231+
3232+
if ((canvas = conference_video_get_canvas_locked(member))) {
3233+
if (canvas->layout_floor_id > -1) {
3234+
printf("WTF ATTACH???\n");
3235+
conference_video_attach_video_layer(member, canvas, canvas->layout_floor_id);
3236+
}
3237+
conference_video_release_canvas(&canvas);
3238+
}
3239+
32213240
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Adding video floor %s\n",
32223241
switch_channel_get_name(member->channel));
32233242

src/mod/endpoints/mod_verto/mod_verto.c

+1
Original file line numberDiff line numberDiff line change
@@ -3405,6 +3405,7 @@ static switch_bool_t verto__invite_func(const char *method, cJSON *params, jsock
34053405
}
34063406

34073407
if ((screenShare = cJSON_GetObjectItem(dialog, "screenShare")) && screenShare->type == cJSON_True) {
3408+
switch_channel_set_variable(channel, "video_screen_share", "true");
34083409
switch_channel_set_flag(channel, CF_VIDEO_ONLY);
34093410
}
34103411

0 commit comments

Comments
 (0)