/**
  * Handles the Shortcode for: `[s2File /]`.
  *
  * @package s2Member\s2File
  * @since 110926
  *
  * @attaches-to ``add_shortcode("s2File");``
  *
  * @param array $attr An array of Attributes.
  * @param str $content Content inside the Shortcode.
  * @param str $shortcode The actual Shortcode name itself.
  * @return str Value of requested File Download URL, streamer array element; or null on failure.
  */
 public static function sc_get_file($attr = FALSE, $content = FALSE, $shortcode = FALSE)
 {
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__s2member_before_sc_get_file", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     $attr = c_ws_plugin__s2member_utils_strings::trim_qts_deep((array) $attr);
     /* Force array; trim quote entities. */
     /**/
     $attr = shortcode_atts(array("download" => "", "download_key" => "", "stream" => "", "inline" => "", "storage" => "", "remote" => "", "ssl" => "", "rewrite" => "", "rewrite_base" => "", "skip_confirmation" => "", "url_to_storage_source" => "", "count_against_user" => "", "check_user" => "", "get_streamer_json" => "", "get_streamer_array" => ""), $attr);
     /**/
     eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
     do_action("ws_plugin__s2member_before_sc_get_file_after_shortcode_atts", get_defined_vars());
     unset($__refs, $__v);
     /* Unset defined __refs, __v. */
     /**/
     $get_streamer_json = filter_var($attr["get_streamer_json"], FILTER_VALIDATE_BOOLEAN);
     /* Getting streamer? */
     $get_streamer_array = filter_var($attr["get_streamer_array"], FILTER_VALIDATE_BOOLEAN);
     /* Streamer? */
     $get_streamer_json = $get_streamer_array = $get_streamer_array || $get_streamer_json ? true : false;
     /**/
     foreach ($attr as $key => $value) {
         /* Now we need to go through and a `file_` prefix  to certain Attribute keys, for compatibility. */
         if (strlen($value) && in_array($key, array("download", "download_key", "stream", "inline", "storage", "remote", "ssl", "rewrite", "rewrite_base"))) {
             $config["file_" . $key] = $value;
         } else {
             if (strlen($value) && !in_array($key, array("get_streamer_json", "get_streamer_array"))) {
                 /* Else, exclude? */
                 $config[$key] = $value;
             }
         }
     }
     /**/
     unset($key, $value);
     /* Ditch these now. We don't want these bleeding into Hooks/Filters anyway. */
     /**/
     if (!empty($config) && isset($config["file_download"])) {
         $_get = c_ws_plugin__s2member_files::create_file_download_url($config, $get_streamer_array);
         /**/
         if ($get_streamer_array && $get_streamer_json && is_array($_get)) {
             $get = json_encode($_get);
         } else {
             if ($get_streamer_array && $get_streamer_json) {
                 $get = "null";
             } else {
                 if (!empty($_get)) {
                     /* Else ``$get``. */
                     $get = $_get;
                 }
             }
         }
         /* Default return. */
     }
     /**/
     return apply_filters("ws_plugin__s2member_sc_get_file", isset($get) ? $get : null, get_defined_vars());
 }
 function s2member_file_download_url($config = FALSE, $get_streamer_array = FALSE)
 {
     return c_ws_plugin__s2member_files::create_file_download_url($config, $get_streamer_array);
 }
Example #3
0
 /**
  * Handles the Shortcode for: `[s2Stream /]`.
  *
  * @package s2Member\s2File
  * @since 130119
  *
  * @attaches-to ``add_shortcode('s2Stream');``
  *
  * @param array  $attr An array of Attributes.
  * @param string $content Content inside the Shortcode.
  * @param string $shortcode The actual Shortcode name itself.
  *
  * @return string HTML markup that produces an audio/video stream for a specific player.
  */
 public static function sc_get_stream($attr = array(), $content = '', $shortcode = '')
 {
     foreach (array_keys(get_defined_vars()) as $__v) {
         $__refs[$__v] =& ${$__v};
     }
     do_action('ws_plugin__s2member_before_sc_get_stream', get_defined_vars());
     unset($__refs, $__v);
     // Housekeeping.
     $attr = c_ws_plugin__s2member_utils_strings::trim_qts_deep((array) $attr);
     $attr = shortcode_atts(array('download' => '', 'file_download' => '', 'download_key' => '', 'stream' => 'yes', 'inline' => 'yes', 'storage' => '', 'remote' => '', 'ssl' => '', 'rewrite' => 'yes', 'rewrite_base' => '', 'skip_confirmation' => '', 'url_to_storage_source' => 'yes', 'count_against_user' => 'yes', 'check_user' => 'yes', 'player' => 'jwplayer-v6-rtmp', 'player_id' => 's2-stream-' . md5(uniqid('', TRUE)), 'player_path' => '/jwplayer/jwplayer.js', 'player_key' => '', 'player_title' => '', 'player_image' => '', 'player_mediaid' => '', 'player_description' => '', 'player_captions' => '', 'player_resolutions' => '', 'player_controls' => 'yes', 'player_skin' => '', 'player_stretching' => 'uniform', 'player_width' => '480', 'player_height' => '270', 'player_aspectratio' => '', 'player_autostart' => 'no', 'player_fallback' => 'yes', 'player_mute' => 'no', 'player_primary' => $attr['player'] === 'jw-player-v6' ? 'html5' : 'flash', 'player_repeat' => 'no', 'player_startparam' => '', 'player_option_blocks' => ''), $attr);
     $attr['download'] = !empty($attr['file_download']) ? $attr['file_download'] : $attr['download'];
     foreach (array_keys(get_defined_vars()) as $__v) {
         $__refs[$__v] =& ${$__v};
     }
     do_action('ws_plugin__s2member_before_sc_get_stream_after_shortcode_atts', get_defined_vars());
     unset($__refs, $__v);
     // Housekeeping.
     foreach ($attr as $key => $value) {
         // Now we need to go through and a `file_` prefix  to certain Attribute keys, for compatibility.
         if (strlen($value) && in_array($key, array('download', 'download_key', 'stream', 'inline', 'storage', 'remote', 'ssl', 'rewrite', 'rewrite_base'))) {
             $config['file_' . $key] = $value;
         } else {
             if (strlen($value) && !in_array($key, array('file_download', 'player')) && strpos($key, 'player_') !== 0) {
                 $config[$key] = $value;
             }
         }
     }
     unset($key, $value);
     // Ditch these now. We don't want these bleeding into Hooks/Filters anyway.
     if (!empty($config) && isset($config['file_download'])) {
         if ($attr['player_resolutions'] && c_ws_plugin__s2member_utils_conds::pro_is_installed()) {
             $file_download_extension = strtolower(ltrim((string) strrchr(basename($config['file_download']), '.'), '.'));
             $file_download_resolution_wo_extension = substr($config['file_download'], 0, -(strlen($file_download_extension) + 1));
             $file_download_wo_resolution_extension = preg_replace('/\\-r[0-9]+([^.]*)$/i', '', $file_download_resolution_wo_extension);
             // e.g., `r720p-HD` is removed here.
             $file_download_resolutions = array();
             // Initialize the array of resolutions.
             foreach (preg_split('/[,;\\s]+/', $attr['player_resolutions'], NULL, PREG_SPLIT_NO_EMPTY) as $_player_resolution) {
                 $_player_resolution = ltrim($_player_resolution, 'Rr');
                 // Remove R|r prefix.
                 $file_download_resolutions[$_player_resolution] = $file_download_wo_resolution_extension . '-r' . $_player_resolution . '.' . $file_download_extension;
             }
             unset($_player_resolution);
             // Housekeeping.
             $file_download_urls = array();
             // Initialize array of all file download urls.
             foreach ($file_download_resolutions as $_player_resolution => $_file_download_resolution) {
                 $_file_download_config = array_merge($config, array('file_download' => $_file_download_resolution));
                 if ($file_download_urls) {
                     // If this is a ANOTHER resolution, don't count it against the user.
                     $_file_download_config = array_merge($_file_download_config, array('check_user' => FALSE, 'count_against_user' => FALSE));
                 }
                 if (!($file_download_urls[str_replace(array('_', '-'), ' ', $_player_resolution)] = c_ws_plugin__s2member_files::create_file_download_url($_file_download_config, TRUE))) {
                     return apply_filters('ws_plugin__s2member_sc_get_stream', NULL, get_defined_vars());
                 }
                 // Failure.
             }
             unset($_player_resolution, $_file_download_resolution, $_file_download_config);
             // Housekeeping.
         } else {
             $file_download_urls = array(c_ws_plugin__s2member_files::create_file_download_url($config, TRUE));
         }
         // Default behavior.
         if ($file_download_urls && $attr['player'] && is_file($template = dirname(dirname(__FILE__)) . '/templates/players/' . $attr['player'] . '.php') && $attr['player_id'] && $attr['player_path']) {
             $template = is_file(TEMPLATEPATH . '/' . basename($template)) ? TEMPLATEPATH . '/' . basename($template) : $template;
             $template = is_file(get_stylesheet_directory() . '/' . basename($template)) ? get_stylesheet_directory() . '/' . basename($template) : $template;
             $template = is_file(WP_CONTENT_DIR . '/' . basename($template)) ? WP_CONTENT_DIR . '/' . basename($template) : $template;
             if (strpos($attr['player'], 'jwplayer-v6') === 0) {
                 $player = trim(c_ws_plugin__s2member_utilities::evl(file_get_contents($template)));
                 $_first_file_download_url = array();
                 // Holds the first one.
                 $_last_file_download_url = array();
                 // Holds the last one.
                 $_uses_rtmp_streamers = FALSE;
                 // Streamers use RTMP?
                 $_total_player_sources = count($file_download_urls);
                 // Total sources.
                 $_player_sources_counter = 1;
                 // Player sources counter; needed by the loop below.
                 $player_resolution_aspect_ratio_w = 16;
                 // Default aspect ratio width.
                 $player_resolution_aspect_ratio_h = 9;
                 // Default aspect ratio in height.
                 if ($attr['player_aspectratio'] && preg_match('/^[0-9]+\\:[0-9]+$/', $attr['player_aspectratio'])) {
                     list($player_resolution_aspect_ratio_w, $player_resolution_aspect_ratio_h) = explode(':', $attr['player_aspectratio']);
                 }
                 $player_resolution_aspect_ratio_w = (int) $player_resolution_aspect_ratio_w;
                 // Force integer value.
                 $player_resolution_aspect_ratio_h = (int) $player_resolution_aspect_ratio_h;
                 // Force integer value.
                 // See: <http://wsharks.com/1yzjAl6> and <http://wsharks.com/1yzkhea> regarging the SMIL bitrate hints given here.
                 $player_resolution_bitrates = array(2160 => '35000000', 1440 => '10000000', 1080 => '8000000', 720 => '5000000', 640 => '2500001', 480 => '2500000', 360 => '1000000', 320 => '999999', 240 => '500000', 180 => '300000');
                 $player_resolution_bitrates = apply_filters('ws_plugin__s2member_sc_get_stream_resolution_bitrates', $player_resolution_bitrates, get_defined_vars());
                 $player_resolution_sources_smil_file_id = md5(serialize($attr) . $_SERVER['REMOTE_ADDR']);
                 // Initialize SMIL ID.
                 $player_resolution_sources_smil_file_url = home_url('/s2member-rsf-file.smil?s2member_rsf_file=' . urlencode($player_resolution_sources_smil_file_id) . '&s2member_rsf_file_ip=' . urlencode($_SERVER['REMOTE_ADDR']));
                 $player_resolution_sources_smil_file_url = c_ws_plugin__s2member_utils_urls::add_s2member_sig($player_resolution_sources_smil_file_url);
                 $player_resolution_sources_smil_file_contents = '';
                 // Initialize player sources SMIL file contents.
                 $player_sources = '';
                 // Initialize player sources; empty string.
                 foreach ($file_download_urls as $_file_download_url_label => $_file_download_url) {
                     $_is_first_file_download_url = $_player_sources_counter <= 1;
                     $_is_last_file_download_url = $_player_sources_counter >= $_total_player_sources;
                     if ($_is_first_file_download_url) {
                         // We base this conditional on the first streamer.
                         $_uses_rtmp_streamers = stripos($_file_download_url['streamer'], 'rtmp') === 0;
                     }
                     switch ($attr['player']) {
                         case 'jwplayer-v6':
                             // Default w/ a direct URL (very simple).
                             $player_sources .= ',{';
                             // Open this source; JSON object properties.
                             $player_sources .= "'file': '" . c_ws_plugin__s2member_utils_strings::esc_js_sq($_file_download_url['url']) . "'";
                             if (is_string($_file_download_url_label)) {
                                 $player_sources .= ",'label': '" . c_ws_plugin__s2member_utils_strings::esc_js_sq($_file_download_url_label) . "'";
                             }
                             if ($_is_first_file_download_url) {
                                 $player_sources .= ",'default': 'true'";
                             }
                             $player_sources .= '}';
                             // Close this source.
                             break;
                             // Break switch loop.
                         // Break switch loop.
                         case 'jwplayer-v6-rtmp':
                             // RTMP w/ downloadable fallback (mobile compatibility).
                         // RTMP w/ downloadable fallback (mobile compatibility).
                         case 'jwplayer-v6-rtmp-only':
                             // RTMP streaming only (flash player only).
                             if ($attr['player_resolutions'] && $_total_player_sources > 1 && $_uses_rtmp_streamers) {
                                 if ($_is_first_file_download_url) {
                                     $player_sources .= ',{';
                                     // Open this source; JSON object properties.
                                     $player_sources .= "'file': '" . c_ws_plugin__s2member_utils_strings::esc_js_sq($player_resolution_sources_smil_file_url) . "'";
                                     if ($_is_first_file_download_url) {
                                         $player_sources .= ",'default': 'true'";
                                     }
                                     $player_sources .= '}';
                                     // Close this source.
                                 }
                                 $_file_download_url['smil']['height'] = (int) $_file_download_url_label;
                                 // e.g., `720p-HD` becomes `720`.
                                 if (!$_file_download_url['smil']['height']) {
                                     $_file_download_url['smil']['height'] = 720;
                                 }
                                 // Use a default height if invalid.
                                 $_file_download_url['smil']['width'] = ceil($_file_download_url['smil']['height'] / $player_resolution_aspect_ratio_h * $player_resolution_aspect_ratio_w);
                                 $_file_download_url['smil']['system-bitrate'] = '1';
                                 // Default value.
                                 if (!empty($player_resolution_bitrates[$_file_download_url['smil']['height']])) {
                                     $_file_download_url['smil']['system-bitrate'] = $player_resolution_bitrates[$_file_download_url['smil']['height']];
                                 }
                                 $player_resolution_sources_smil_file_contents .= '<video src="' . esc_attr($_file_download_url['file']) . '"' . ' width="' . esc_attr($_file_download_url['smil']['width']) . '"' . ' height="' . esc_attr($_file_download_url['smil']['height']) . '"' . ' system-bitrate="' . esc_attr($_file_download_url['smil']['system-bitrate']) . '" />';
                             } else {
                                 $player_sources .= ',{';
                                 // Open this source; JSON object properties.
                                 $player_sources .= "'file': '" . c_ws_plugin__s2member_utils_strings::esc_js_sq($_file_download_url['streamer'] . '/' . $_file_download_url['prefix'] . $_file_download_url['file']) . "'";
                                 if (is_string($_file_download_url_label)) {
                                     $player_sources .= ",'label': '" . c_ws_plugin__s2member_utils_strings::esc_js_sq($_file_download_url_label) . "'";
                                 }
                                 if ($_is_first_file_download_url) {
                                     $player_sources .= ",'default': 'true'";
                                 }
                                 $player_sources .= '}';
                                 // Close this source.
                             }
                             if ($_is_last_file_download_url && $attr['player'] === 'jwplayer-v6-rtmp') {
                                 $player_sources .= ',{';
                                 // Open this source; JSON object properties.
                                 $player_sources .= "'file': '" . c_ws_plugin__s2member_utils_strings::esc_js_sq($_file_download_url['url']) . "'";
                                 $player_sources .= '}';
                                 // Close this source.
                             }
                             break;
                             // Break switch loop.
                     }
                     if ($_is_first_file_download_url) {
                         $_first_file_download_url = $_file_download_url;
                         // Record for use later.
                         $player = preg_replace('/%%streamer%%/', $_file_download_url['streamer'], $player);
                         $player = preg_replace('/%%prefix%%/', $_file_download_url['prefix'], $player);
                         $player = preg_replace('/%%file%%/', $_file_download_url['file'], $player);
                         $player = preg_replace('/%%url%%/', $_file_download_url['url'], $player);
                     }
                     if ($_is_last_file_download_url) {
                         $_last_file_download_url = $_file_download_url;
                         // Record for use later.
                     }
                     $_player_sources_counter++;
                     // Increment the counter.
                 }
                 $player_sources = '[' . trim($player_sources, ',') . ']';
                 // Build array.
                 if ($player_resolution_sources_smil_file_contents && $_first_file_download_url) {
                     $player_resolution_sources_smil_file_contents = '<smil>' . ' <head><meta base="' . esc_attr($_first_file_download_url['streamer']) . '" /></head>' . ' <body><switch>' . $player_resolution_sources_smil_file_contents . '</switch></body>' . '</smil>';
                     set_transient('s2m_rsf_' . $player_resolution_sources_smil_file_id, $player_resolution_sources_smil_file_contents, 86400);
                 }
                 unset($_first_file_download_url, $_last_file_download_url, $_uses_rtmp_streamers, $_total_player_sources, $_player_sources_counter, $_is_first_file_download_url, $_is_last_file_download_url, $_file_download_url_label, $_file_download_url);
                 $player = preg_replace('/%%player_id%%/', $attr['player_id'], $player);
                 $player = preg_replace('/%%player_path%%/', $attr['player_path'], $player);
                 $player = preg_replace('/%%player_key%%/', $attr['player_key'], $player);
                 $player = preg_replace('/%%player_title%%/', $attr['player_title'], $player);
                 $player = preg_replace('/%%player_image%%/', $attr['player_image'], $player);
                 $player = preg_replace('/%%player_mediaid%%/', $attr['player_mediaid'], $player);
                 $player = preg_replace('/%%player_description%%/', $attr['player_description'], $player);
                 if ($attr['player_captions'] = c_ws_plugin__s2member_utils_strings::trim($attr['player_captions'], NULL, '[]')) {
                     $player = preg_replace('/%%player_captions%%/', '[' . (strpos($attr['player_captions'], ':') !== FALSE ? $attr['player_captions'] : base64_decode($attr['player_captions'])) . ']', $player);
                 } else {
                     $player = preg_replace('/%%player_captions%%/', '[]', $player);
                 }
                 $player = preg_replace('/%%player_sources%%/', $player_sources, $player);
                 // Sources are constructed dynamically.
                 $player = preg_replace('/%%player_controls%%/', filter_var($attr['player_controls'], FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false', $player);
                 $player = preg_replace('/%%player_width%%/', strpos($attr['player_width'], '%') !== FALSE ? "'" . $attr['player_width'] . "'" : (int) $attr['player_width'], $player);
                 $player = preg_replace('/%%player_height%%/', $attr['player_aspectratio'] ? "''" : (strpos($attr['player_height'], '%') !== FALSE ? "'" . $attr['player_height'] . "'" : (int) $attr['player_height']), $player);
                 $player = preg_replace('/%%player_aspectratio%%/', $attr['player_aspectratio'], $player);
                 $player = preg_replace('/%%player_stretching%%/', $attr['player_stretching'], $player);
                 $player = preg_replace('/%%player_skin%%/', $attr['player_skin'], $player);
                 $player = preg_replace('/%%player_autostart%%/', filter_var($attr['player_autostart'], FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false', $player);
                 $player = preg_replace('/%%player_fallback%%/', filter_var($attr['player_fallback'], FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false', $player);
                 $player = preg_replace('/%%player_mute%%/', filter_var($attr['player_mute'], FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false', $player);
                 $player = preg_replace('/%%player_repeat%%/', filter_var($attr['player_repeat'], FILTER_VALIDATE_BOOLEAN) ? 'true' : 'false', $player);
                 $player = preg_replace('/%%player_startparam%%/', $attr['player_startparam'], $player);
                 $player = preg_replace('/%%player_primary%%/', $attr['player_primary'], $player);
                 $player = preg_replace('/%%player_option_blocks%%/', strpos($attr['player_option_blocks'], ':') !== FALSE ? $attr['player_option_blocks'] : base64_decode($attr['player_option_blocks']), $player);
             }
         }
     }
     return apply_filters('ws_plugin__s2member_sc_get_stream', isset($player) ? $player : NULL, get_defined_vars());
 }
Example #4
0
 /**
  * Handles the Shortcode for: `[s2Stream /]`.
  *
  * @package s2Member\s2File
  * @since 130119
  *
  * @attaches-to ``add_shortcode("s2Stream");``
  *
  * @param array $attr An array of Attributes.
  * @param str $content Content inside the Shortcode.
  * @param str $shortcode The actual Shortcode name itself.
  * @return str HTML markup that produces an audio/video stream for a specific player.
  */
 public static function sc_get_stream($attr = FALSE, $content = FALSE, $shortcode = FALSE)
 {
     foreach (array_keys(get_defined_vars()) as $__v) {
         $__refs[$__v] =& ${$__v};
     }
     do_action("ws_plugin__s2member_before_sc_get_stream", get_defined_vars());
     unset($__refs, $__v);
     $attr = c_ws_plugin__s2member_utils_strings::trim_qts_deep((array) $attr);
     $attr = shortcode_atts(array("download" => "", "download_key" => "", "stream" => "yes", "inline" => "yes", "storage" => "", "remote" => "", "ssl" => "", "rewrite" => "yes", "rewrite_base" => "", "skip_confirmation" => "", "url_to_storage_source" => "yes", "count_against_user" => "yes", "check_user" => "yes", "file_download" => "", "player" => "jwplayer-v6-rtmp", "player_id" => "s2-stream-" . md5(uniqid("", TRUE)), "player_path" => "/jwplayer/jwplayer.js", "player_key" => "", "player_title" => "", "player_image" => "", "player_mediaid" => "", "player_description" => "", "player_captions" => "", "player_controls" => "yes", "player_skin" => "", "player_stretching" => "uniform", "player_width" => "480", "player_height" => "270", "player_aspectratio" => "", "player_autostart" => "no", "player_fallback" => "yes", "player_mute" => "no", "player_primary" => $attr["player"] === "jw-player-v6" ? "html5" : "flash", "player_repeat" => "no", "player_startparam" => "", "player_option_blocks" => ""), $attr);
     $attr["download"] = !empty($attr["file_download"]) ? $attr["file_download"] : $attr["download"];
     foreach (array_keys(get_defined_vars()) as $__v) {
         $__refs[$__v] =& ${$__v};
     }
     do_action("ws_plugin__s2member_before_sc_get_stream_after_shortcode_atts", get_defined_vars());
     unset($__refs, $__v);
     foreach ($attr as $key => $value) {
         if (strlen($value) && in_array($key, array("download", "download_key", "stream", "inline", "storage", "remote", "ssl", "rewrite", "rewrite_base"))) {
             $config["file_" . $key] = $value;
         } else {
             if (strlen($value) && !in_array($key, array("file_download", "player")) && strpos($key, "player_") !== 0) {
                 $config[$key] = $value;
             }
         }
     }
     unset($key, $value);
     if (!empty($config) && isset($config["file_download"])) {
         $_get = c_ws_plugin__s2member_files::create_file_download_url($config, TRUE);
         if (is_array($_get) && !empty($_get) && $attr["player"] && file_exists($template = dirname(dirname(__FILE__)) . "/templates/players/" . $attr["player"] . ".php") && $attr["player_id"] && $attr["player_path"]) {
             $template = file_exists(TEMPLATEPATH . "/" . basename($template)) ? TEMPLATEPATH . "/" . basename($template) : $template;
             $template = file_exists(WP_CONTENT_DIR . "/" . basename($template)) ? WP_CONTENT_DIR . "/" . basename($template) : $template;
             if (strpos($attr["player"], "jwplayer-v6") === 0) {
                 $get = trim(c_ws_plugin__s2member_utilities::evl(file_get_contents($template)));
                 $get = preg_replace("/%%streamer%%/", $_get["streamer"], $get);
                 $get = preg_replace("/%%prefix%%/", $_get["prefix"], $get);
                 $get = preg_replace("/%%file%%/", $_get["file"], $get);
                 $get = preg_replace("/%%url%%/", $_get["url"], $get);
                 $get = preg_replace("/%%player_id%%/", $attr["player_id"], $get);
                 $get = preg_replace("/%%player_path%%/", $attr["player_path"], $get);
                 $get = preg_replace("/%%player_key%%/", $attr["player_key"], $get);
                 $get = preg_replace("/%%player_title%%/", $attr["player_title"], $get);
                 $get = preg_replace("/%%player_image%%/", $attr["player_image"], $get);
                 $get = preg_replace("/%%player_mediaid%%/", $attr["player_mediaid"], $get);
                 $get = preg_replace("/%%player_description%%/", $attr["player_description"], $get);
                 if ($attr["player_captions"] = c_ws_plugin__s2member_utils_strings::trim($attr["player_captions"], null, "[]")) {
                     $get = preg_replace("/%%player_captions%%/", "[" . (strpos($attr["player_captions"], ":") !== false ? $attr["player_captions"] : base64_decode($attr["player_captions"])) . "]", $get);
                 } else {
                     $get = preg_replace("/%%player_captions%%/", "[]", $get);
                 }
                 $get = preg_replace("/%%player_controls%%/", filter_var($attr["player_controls"], FILTER_VALIDATE_BOOLEAN) ? "true" : "false", $get);
                 $get = preg_replace("/%%player_width%%/", strpos($attr["player_width"], "%") !== FALSE ? "'" . $attr["player_width"] . "'" : (int) $attr["player_width"], $get);
                 $get = preg_replace("/%%player_height%%/", $attr["player_aspectratio"] ? "''" : (strpos($attr["player_height"], "%") !== FALSE ? "'" . $attr["player_height"] . "'" : (int) $attr["player_height"]), $get);
                 $get = preg_replace("/%%player_aspectratio%%/", $attr["player_aspectratio"], $get);
                 $get = preg_replace("/%%player_skin%%/", $attr["player_skin"], $get);
                 $get = preg_replace("/%%player_stretching%%/", $attr["player_stretching"], $get);
                 $get = preg_replace("/%%player_autostart%%/", filter_var($attr["player_autostart"], FILTER_VALIDATE_BOOLEAN) ? "true" : "false", $get);
                 $get = preg_replace("/%%player_fallback%%/", filter_var($attr["player_fallback"], FILTER_VALIDATE_BOOLEAN) ? "true" : "false", $get);
                 $get = preg_replace("/%%player_mute%%/", filter_var($attr["player_mute"], FILTER_VALIDATE_BOOLEAN) ? "true" : "false", $get);
                 $get = preg_replace("/%%player_primary%%/", $attr["player_primary"], $get);
                 $get = preg_replace("/%%player_repeat%%/", filter_var($attr["player_repeat"], FILTER_VALIDATE_BOOLEAN) ? "true" : "false", $get);
                 $get = preg_replace("/%%player_startparam%%/", $attr["player_startparam"], $get);
                 $get = preg_replace("/%%player_option_blocks%%/", strpos($attr["player_option_blocks"], ":") !== false ? $attr["player_option_blocks"] : base64_decode($attr["player_option_blocks"]), $get);
             }
         }
     }
     return apply_filters("ws_plugin__s2member_sc_get_stream", isset($get) ? $get : null, get_defined_vars());
 }