aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.php5
-rw-r--r--model/Stream.php66
-rw-r--r--view/streams-json-v1.php87
3 files changed, 154 insertions, 4 deletions
diff --git a/index.php b/index.php
index cae238c..673183c 100644
--- a/index.php
+++ b/index.php
@@ -49,6 +49,11 @@ try {
require('view/schedule-json.php');
}
+ else if($route == 'streams/v1.json')
+ {
+ require('view/streams-json-v1.php');
+ }
+
else if($conference->isClosed())
{
require('view/closed.php');
diff --git a/model/Stream.php b/model/Stream.php
index 402dfff..0d96a02 100644
--- a/model/Stream.php
+++ b/model/Stream.php
@@ -108,10 +108,30 @@ class Stream
case 'hls':
return 'http://cdn.c3voc.de/hls/'.rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'_'.rawurlencode($this->getSelection()).'.m3u8';
+ }
- default:
- return null;
+ return null;
+ }
+ public function getVideoTech($proto)
+ {
+ switch($proto)
+ {
+ case 'webm':
+ if($this->getSelection() == 'hd')
+ return '1920x1080, VP8+Vorbis in WebM, 2.8 MBit/s';
+
+ else if($this->getSelection() == 'sd')
+ return '1024x576, VP8+Vorbis in WebM, 800 kBit/s';
+
+ case 'hls':
+ if($this->getSelection() == 'hd')
+ return '1920x1080, h264+AAC im MPEG-TS-Container via HTTP, 3 MBit/s';
+
+ else if($this->getSelection() == 'sd')
+ return '1024x576, h264+AAC im MPEG-TS-Container via HTTP, 800 kBit/s';
}
+
+ return null;
}
public static function getVideoProtos()
{
@@ -125,6 +145,19 @@ class Stream
{
return $this->getVideoUrl($proto);
}
+ public function getSlidesTech($proto)
+ {
+ switch($proto)
+ {
+ case 'webm':
+ return '1024x576, VP8+Vorbis in WebM, XXX kBit/s';
+
+ case 'hls':
+ return '1024x576, h264+AAC im MPEG-TS-Container via HTTP, XXX kBit/s';
+ }
+
+ return null;
+ }
public static function getSlidesProtos()
{
return Stream::getVideoProtos();
@@ -140,10 +173,22 @@ class Stream
case 'opus':
return 'http://cdn.c3voc.de/'.rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'.opus';
+ }
- default:
- return null;
+ return null;
+ }
+ public function getAudioTech($proto)
+ {
+ switch($proto)
+ {
+ case 'mp3':
+ return 'MP3-Audio, 96 kBit/s';
+
+ case 'opus':
+ return 'Opus-Audio, 64 kBit/s';
}
+
+ return null;
}
public static function getAudioProtos()
{
@@ -167,6 +212,19 @@ class Stream
return null;
}
}
+ public function getMusicTech($proto)
+ {
+ switch($proto)
+ {
+ case 'mp3':
+ return 'MP3-Audio, 192 kBit/s';
+
+ case 'opus':
+ return 'Opus-Audio, 96 kBit/s';
+ }
+
+ return null;
+ }
public static function getMusicProtos()
{
return array(
diff --git a/view/streams-json-v1.php b/view/streams-json-v1.php
new file mode 100644
index 0000000..0988269
--- /dev/null
+++ b/view/streams-json-v1.php
@@ -0,0 +1,87 @@
+<?php
+
+header('Content-Type: application/json');
+
+if($conference->isClosed())
+{
+ echo '{}';
+ return;
+}
+
+$overview = new Overview();
+
+$struct = array();
+foreach($overview->getGroups() as $group => $rooms)
+{
+ foreach($rooms as $room)
+ {
+ $streams = array();
+ foreach($room->getStreams() as $stream)
+ {
+ $key = $stream->getSelection().'-'.$stream->getLanguage();
+
+ $urls = array();
+ switch($stream->getPlayerType())
+ {
+ case 'video':
+ foreach ($stream->getVideoProtos() as $proto => $display)
+ {
+ $urls[$proto] = array(
+ 'display' => $display,
+ 'tech' => $stream->getVideoTech($proto),
+ 'url' => $stream->getVideoUrl($proto),
+ );
+ }
+ break;
+
+ case 'slides':
+ foreach ($stream->getSlidesProtos() as $proto => $display)
+ {
+ $urls[$proto] = array(
+ 'display' => $display,
+ 'tech' => $stream->getSlidesTech($proto),
+ 'url' => $stream->getSlidesUrl($proto),
+ );
+ }
+ break;
+
+ case 'audio':
+ foreach ($stream->getAudioProtos() as $proto => $display)
+ {
+ $urls[$proto] = array(
+ 'display' => $display,
+ 'tech' => $stream->getAudioTech($proto),
+ 'url' => $stream->getAudioUrl($proto),
+ );
+ }
+ break;
+
+ case 'music':
+ foreach ($stream->getMusicProtos() as $proto => $display)
+ {
+ $urls[$proto] = array(
+ 'display' => $display,
+ 'tech' => $stream->getMusicTech($proto),
+ 'url' => $stream->getMusicUrl($proto),
+ );
+ }
+ break;
+ }
+
+ $streams[$key] = array(
+ 'display' => $stream->getDisplay(),
+ 'type' => $stream->getPlayerType(),
+ 'isTranslated' => $stream->isTranslated(),
+ 'videoSize' => $stream->getVideoSize(),
+ 'urls' => $urls,
+ );
+ }
+
+ $struct[$group][$room->getSlug()] = array(
+ 'display' => $room->getDisplay(),
+ 'streams' => $streams,
+ );
+ }
+}
+
+echo json_encode($struct, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);