WebRTC audio/video call and conferencing server.
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.
 
 
 
 
 
 

441 lines
7.8 KiB

/*
* Spreed WebRTC.
* Copyright (C) 2013-2014 struktur AG
*
* This file is part of Spreed WebRTC.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#audiovideo {
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: $minbarheight;
user-select: none;
}
#audiovideo {
&.fullscreen {
background: black !important;
bottom: 0 !important;
left: 0 !important;
top: 0 !important;
right: 0 !important;
.remoteVideo .peerActions {
display: none;
}
}
@include breakpt($breakpoint-video-small, max-width, only screen) {
right: 0;
}
}
.mainScreenshare #audiovideo, .mainPresentation #audiovideo {
@include breakpt($breakpoint-video-medium, max-width, only screen) {
display: none;
}
}
.withChat #audiovideo,
.withBuddylist #audiovideo {
right: 260px;
}
.withBuddylist.withChat #audiovideo {
right: 520px;
}
.audiovideo {
bottom: 0;
left: 0;
position: absolute;
top: 0;
right: 0;
&.active {
perspective: 1000;
&:hover .overlayActions {
opacity: .3;
}
.overlayActions:hover {
opacity: .6;
}
.audiovideoBase {
transform: rotateY(180deg);
}
}
.audiovideoBase {
position: relative;
width: 100%;
height: 100%;
transition-property: transform;
transition-duration: 2s;
transform: rotateY(0deg);
z-index: 2;
}
.localContainer {
bottom: 0;
left: 0;
pointer-events: none;
position: absolute;
right: 0;
top: 0;
transform: scale(-1, 1);
z-index: 2;
}
video {
object-fit: contain;
}
}
.audiovideo {
.remoteContainer {
bottom: 0;
left: 0;
pointer-events: none;
position: absolute;
right: 0;
top: 0;
transform: rotateY(180deg);
z-index: 2;
}
.miniContainer {
bottom: 2px;
max-height: 18%;
height: 100%;
opacity: 0;
position: absolute;
right: 2px;
transform: scale(-1, 1);
transition-property: opacity;
transition-duration: .5s;
z-index: 25;
&.visible {
opacity: 1;
}
}
.miniVideo {
display: block;
max-height: 100%;
max-width: 100%;
height: 100%;
}
.localVideo {
background: $video-background;
display: block;
max-height: 100%;
opacity: 0;
transition-property: opacity;
transition-duration: 2s;
width: 100%;
}
}
.audiovideo .remoteVideos {
bottom: 0;
left: 0;
opacity: 0;
position: absolute;
right: 0;
top: 0;
transition-property: opacity;
transition-duration: 2s;
video {
display: block;
height: 100%;
width: 100%;
}
}
.audiovideo .remoteVideo{
background: $video-background;
display: inline-block;
max-height: 100%;
max-width: 100%;
overflow: hidden;
position: relative;
vertical-align: bottom;
visibility: hidden;
width: 100%;
&.withvideo {
visibility: visible;
}
&.onlyaudio {
background: $video-onlyaudio-background;
visibility: visible;
}
.onlyaudio {
color: $video-onlyaudio;
display: none;
font-size: 80px;
left: 0;
margin-top: -40px;
pointer-events: auto;
position: absolute;
right: 0;
text-align: center;
top: 45%;
}
&.onlyaudio video {
visibility: hidden;
}
&.onlyaudio .onlyaudio {
display: block;
}
.peerActions {
bottom: 5%;
left: 40px;
opacity: 0;
pointer-events: auto;
position: absolute;
right: 40px;
text-align: center;
transition-property: opacity;
transition-duration: .2s;
z-index: 10;
&:hover {
opacity: .5;
}
i {
font-size: 3vw;
}
}
.peerLabel {
bottom: 4%;
color: white;
left: 4%;
font-size: 2.5vw;
max-width: 30%;
opacity: .7;
overflow: hidden;
padding: 4px;
position: absolute;
text-overflow: ellipsis;
text-shadow: 0 0 4px black;
white-space: nowrap;
z-index: 8;
}
}
.audiovideo .overlayActions {
background: $video-overlayactions;
bottom: 0;
height: 140px;
left: 0;
margin:auto 0;
opacity: 0;
padding: 3px 0;
position: absolute;
top: 0;
width: 40px;
z-index: 5;
button {
color: #ccc;
cursor: pointer;
display: block;
outline: 0;
text-shadow: 0 0 5px black;
width: 40px;
}
}
.remoteVideo {
&.talking .peerLabel {
color: $audiovideolevel;
}
.peerLabel {
transition: color 500ms ease-out;
}
.overlayLogo {
background: url(../img/logo-overlay.png) no-repeat center;
background-size: 100%;
height: 20%;
max-height: 40px;
max-width: 111px;
opacity: .5;
pointer-events: none;
position: absolute;
right: 2.5%;
top: 4%;
width: 20%;
z-index: 2;
}
}
.miniContainer {
&.talking video {
border: 1px solid $audiovideolevel;
}
video {
border: 1px solid transparent;
}
}
.renderer-smally {
width: 150px;
background: black;
border-right: none;
border-top: none;
.remoteVideos {
padding-bottom: 85px;
}
.remoteVideo {
.peerLabel {
font-size: .9em;
font-weight: bold;
}
.peerActions i {
font-size: 1em;
}
}
.miniContainer {
bottom: 0;
height: 85px;
left: 0;
max-height: none;
right: 0;
}
}
.renderer-onepeople {
}
.renderer-conferencekiosk {
.remoteVideos {
background: $video-background;
bottom: 2px;
min-height: 108px;
pointer-events: auto;
text-align: center;
top: auto;
white-space: nowrap;
> div {
cursor: pointer;
height: 108px;
width: 192px;
}
.overlayLogo {
display: none;
}
.peerLabel,
.peerActions i {
font-size: 1.1em;
}
.peerLabel {
background: $video-overlayactions;
}
}
.miniContainer {
height: 108px;
max-height: none;
width: 192px;
}
.bigVideo {
bottom: 112px;
left: 0;
margin: auto;
opacity: 0;
position: absolute;
right: 0;
top: 2px;
transition-property: opacity;
transition-duration: 2s;
video {
width: 100%;
height: 100%;
}
}
}
.renderer-selfportrait {
.miniContainer {
max-height: 100%;
width: 100%;
height: 100%;
left: 0px;
right: 0px;
bottom: 0px;
top: 0px;
.miniVideo {
width: 100%;
height: 100%;
}
}
.remoteVideos {
opacity: 0 !important;
display: none;
}
}
.renderer-classroom {
.remoteContainer {
border-left: 40px solid black;
}
.remoteVideos {
top: 180px;
width: 320px;
pointer-events: auto;
background: $video-background;
.overlayLogo {
display: none;
}
video {
height: 100%;
width: 100%;
object-fit: cover;
margin-top: -9px;
}
> div {
cursor: pointer;
width: 80px;
height: 60px;
display: inline-block;
}
.overlayLogo {
display: none;
}
.peerLabel {
font-size: 0.6em;
background: $video-overlayactions;
max-width: 100%;
bottom: 0px;
left: 0px;
right: 0px;
padding: 0 4px;
line-height: 9px;
}
.peerActions {
display: none;
}
.miniContainer {
right: auto;
max-height: auto;
}
}
.bigVideo {
width: 320px;
height: 180px;
video {
height: 100%;
width: 100%;
}
.peerLabel {
font-size: 1vw;
max-width: 40%;
bottom: 8%;
}
}
}