From 2ae4d6c1c323828ee1d4ac714226a029d478d346 Mon Sep 17 00:00:00 2001 From: drigato Date: Mon, 23 Mar 2015 12:37:22 -0400 Subject: [PATCH] Embed Player Added stream modes Unhardcoded some values Disabled opus streams --- .../EmbeddableplayerController.php | 11 +++-- .../application/forms/EmbeddablePlayer.php | 44 +++++++++++++------ .../application/models/StreamSetting.php | 19 ++++++++ .../views/scripts/form/embeddableplayer.phtml | 2 + .../embeddableplayer/embeddableplayer.js | 13 ++++-- 5 files changed, 67 insertions(+), 22 deletions(-) diff --git a/airtime_mvc/application/controllers/EmbeddableplayerController.php b/airtime_mvc/application/controllers/EmbeddableplayerController.php index 6c2ccfbd8..8efc33c2b 100644 --- a/airtime_mvc/application/controllers/EmbeddableplayerController.php +++ b/airtime_mvc/application/controllers/EmbeddableplayerController.php @@ -15,7 +15,6 @@ class EmbeddablePlayerController extends Zend_Controller_Action $this->view->headScript()->appendFile($baseUrl.'js/airtime/embeddableplayer/mrp.js?'.$CC_CONFIG['airtime_version']); $this->view->headScript()->appendFile($baseUrl.'js/airtime/embeddableplayer/embeddableplayer.js?'.$CC_CONFIG['airtime_version']); - $form = new Application_Form_EmbeddablePlayer(); if ($form->getElement('player_stream_url')->getAttrib('numberOfEnabledStreams') > 0) { @@ -34,11 +33,11 @@ class EmbeddablePlayerController extends Zend_Controller_Action $this->view->mrp_js = Application_Common_HTTPHelper::getStationUrl() . "js/airtime/embeddableplayer/mrp.js"; $this->view->muses_swf = Application_Common_HTTPHelper::getStationUrl() . "js/airtime/embeddableplayer/muses.swf"; - $this->view->skin = Application_Common_HTTPHelper::getStationUrl() . "js/airtime/embeddableplayer/ffmp3-mcclean.xml"; - $this->view->codec = $request->getParam('codec'); - //$this->view->streamURL = $request->getParam('url'); - //$stream = $request->getParam('stream'); - $this->view->streamURL = "http://127.0.0.1:8000/airtime_128"; + $stream = $request->getParam('stream'); + $streamData = Application_Model_StreamSetting::getEnabledStreamData(); + $selectedStreamData = $streamData[$stream]; + $this->view->streamURL = $selectedStreamData["url"]; + $this->view->codec = $selectedStreamData["codec"]; $this->view->displayMetadata = $request->getParam('display_metadata'); } } \ No newline at end of file diff --git a/airtime_mvc/application/forms/EmbeddablePlayer.php b/airtime_mvc/application/forms/EmbeddablePlayer.php index febf1379a..537abd39a 100644 --- a/airtime_mvc/application/forms/EmbeddablePlayer.php +++ b/airtime_mvc/application/forms/EmbeddablePlayer.php @@ -13,30 +13,48 @@ class Application_Form_EmbeddablePlayer extends Zend_Form_SubForm $displayTrackMetadata->setLabel(_('Display track metadata?')); $this->addElement($displayTrackMetadata); + $streamMode = new Zend_Form_Element_Radio('player_stream_mode'); + $streamMode->setLabel(_('Select Stream:')); + $streamMode->setMultiOptions( + array( + "a" => "Use a mobile stream if possible, when appropriate. Otherwise use the highest quality stream.", + "b" => "Select a stream" + ) + ); + $streamMode->setValue("a"); + $this->addElement($streamMode); + $streamURL = new Zend_Form_Element_Radio('player_stream_url'); + $opusStreamCount = 0; $urlOptions = Array(); - foreach(Application_Model_StreamSetting::getEnabledStreamUrls() as $type => $url) { - if ($type == "opus") continue; - $urlOptions[$url] = $type; + foreach(Application_Model_StreamSetting::getEnabledStreamData() as $stream => $data) { + $urlOptions[$stream] = $data["codec"]." - ".$data["bitrate"]."kbps"; + if ($data["codec"] == "opus") { + $opusStreamCount += 1; + $urlOptions[$stream] .=" - The player does not support Opus streams."; + } } $streamURL->setMultiOptions( $urlOptions ); - Logging::info($urlOptions); - $streamURL->setValue(array_keys($urlOptions)[0]); - $streamURL->setLabel(_('Select stream:')); - $streamURL->setAttrib('codec', array_values($urlOptions)[0]); - $streamURL->setAttrib('numberOfEnabledStreams', sizeof($urlOptions)); - $this->addElement($streamURL); - $url = $streamURL->getValue(); - $codec = $streamURL->getAttrib('codec'); + foreach ($urlOptions as $o => $v) { + if (strpos($v, "opus") !== false) { + continue; + } else { + $streamURL->setValue($o); + break; + } + } + + $streamURL->setAttrib('numberOfEnabledStreams', sizeof($urlOptions)-$opusStreamCount); + $streamURL->setAttrib("disabled", "disabled"); + $this->addElement($streamURL); $embedSrc = new Zend_Form_Element_Text('player_embed_src'); $embedSrc->setAttrib("readonly", "readonly"); $embedSrc->setAttrib("class", "embed-player-text-box"); - //$embedSrc->setValue(''); - $embedSrc->setValue(''); + $embedSrc->setValue(''); $embedSrc->removeDecorator('label'); $this->addElement($embedSrc); diff --git a/airtime_mvc/application/models/StreamSetting.php b/airtime_mvc/application/models/StreamSetting.php index 3bdac8a31..49ec7a072 100644 --- a/airtime_mvc/application/models/StreamSetting.php +++ b/airtime_mvc/application/models/StreamSetting.php @@ -78,6 +78,25 @@ class Application_Model_StreamSetting return $urls; } + public static function getEnabledStreamData() + { + $streams = Array(); + $streamIds = self::getEnabledStreamIds(); + foreach ($streamIds as $id) { + $streamData = self::getStreamData($id); + $prefix = $id."_"; + $host = $streamData[$prefix."host"]; + $port = $streamData[$prefix."port"]; + $mount = $streamData[$prefix."mount"]; + $streams[$id] = Array( + "url" => "http://$host:$port/$mount", + "codec" => $streamData[$prefix."type"], + "bitrate" => $streamData[$prefix."bitrate"] + ); + } + return $streams; + } + /* Returns the id's of all streams that are enabled in an array. An * example of the array returned in JSON notation is ["s1", "s2", "s3"] */ public static function getEnabledStreamIds() diff --git a/airtime_mvc/application/views/scripts/form/embeddableplayer.phtml b/airtime_mvc/application/views/scripts/form/embeddableplayer.phtml index aed5bc181..7ab6cb227 100644 --- a/airtime_mvc/application/views/scripts/form/embeddableplayer.phtml +++ b/airtime_mvc/application/views/scripts/form/embeddableplayer.phtml @@ -5,6 +5,8 @@ element->getElement('player_display_track_metadata'); ?> + element->getElement('player_stream_mode'); ?> + element->getElement('player_stream_url'); ?> element->getElement('player_preview_label')->renderLabel(); ?> diff --git a/airtime_mvc/public/js/airtime/embeddableplayer/embeddableplayer.js b/airtime_mvc/public/js/airtime/embeddableplayer/embeddableplayer.js index 16cfb95e3..a07a293f2 100644 --- a/airtime_mvc/public/js/airtime/embeddableplayer/embeddableplayer.js +++ b/airtime_mvc/public/js/airtime/embeddableplayer/embeddableplayer.js @@ -1,4 +1,4 @@ -function generateEmbedSrc() +function updateEmbedSrcParams() { var $embedCodeParams = "?"; var $streamMode = getStreamMode(); @@ -20,19 +20,26 @@ function getStreamMode() { } $(document).ready(function() { + $("#player_stream_mode-element").change(function() { var $streamMode = getStreamMode(); if ($streamMode == "a") { $("#player_stream_url-element input[type='radio']").attr("disabled", "disabled"); } else if ($streamMode == "b") { $("#player_stream_url-element input[type='radio']").removeAttr("disabled"); + + $("input[name=player_stream_url]").each(function(i, obj) { + if ($(this).parent().text().indexOf("opus") >= 0) { + $(this).attr("disabled", "disabled"); + } + }); } - generateEmbedSrc(); + updateEmbedSrcParams(); }); $("#player_stream_url-element").change(function() { - generateEmbedSrc(); + updateEmbedSrcParams(); }); });