Video conf based on SimpleWebRTC https://vroom.fws.fr/documentation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

492 lines
20 KiB

% title sprintf l('ROOM_s'), $room;
%= include 'header'
<div class="container-fluid">
<nav id="toolbar" class="navbar navbar-default" role="toolbar">
<div class="navbar-header">
<div class="btn-group visible-xs-block header-btn-group">
<button class="btn btn-lg btn-default navbar-btn btn-mute-mic">
<span class="glyphicon glyphicon-volume-off">
</span>
</button>
<button class="btn btn-lg btn-default navbar-btn btn-suspend-cam">
<span class="glyphicon glyphicon-facetime-video">
</span>
</button>
</div>
<div class="btn-group visible-xs-block header-btn-group col-xs-push-2">
<button class="btn btn-lg btn-default help btn-logout navbar-btn" data-toggle="tooltip" data-placement="bottom" title="<%=l 'LOGOUT' %>">
<span class="glyphicon glyphicon-log-out">
</span>
</button>
</div>
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#roomToolBar">
<span class="sr-only">
</span>
<span class="icon-bar">
</span>
<span class="icon-bar">
</span>
<span class="icon-bar">
</span>
</button>
</div>
<input id="roomName" name="roomName" type="hidden" value="<%= $room %>"/>
<div id="roomToolBar" class="collapse navbar-collapse">
<div class="navbar-form navbar-btn-group navbar-left input-group">
<div class="input-group">
<input type="text" id="displayName" class="form-control help" placeholder="<%=l 'YOUR_NAME' %>" data-toggle="tooltip" data-placement="bottom" title="<%=l 'NAME_SENT_TO_OTHERS' %>"/>
<span class="input-group-btn">
<button id="changeColorButton" class="btn btn-default help" data-toggle="tooltip" data-placement="bottom" title="<%=l 'CHANGE_COLOR' %>">
<span class="glyphicon glyphicon-tag">
</span>
</button>
</span>
</div>
</div>
<div class="btn-group navbar-form navbar-btn-group navbar-left">
<% if ($etherpad eq 'true'){ %>
<div class="btn-group">
<% } %>
<button id="chatDropdown" class="btn btn-default collapsed help" data-toggle="collapse" data-target="#chatMenu" data-toggle="tooltip" data-placement="bottom" title="<%=l 'CLICK_TO_CHAT' %>">
<span class="glyphicon glyphicon-comment">
</span>
<span class="badge" id="unreadMsg">
0
</span>
</button>
</div>
<% if ($etherpad eq 'true'){ %>
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-default help" id="etherpadLabel" data-toggle="tooltip" data-placement="bottom" title="<%=l 'OPEN_ETHERPAD' %>">
<input type = "checkbox" id="etherpadButton">
<span class="glyphicon glyphicon-pencil">
</span>
</button>
</label>
</div>
</div>
<% } %>
<div class="btn-group navbar-form navbar-btn-group navbar-left hidden-xs">
<button class="btn btn-default btn-mute-mic help" data-toggle="tooltip" data-placement="bottom" title="<%=l 'MUTE_MIC' %>">
<span class="glyphicon glyphicon-volume-off">
</span>
</button>
<button class="btn btn-default btn-suspend-cam help" data-toggle="tooltip" data-placement="bottom" title="<%=l 'SUSPEND_CAM' %>">
<span class="glyphicon glyphicon-facetime-video">
</span>
</button>
<button class="btn btn-default help btn-share-screen" data-toggle="tooltip" data-placement="bottom" title="<%=l 'SHARE_YOUR_SCREEN' %>">
<span class="glyphicon glyphicon-expand">
</span>
</button>
</div>
<div class="btn-group navbar-form navbar-btn-group navbar-left hidden-xs aloneEl" data-toggle="buttons">
<label class="btn btn-default help" id="pauseMohLabel" data-toggle="tooltip" data-placement="bottom" title="<%=l 'PAUSE_MOH' %>">
<input type="checkbox" id="pauseMohButton">
<span class="glyphicon glyphicon-music">
</span>
</label>
</div>
<div class="btn-group navbar-form navbar-btn-group navbar-left">
<div class="btn-group ownerEl">
<button class="btn btn-default help" type="button" data-toggle="modal" data-target="#inviteModal" data-toggle="tooltip" data-placement="bottom" title="<%=l 'INVITE_PEOPLE' %>">
<span class="glyphicon glyphicon-user">
</span>
</button>
</div>
<div class="btn-group ownerEl">
<button class="btn btn-default help" type="button" data-toggle="modal" data-target="#configureModal" data-toggle="tooltip" data-placement="bottom" title="<%=l 'CONFIGURE' %>">
<span class="glyphicon glyphicon-cog">
</span>
</button>
</div>
</div>
<div class="btn-group navbar-form navbar-btn-group navbar-left">
<button class="btn btn-default dropdown-toggle help unauthEl" data-toggle="modal" data-target="#ownerAuthModal" data-toggle="dropdown" data-toggle="tooltip" data-placement="bottom" title="<%=l 'AUTHENTICATE' %>">
<span class="glyphicon glyphicon-log-in">
</span>
</button>
</div>
<div class="navbar-form navbar-btn-group navbar-right hidden-xs" data-toggle="buttons" >
<div class="btn-group">
<div id="timeCounter" class="btn btn-default disabled">
00:00
</div>
<button class="btn btn-default help btn-logout" data-toggle="tooltip" data-placement="bottom" title="<%=l 'LOGOUT' %>">
<span class="glyphicon glyphicon-log-out">
</span>
</button>
</div>
</div>
</div>
</nav>
<div class="modal fade" role="dialog" id="setDisplayName" aria-labelledby="setDisplayName" aria-hidden="true" data-keyboard="false" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="setDisplayNameTitle">
<%=l 'DISPLAY_NAME_REQUIRED' %>
</h4>
</div>
<div class="modal-body">
<form role="form" class="form-horizontal" id="displayNamePreForm">
<p class="text-center">
<%=l 'SET_A_DISPLAY_NAME' %>
</p>
<div class="form-group">
<label for="displayNamePre" class="col-sm-4 control-label">
<%=l 'DISPLAY_NAME' %>
</label>
<div class="col-sm-8">
<input type="text" class="form-control" autocomplete="off" id="displayNamePre" name="displayNamePre" placeholder="<%=l 'YOUR_NAME' %>">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<button id="displayNamePreButton" class="btn btn-primary disabled" type="submit">
<%=l 'SUBMIT' %>
</button>
<a class="btn btn-default" href="<%= $self->get_url('/') %>">
<%=l 'CANCEL' %>
</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="wipeModal" aria-labelledby="wipeModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
&times;
</button>
<h4 class="modal-title">
<%=l 'WIPE_ROOM_DATA' %>
</h4>
</div>
<div class="modal-body">
<p>
<%=l 'YOU_ARE_ABOUT_TO_WIPE_DATA' %>
<%=l 'THIS_INCLUDE' %>
<ul>
<li>
<%=l 'CHAT_HISTORY' %>
</li>
<% if ($etherpad) { %>
<li>
<%=l 'PAD_CONTENT' %>
</li>
<% } %>
</ul>
</p>
</div>
<div class="modal-footer">
<button id="confirmWipeButton" class="btn btn-danger">
<%=l 'CONFIRM_WIPE' %>
</button>
<button class="btn btn-default" data-dismiss="modal" data-target="#wipeModal">
<%=l 'CANCEL' %>
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="terminateModal" aria-labelledby="terminateModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
&times;
</button>
<h4 class="modal-title">
<%=l 'TERMINATE_ROOM' %>
</h4>
</div>
<div class="modal-body">
<p>
<%=l 'YOU_ARE_ABOUT_TO_TERMINATE_ROOM' %>
</p>
<ul>
<li>
<%=l 'ALL_PEERS_WILL_HANGUP' %>
</li>
<li>
<%=l 'ALL_DATA_WILL_BE_WIPED' %>
</li>
<li>
<%=l 'ROOM_WILL_BE_DELETED' %>
</li>
</ul>
</div>
<div class="modal-footer">
<button id="confirmTerminateButton" class="btn btn-danger">
<%=l 'CONFIRM_TERMINATE' %>
</button>
<button class="btn btn-default" data-dismiss="modal" data-target="#terminateModal">
<%=l 'CANCEL' %>
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="quitModal" aria-labelledby="quitModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
&times;
</button>
<h4 class="modal-title">
<%=l 'LEAVE_THIS_ROOM' %>
</h4>
</div>
<div class="modal-body">
<p>
<%=l 'ARE_YOU_SURE_YOU_WANT_TO_LEAVE' %>
</p>
</div>
<div class="modal-footer">
<button id="confirmQuitButton" class="btn btn-primary">
<%=l 'QUIT' %>
</button>
<button class="btn btn-default" data-dismiss="modal" data-target="#quitModal">
<%=l 'CANCEL' %>
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="chromeExtMessage" aria-labelledby="chromeExtMessage" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
&times;
</button>
<h4 class="modal-title" id="chromeExtMessageTitle">
<%=l 'EXTENSION_REQUIRED' %>
</h4>
</div>
<div clas="modal-body">
<p>
<%=l 'VROOM_CHROME_EXTENSION' %>
</p>
<p>
<a class="btn btn-default btn-lg" href="https://chrome.google.com/webstore/detail/<%= $config->{'interface.chrome_extension_id'} %>" target="_blank">
<span class="glyphicon glyphicon-download-alt">
</span>
</a>
</p>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="noWebrtcSupport" aria-labelledby="noWebrtcSupport" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
&times;
</button>
<h4 class="modal-title" id="noWebrtcSupportTitle">
<%=l 'BROWSER_NOT_SUPPORTED' %>
</h4>
</div>
<div class="modal-body">
<p>
<%=l 'NO_WEBRTC_SUPPORT' %>
</p>
<% if ($ua !~ m/iphone|ipad|ipod/i){ %>
<p>
<%=l 'DOWNLOAD_ONE_OF_THESE_BROWSERS' %>
</p>
<div class="row">
<%
my $ffurl = "http://www.mozilla.org/firefox/";
my $churl = "http://www.google.com/chrome/";
my $opurl = "http://www.opera.com";
if ($ua =~ m/android/i){
$ffurl = "https://play.google.com/store/apps/details?id=org.mozilla.firefox";
$churl = "https://play.google.com/store/apps/details?id=com.android.chrome";
$opurl = "https://play.google.com/store/apps/details?id=com.opera.browser";
}
%>
<div class="col-xs-4">
<a href="<%= $ffurl %>" target="_blank">
<img class="img-responsive center-block" src="<%= $self->get_url('/') %>img/firefox.png" alt="Mozilla Firefox"/>
</a>
</div>
<div class="col-xs-4">
<a href="<%= $churl %>" target="_blank">
<img class="img-responsive center-block" src="<%= $self->get_url('/') %>img/chrome.png" alt="Google Chrome"/>
</a>
</div>
<div class="col-xs-4">
<a href="<%= $opurl %>" target="_blank">
<img class="img-responsive center-block" src="<%= $self->get_url('/') %>img/opera.png" alt="Opera"/>
</a>
</div>
</div>
<% } %>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="noWebcam" aria-labelledby="noWebcam" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
&times;
</button>
<h4 class="modal-title" id="noWebcamTitle">
<%=l 'NO_WEBCAM' %>
</h4>
</div>
<div class="modal-body">
<p class="text-center">
<%=l 'CANT_ACCESS_WEBCAM' %>
</p>
<img class="img-responsive center-block" src="<%= $self->get_url('/') %>img/webcam.png" alt="Webcam"/>
<br>
<p class="text-center">
<%=l 'CLICK_IF_NO_WEBCAM' %>
</p>
<p class="text-center">
<a class="btn btn-default btn-lg" href="<%= $self->get_url('/') . $room %>?video=false">
<span class="glyphicon glyphicon-headphones">
</span>
</a>
</p>
</div>
</div>
</div>
</div>
<div class="modal fade" role="dialog" id="disconnected" aria-labelledby="disconnected" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
&times;
</button>
<h4 class="modal-title">
<%=l 'CONNECTION_LOST' %>
</h4>
</div>
<div class="modal-body">
<img class="img-responsive center-block" src="<%= $self->get_url('/') %>img/flash.png" alt="<%=l 'CONNECTION_LOST' %>"/>
<br>
<p class="text-center">
<%=l 'CHECK_INTERNET_ACCESS' %>
</p>
</div>
</div>
</div>
</div>
%=include 'invite_modal'
%=include 'configure_modal'
%=include 'auth_modal'
%=include 'noscript'
<div class="frame">
<div id="chatMenu" class="nav-collapse collapse">
<div id="chatHistory" class="form-control">
</div>
<form role="form" id="chatForm">
<div class="input-group">
<textarea class="form-control" id="chatBox" form_id="chatForm" placeholder="<%=l 'SET_YOUR_NAME_TO_CHAT' %>" rows=1 disabled></textarea>
<span class="input-group-btn">
<button type="submit" id="sendChat" class="btn btn-default help" data-toggle="tooltip" data-placement="bottom" title="<%=l 'SEND_MESSAGE' %>">
<span class="glyphicon glyphicon-share-alt">
</span>
</button>
<button type="button" id="saveChat" class="btn btn-default help" data-toggle="tooltip" data-placement="bottom" title="<%=l 'SAVE_HISTORY' %>">
<span class="glyphicon glyphicon-floppy-save">
</span>
</button>
</span>
</div>
</form>
</div>
<audio id="mohPlayer" src="<%= $self->get_url('/') %>snd/moh/<%= $moh %>" loop></audio>
<div id="view" class="view row-fluid">
<div id="webRTCVideo" class="col-xs-12 col-sm-4">
<div class="col-xs-3 col-sm-12 col-lg-6 previewContainer" id="videoLocalContainer">
<video id="webRTCVideoLocal" class="webRTCVideo latencyUnknown" muted oncontextmenu="return false;">
</video>
<div id="localVolume" class="volumeBar">
</div>
<div id="name_local" class="displayName">
</div>
</div>
</div>
<div id="mainView" class="col-xs-12 col-sm-8">
<% if ($etherpad eq 'true'){ %>
<div id="etherpadContainer"></div>
<% } %>
<div id="mainVideo">
</div>
<div id="aloneMsg" class="aloneEl">
<h2 class="text-center">
<%=l 'ALONE_IN_ROOM' %>
</h2>
</div>
</div>
</div>
</div>
%= include 'js_common'
%= include 'js_room'
<script>
var roomName = '<%= $room %>';
$( document ).ready(function() {
setTimeout(function(){
etherpad = {
enabled: <%= $etherpad %>,
<%
my $ethuri = URI->new($config->{'etherpad.uri'});
%>
host: "<%= $ethuri->scheme . '://' . $ethuri->authority %>",
path: "<%= $ethuri->path . '/p/' %>",
group: "<%= $etherpadGroup %>"
};
<% if ($video eq 'false'){ %>
videoConstraints = false;
<% } else{ %>
videoConstraints = {
mandatory: {
maxFrameRate: 15,
}
};
<% } %>
webrtc = new SimpleWebRTC({
url: "<%= $config->{'signaling.uri'} %>",
peerConnectionConfig: {
iceServers: [
{"url":"stun:<%= $config->{'turn.stun_server'} %>"},
<%== ($config->{'turn.turn_server'} && $config->{'turn.turn_server'} ne '') ? "{\"url\":\"turn:$config->{'turn.turn_server'}\", \"username\":\"$room\", \"credential\":\"$turnPassword\"}":'' %>
]
},
localVideoEl: 'webRTCVideoLocal',
autoRequestMedia: true,
enableDataChannels: true,
debug: false,
detectSpeakingEvents: true,
adjustPeerVolume: false,
autoAdjustMic: false,
harkOptions: {
interval: 300,
threshold: -20
},
media: {
video: videoConstraints,
audio: true
}
});
initVroom(roomName);
}, 300);
});
</script>
</div>
%= include 'footer'