room = $room; $this->selection = $selection; $this->language = $language; } public function getRoom() { return $this->room; } public function getSelection() { return $this->selection; } public function getLanguage() { return $this->language; } public function isTranslated() { return $this->getLanguage() == 'translated'; } public function getVideoSize() { switch($this->getSelection()) { case 'sd': case 'slides': return array(1024, 576); case 'hd': return array(1920, 1080); default: return null; } } public function getVideoWidth() { $sz = $this->getVideoSize(); return $sz[0]; } public function getVideoHeight() { $sz = $this->getVideoSize(); return $sz[1]; } public function getTab() { switch($this->getSelection()) { case 'sd': case 'hd': return 'video'; default: return $this->getSelection(); } } public function getPlayerType() { return $this->getTab(); } public function getDisplay() { $display = $this->getRoom()->getDisplay().' '; switch($this->getSelection()) { case 'hd': $display .= 'FullHD Video'; break; case 'sd': $display .= 'SD Video'; break; case 'music': $display .= 'Radio'; break; default: $display .= ucfirst($this->getSelection()); break; } if($this->isTranslated()) $display .= ' (Translation)'; return $display; } public function getEmbedUrl() { return forceslash(baseurl()). 'embed/'. rawurlencode($this->getRoom()->getSlug()).'/'. rawurlencode($this->getSelection()).'/'. rawurlencode($this->getLanguage()).'/'; } public function getVideoUrl($proto) { switch($proto) { case 'webm': return proto().'://live.ber.c3voc.de/'.rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'_'.rawurlencode($this->getSelection()).'.webm'; case 'hls': return proto().'://live.ber.c3voc.de/hls/'.rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'_'.rawurlencode($this->getSelection()).'.m3u8'; } 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() { return array( 'webm' => 'WebM', 'hls' => 'HLS', ); } public function getSlidesUrl($proto) { 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(); } public function getAudioUrl($proto) { switch($proto) { case 'mp3': return proto().'://cdn.c3voc.de/'.rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'.mp3'; case 'opus': return proto().'://cdn.c3voc.de/'.rawurlencode($this->getRoom()->getStream()).'_'.rawurlencode($this->getLanguage()).'.opus'; } 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() { return array( 'mp3' => 'MP3', 'opus' => 'Opus', ); } public function getMusicUrl($proto) { switch($proto) { case 'mp3': return proto().'://cdn.c3voc.de/'.rawurlencode($this->getRoom()->getStream()).'.mp3'; case 'opus': return proto().'://cdn.c3voc.de/'.rawurlencode($this->getRoom()->getStream()).'.opus'; default: 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( 'mp3' => 'MP3', 'opus' => 'Opus', ); } }