mirror of
https://github.com/voc/streaming-website
synced 2024-11-10 22:54:12 +00:00
Merge branch 'staging'
This commit is contained in:
commit
e09f7bf45f
12 changed files with 211 additions and 123 deletions
File diff suppressed because one or more lines are too long
BIN
configs/conferences/rc3/background-21.png
Normal file
BIN
configs/conferences/rc3/background-21.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 MiB |
|
@ -28,14 +28,14 @@ $CONFIG['CONFERENCE'] = array(
|
|||
* Der Boolean true ist aus Abwärtskompatibilitätsgründen äquivalent zu 'after'. False ist äquivalent
|
||||
* zu 'running'.
|
||||
*/
|
||||
//'CLOSED' => 'running',
|
||||
'CLOSED' => 'running',
|
||||
|
||||
/**
|
||||
* Titel der Konferenz (kann Leer- und Sonderzeichen enthalten)
|
||||
* Dieser im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als
|
||||
* Anzeigetext benutzt
|
||||
*/
|
||||
'TITLE' => 'rC3 NOWHERE',
|
||||
'TITLE' => 'rC3 NOWHERE Test',
|
||||
|
||||
/**
|
||||
* Veranstalter
|
||||
|
@ -124,7 +124,13 @@ $CONFIG['OVERVIEW'] = array(
|
|||
* sonst werden sie nicht angezeigt.
|
||||
*/
|
||||
'GROUPS' => array(
|
||||
// TODO sort array in random order, based on current hour
|
||||
'Test Streams' => array(
|
||||
'lukas',
|
||||
'derchris',
|
||||
'test',
|
||||
'infobeamer',
|
||||
),
|
||||
// TODO sort array in random order, based on current hour or simular
|
||||
'Channels' => array(
|
||||
'cbase',
|
||||
'cwtv',
|
||||
|
@ -246,7 +252,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -282,7 +288,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -315,7 +321,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -350,7 +356,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -385,7 +391,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -418,7 +424,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -451,7 +457,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -473,8 +479,8 @@ $CONFIG['ROOMS'] = array(
|
|||
),
|
||||
'aboutfuture' => array(
|
||||
'DISPLAY' => 'about:future',
|
||||
'DISPLAY_SHORT' => 'hacc/a:f',
|
||||
'STREAM' => 'hacc',
|
||||
'DISPLAY_SHORT' => 'a:f',
|
||||
'STREAM' => 'aboutfuture',
|
||||
'PREVIEW' => true,
|
||||
'TRANSLATION' => [
|
||||
],
|
||||
|
@ -484,7 +490,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -519,7 +525,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -546,9 +552,9 @@ $CONFIG['ROOMS'] = array(
|
|||
'SD_VIDEO' => true,
|
||||
'HD_VIDEO' => true,
|
||||
'DASH' => true,
|
||||
'H264_ONLY' => false,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -577,7 +583,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -611,7 +617,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -647,7 +653,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -683,7 +689,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -717,7 +723,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -749,7 +755,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -770,7 +776,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
@ -789,7 +795,7 @@ $CONFIG['ROOMS'] = array(
|
|||
'DASH' => true,
|
||||
'H264_ONLY' => true,
|
||||
'HLS' => true,
|
||||
'AUDIO' => false,
|
||||
'AUDIO' => true,
|
||||
'SLIDES' => false,
|
||||
'MUSIC' => false,
|
||||
'SCHEDULE' => true,
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
@import "../../../assets/css/_structure.less";
|
||||
|
||||
// conference specific styles here
|
||||
@one: #B239FF;
|
||||
@two: #6800E7;
|
||||
@three: #26beff;
|
||||
@four: #FFFFFF;
|
||||
@one: #f035e7;
|
||||
@two: #4e7ffa;
|
||||
@three: rgba(255, 255, 255, 0.9);
|
||||
@four: #ccc;
|
||||
@dark2: #201d47;
|
||||
@dark: #100E23;
|
||||
@dark: rgba(0, 0, 0, 0.7);
|
||||
|
||||
@grey-lighter: #333333;
|
||||
@grey-darker: #2a2a2a;
|
||||
|
@ -22,11 +22,12 @@
|
|||
@btn-default-color: white;
|
||||
@btn-default-bg: @two;
|
||||
@btn-default-border: @two;
|
||||
@text-color: @four;
|
||||
@text-color: @three;
|
||||
|
||||
@panel-default-border: @two;
|
||||
@panel-default-heading-bg: @two;
|
||||
@panel-default-text: @four;
|
||||
// room pannels on overview page
|
||||
@panel-default-border: @three;
|
||||
@panel-default-heading-bg: @three;
|
||||
@panel-default-text: @dark2;
|
||||
@panel-bg: @dark;
|
||||
|
||||
@navbar-height: 70px;
|
||||
|
@ -34,11 +35,11 @@
|
|||
@navbar-default-brand-color: @three;
|
||||
|
||||
@nav-tabs-link-hover-border-color: @two;
|
||||
@nav-tabs-active-link-hover-color: @four;
|
||||
@nav-tabs-active-link-hover-bg: @one;
|
||||
@nav-tabs-active-link-hover-border-color: @one;
|
||||
@nav-tabs-justified-link-border-color: @one;
|
||||
@nav-tabs-border-color: @one;
|
||||
@nav-tabs-active-link-hover-color: @dark;
|
||||
@nav-tabs-active-link-hover-bg: @three;
|
||||
@nav-tabs-active-link-hover-border-color: @three;
|
||||
@nav-tabs-justified-link-border-color: @three;
|
||||
@nav-tabs-border-color: @three;
|
||||
|
||||
// schedule
|
||||
@schedule-pause: @grey-lighter;
|
||||
|
@ -47,8 +48,27 @@
|
|||
@brand-danger: @one; // @schedule-now
|
||||
@schedule-gap-bg: @dark;
|
||||
|
||||
.block.event {
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
@headings-color: @four;
|
||||
h1, h2 {
|
||||
color: @three;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
body .schedule .block h5 {
|
||||
color: #606060;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: @dark;
|
||||
background-color: #000;
|
||||
background: url(background-21.png) no-repeat right top fixed;
|
||||
background-size: 100% 100%;
|
||||
padding: @navbar-height 0;
|
||||
|
||||
@media (max-width: 498px) { /* when the navbar breaks */
|
||||
|
@ -56,11 +76,7 @@ body {
|
|||
}
|
||||
}
|
||||
|
||||
@headings-color: @four;
|
||||
h1, h2 {
|
||||
// color: #46eed5;
|
||||
color: @three;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* font
|
||||
|
@ -85,6 +101,14 @@ body.overview .panel-primary a,
|
|||
background: @dark2;
|
||||
}
|
||||
|
||||
.panel-body{
|
||||
color: white;
|
||||
}
|
||||
.panel-body {
|
||||
|
||||
}
|
||||
.tab-content{
|
||||
background-color: rgba(0, 0, 0, 0.65) !important;
|
||||
}
|
||||
|
||||
.btn {
|
||||
background: none !important;
|
||||
border: none;
|
||||
}
|
||||
|
|
|
@ -264,7 +264,10 @@ class Room
|
|||
{
|
||||
$selections = array();
|
||||
if($this->hasDash())
|
||||
$selections[] = 'dash';
|
||||
if($this->h264Only())
|
||||
$selections[] = 'hls';
|
||||
else
|
||||
$selections[] = 'dash';
|
||||
|
||||
if($this->hasAudio())
|
||||
$selections[] = 'audio';
|
||||
|
|
|
@ -48,6 +48,9 @@ class RoomSelection
|
|||
|
||||
case 'music':
|
||||
return 'Radio';
|
||||
|
||||
case 'hls':
|
||||
return 'HLS';
|
||||
|
||||
default:
|
||||
return ucfirst($this->getSelection());
|
||||
|
|
|
@ -100,9 +100,13 @@ class Stream
|
|||
break;
|
||||
|
||||
case 'dash':
|
||||
# no special attribution, this is the "normal" stream
|
||||
if($room->h264Only()) {
|
||||
$display .= 'HLS';
|
||||
} else {
|
||||
$display .= 'DASH';
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
$display .= ucfirst($this->getSelection());
|
||||
break;
|
||||
|
@ -188,11 +192,8 @@ class Stream
|
|||
{
|
||||
switch($proto)
|
||||
{
|
||||
case 'mp3':
|
||||
return proto().'://'.joinpath([$GLOBALS['CONFIG']['CDN'], rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'.mp3']);
|
||||
|
||||
case 'opus':
|
||||
return proto().'://'.joinpath([$GLOBALS['CONFIG']['CDN'], rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'.opus']);
|
||||
case 'hls':
|
||||
return proto().'://'.joinpath([$GLOBALS['CONFIG']['CDN'], 'hls/'.rawurlencode($this->getRoom()->getStream()).'/segment_'.rawurlencode(ucfirst($this->getLanguage())).'.m3u8']);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -201,11 +202,8 @@ class Stream
|
|||
{
|
||||
switch($proto)
|
||||
{
|
||||
case 'mp3':
|
||||
return 'MP3-Audio, 96 kBit/s';
|
||||
|
||||
case 'opus':
|
||||
return 'Opus-Audio, 64 kBit/s';
|
||||
case 'hls':
|
||||
return 'AAC, VBR';
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -213,8 +211,7 @@ class Stream
|
|||
public static function getAudioProtos()
|
||||
{
|
||||
return array(
|
||||
'mp3' => 'MP3',
|
||||
'opus' => 'Opus',
|
||||
'hls' => 'HLS',
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,10 +59,10 @@
|
|||
<select class="form-control" name="os" id="os">
|
||||
<option></option>
|
||||
<option>Unixoid</option>
|
||||
<option>OS/X</option>
|
||||
<option>macOS</option>
|
||||
<option>Windows</option>
|
||||
<option>iOS</option>
|
||||
<option>Android</option>
|
||||
<option>iOS/iPadOS/tvOS</option>
|
||||
<option>Something else</option>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
@ -1,25 +1,7 @@
|
|||
<!-- Uses regular player only if translation is forced -->
|
||||
<? if($stream->isTranslated()): ?>
|
||||
<video
|
||||
preload="auto"
|
||||
controls="controls"
|
||||
autoplay="autoplay"
|
||||
style="max-height: 400px; max-width:100vw; display: block; margin: auto;"
|
||||
poster="<?=h($stream->getPoster())?>"
|
||||
>
|
||||
<source
|
||||
src="<?=h($stream->getAudioUrl('mp3'))?>"
|
||||
type="audio/mp3"
|
||||
/>
|
||||
</video>
|
||||
|
||||
<!-- Use voc-player per default, TODO: implement preferred language feature -->
|
||||
<? else: ?>
|
||||
<div class="video-wrap"
|
||||
data-voc-player
|
||||
data-stream="<?=h($room->getStream())?>"
|
||||
data-stream="<?=h($stream->getAudioUrl('hls'))?>"
|
||||
data-poster="<?=h($stream->getPoster())?>"
|
||||
data-audio-only="true"
|
||||
></div>
|
||||
<? endif ?>
|
||||
|
||||
></div>
|
7
template/assemblies/player/hls.phtml
Normal file
7
template/assemblies/player/hls.phtml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<div class="video-wrap"
|
||||
data-voc-player
|
||||
data-h264-only="<?=h($room->h264Only())?>"
|
||||
data-stream="<?=h($room->getStream())?>"
|
||||
data-poster="<?=h($stream->getPoster())?>"
|
||||
data-preferred-language="<?=($stream->getLanguage())?>"
|
||||
></div>
|
60
template/assemblies/switcher/hls.phtml
Normal file
60
template/assemblies/switcher/hls.phtml
Normal file
|
@ -0,0 +1,60 @@
|
|||
<div class="container-fluid">
|
||||
|
||||
<div class="directlinks">
|
||||
<? foreach(Stream::getVideoProtos() as $proto => $display): ?>
|
||||
<h3>Direct links (<?=h($display)?>)</h3>
|
||||
<div class="row">
|
||||
<? foreach($room->getVideoResolutions() as $res): ?>
|
||||
<? $selection = $room->createSelectionObject($res) ?>
|
||||
<? $switcherstream = $room->createStreamObject($res) ?>
|
||||
<div class="col-lg-3 col-md-4 col-lg-5 col-xs-12">
|
||||
<div class="btn-group" role="group" title="<?=h($switcherstream->getVideoTech($proto))?>">
|
||||
<div class="btn btn-primary" disabled><?=h($selection->getDisplay())?></div>
|
||||
<? if($room->hasTranslation()): ?>
|
||||
|
||||
<a href="<?=h($room->createStreamObject($res, 'native')->getVideoUrl($proto))?>" class="btn btn-default">
|
||||
<span class="fa fa-flag-o"></span>
|
||||
Native
|
||||
</a>
|
||||
<? foreach($room->getTranslations() as $translation): ?>
|
||||
<a href="<?=h($room->createStreamObject($res, $translation['endpoint'])->getVideoUrl($proto))?>" class="btn btn-default">
|
||||
<span class="fa fa-flag"></span>
|
||||
<?=h(ucfirst($translation['label']))?>
|
||||
</a>
|
||||
<? endforeach ?>
|
||||
|
||||
<? else: ?>
|
||||
|
||||
<a href="<?=h($switcherstream->getVideoUrl($proto))?>" class="btn btn-default">
|
||||
<span class="fa fa-video-camera"></span>
|
||||
Video
|
||||
</a>
|
||||
|
||||
<? endif ?>
|
||||
</div>
|
||||
</div>
|
||||
<? endforeach ?>
|
||||
</div>
|
||||
<? endforeach ?>
|
||||
</div>
|
||||
|
||||
<? if(!$room->h264Only()): ?>
|
||||
<div class="directlinks">
|
||||
<h3>Direct link to DASH-Manifest</h3>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-3 col-md-4 col-lg-5 col-xs-12">
|
||||
|
||||
<div class="btn-group" role="group" title="<?=h($switcherstream->getVideoTech("dash"))?>">
|
||||
<div class="btn btn-primary" disabled>DASH</div>
|
||||
<a href="<?=h($room->getDashManifestUrl())?>" target="_blank" class="btn btn-default">
|
||||
<span class="fa fa-flask"></span>
|
||||
Manifest
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<? endif ?>
|
||||
</div>
|
|
@ -81,24 +81,30 @@ foreach (Conferences::getActiveConferences() as $conference)
|
|||
);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 'dash':
|
||||
$urls['dash'] = array(
|
||||
'display' => 'DASH, baby',
|
||||
'tech' => $room->getDashTech(),
|
||||
'url' => $room->getDashManifestUrl(),
|
||||
);
|
||||
break;
|
||||
if(!$room->h264Only()):
|
||||
$urls['dash'] = array(
|
||||
'display' => 'DASH, baby',
|
||||
'tech' => $room->getDashTech(),
|
||||
'url' => $room->getDashManifestUrl(),
|
||||
);
|
||||
break;
|
||||
endif;
|
||||
}
|
||||
|
||||
$streams[] = array(
|
||||
'slug' => $key,
|
||||
'display' => $stream->getDisplay(),
|
||||
'type' => $stream->getPlayerType(),
|
||||
'isTranslated' => $stream->isTranslated(),
|
||||
'videoSize' => $stream->getVideoSize(),
|
||||
'urls' => (object)$urls,
|
||||
);
|
||||
if($room->h264Only() and $key == "dash-native") {
|
||||
continue;
|
||||
} else {
|
||||
$streams[] = array(
|
||||
'slug' => $key,
|
||||
'display' => $stream->getDisplay(),
|
||||
'type' => $stream->getPlayerType(),
|
||||
'isTranslated' => $stream->isTranslated(),
|
||||
'videoSize' => $stream->getVideoSize(),
|
||||
'urls' => (object)$urls,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$roomstruct[] = array(
|
||||
|
|
Loading…
Reference in a new issue