* All rights reserved. * * Subject to the following obligations and disclaimer of warranty, use and * redistribution of this software, in source or object code forms, with or * without modifications are expressly permitted by Whistle Communications; * provided, however, that: * 1. Any and all reproductions of the source or object code must include the * copyright notice above and the following disclaimer of warranties; and * 2. No rights are granted, in any manner or form, to use Whistle * Communications, Inc. trademarks, including the mark "WHISTLE * COMMUNICATIONS" on advertising, endorsements, or otherwise except as * such appears in the above copyright notice or in the software. * * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. * * Author: Rozhuk Ivan * */ /* xml Play list generator for nStream / nStreamLmod widget (Samsung TV) */ /* * Change log * * = 02.04.2012 * + Settings for Play: view_mode, audiotrack_num, total_buf_size, initial_buf_size. * * = 26.03.2012 * * Initial release */ /* Config.*/ $basedir="/usr/data"; /* File system path. */ $baseurl="/DataStore"; /* URL path. */ /* Settings for Play. */ $view_mode="2"; /* 0 = 16x9 FULL, 1 = 14x9 ZOOM, 2 = ORIGINAL / 4x3 KINOZOOM, * 3 = 16x9 ZOOM, 4 = 4x3 */ //$audiotrack_num="1"; /* Default audio track num */ $total_buf_size="20"; /* megabytes; SetTotalBufferSize */ $initial_buf_size="8"; /* megabytes; SetInitialBuffer, SetPendingBuffer */ /* File types. */ $filetypes = array ( 'm3u' => 'playlist', 'xml' => 'playlist', 'flv' => 'stream', 'f4v' => 'stream', '3g2' => 'stream', '3gp' => 'stream', '3gp2' => 'stream', '3gpp' => 'stream', 'asf' => 'stream', 'asx' => 'stream', 'avi' => 'stream', 'dat' => 'stream', 'iso' => 'stream', 'm2t' => 'stream', 'm2ts' => 'stream', 'm2v' => 'stream', 'm4v' => 'stream', 'mp3' => 'stream', 'mp2v' => 'stream', 'mp4' => 'stream', 'mp4v' => 'stream', 'mpe' => 'stream', 'mpeg' => 'stream', 'mpg' => 'stream', 'mov' => 'stream', 'mkv' => 'stream', 'mts' => 'stream', 'swf' => 'stream', 'vob' => 'stream', 'wm' => 'stream', 'wmv' => 'stream', 'wmx' => 'stream', ); /* Auto variables. */ $scripturl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; $baseurlpatch = 'http://'.$_SERVER['HTTP_HOST'].$baseurl; if (substr($baseurlpatch, -1, 1) != '/') $baseurlpatch = $baseurlpatch . '/'; if (substr($basedir, -1, 1) != '/') $basedir = $basedir . '/'; Header("Content-Type: text/xml"); echo "\r\n\r\n"; /* Check input param. */ if (isset($_GET['dir'])) { //check this is okay. $dir = rawurldecode($_GET['dir']); $dirok = true; if (substr($dir, -1, 1) != '/') $dir = $dir . '/'; $dotdotdir = ''; $dirnames = split('/', $dir); for ($di = 0; $di < sizeof($dirnames); $di ++) { if ($di < (sizeof($dirnames)-1)) $dotdotdir = $dotdotdir . $dirnames[$di] . '/'; if ($dirnames[$di] == '..') { $dirok = false; break; } } $dir = $dotdotdir; if (substr($dir, 0, 1) == '/' || !is_dir($basedir.$dir)) $dirok = false; } else { $dir = ''; $dirok = true; } if ($dirok == false) { echo " \r\n\r\n"; die(); } function format_bytes($bytes) { if ($bytes < 1024) return $bytes.' B'; elseif ($bytes < 1048576) return round($bytes / 1024, 2).' KB'; elseif ($bytes < 1073741824) return round($bytes / 1048576, 2).' MB'; elseif ($bytes < 1099511627776) return round($bytes / 1073741824, 2).' GB'; else return round($bytes / 1099511627776, 2).' TB'; } /* Write directory name as playlist name. */ echo " \r\n"; /* Scan directory and add to play list.*/ $entries = scandir($basedir.$dir); $channels_cnt = 0; /* Add dirs to play list. */ foreach ($entries as $entry) { if (substr($entry, 0, 1) != '.' && is_dir($basedir.$dir.$entry)) { //$en_entry = urlencode($entry); $en_entry = implode("/", array_map("rawurlencode", explode("/", $entry))); echo " \r\n"; echo " <![CDATA[$entry]]>\r\n"; echo " \r\n"; echo " \r\n"; echo " "; echo " \r\n"; $channels_cnt ++; } } /* Add files to play list. */ foreach ($entries as $entry) { if (!is_dir($basedir.$dir.$entry)) { $ext = strtolower(substr($entry, strrpos($entry, '.')+1)); if (!isset($filetypes[$ext])) /* Skeep unsupported file type. */ continue; $en_entry = implode("/", array_map("rawurlencode", explode("/", $entry))); $size = format_bytes(filesize($basedir.$dir.$entry)); $date = date("F d Y, H:i:s", filectime($basedir.$dir.$entry)); echo " \r\n"; echo " <![CDATA[$entry]]>\r\n"; if ($filetypes[$ext] == 'playlist') { echo " \r\n"; echo " \r\n"; } else { echo " \r\n"; echo " \r\n"; echo " $view_mode\r\n"; if (isset($audiotrack_num)) echo " $audiotrack_num\r\n"; echo " $total_buf_size\r\n"; echo " $initial_buf_size\r\n"; } echo "
Size: $size
Date: $date]]>
"; echo "
\r\n"; $channels_cnt ++; } } if ($channels_cnt == 0) {/* Empty folder, add fake entry. */ echo " \r\n"; echo " <![CDATA[-Empty folder-]]>\r\n"; echo " stop\r\n"; echo " \r\n"; echo " "; echo " \r\n"; } echo ''; ?>