first release
This commit is contained in:
215
src/index.php
Normal file
215
src/index.php
Normal file
@@ -0,0 +1,215 @@
|
||||
<?php
|
||||
$DIR="/var/data/spielfilme";
|
||||
$POSTER="/var/tmp/spielfilme";
|
||||
$CONVERT=$POSTER;
|
||||
|
||||
function pageUrl() {
|
||||
$pageURL = 'http';
|
||||
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
|
||||
$pageURL .= "://";
|
||||
if ($_SERVER["SERVER_PORT"] != "80") {
|
||||
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
|
||||
} else {
|
||||
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
|
||||
}
|
||||
return $pageURL;
|
||||
}
|
||||
$URL=pageUrl();
|
||||
|
||||
function img($alt, $src, $class="image") {
|
||||
global $URL, $POSTER;
|
||||
if (is_file($POSTER.'/'.$src.'.jpg'))
|
||||
return '<img alt="'.htmlentities($alt).'" src="'.htmlentities($URL.'?img='.$src).'.jpg" class="'.$class.'"/>';
|
||||
}
|
||||
|
||||
if (isset($_GET["img"])) {
|
||||
if (ereg('[^-_.A-Za-z0-9]', $_GET["img"])) {
|
||||
?><html>
|
||||
<body>
|
||||
<p>Illegal Image name: "<code><?php echo htmlentities($_GET["img"]) ?></code>"</p>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
} elseif (is_file($POSTER.'/'.$_GET["img"])) {
|
||||
header('Content-Type: image/jpeg');
|
||||
readfile($POSTER.'/'.$_GET["img"]);
|
||||
exit;
|
||||
} else {
|
||||
?><html>
|
||||
<body>
|
||||
<p>Image not found: "<code><?php echo htmlentities($_GET["img"]) ?></code>"</p>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
}
|
||||
} elseif (isset($_GET["video"])) {
|
||||
if (ereg('[^-_.A-Za-z0-9]', $_GET["video"]) || isset($_GET["mime"]) && ereg('[^-_.A-Za-z0-9]', $_GET["mime"])) {
|
||||
?><html>
|
||||
<body>
|
||||
<p>Illegal Video name: "<code><?php echo htmlentities($_GET["video"]) ?></code>"</p>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
} elseif (is_file($DIR.'/'.$_GET["video"])) {
|
||||
$mime = mime_content_type($DIR.'/'.$_GET["video"]);
|
||||
if (isset($_GET["play"])) {
|
||||
/* if (isset($_GET["convert"])) {
|
||||
switch ($_GET["convert"]) {
|
||||
case "webm":
|
||||
header('Content-type: video/webm');
|
||||
exec('ffmpeg -i "'.$DIR.'/'.$_GET["video"].'" -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 - 2>/dev/null');
|
||||
break;
|
||||
case "mp4":
|
||||
header('Content-type: video/mp4');
|
||||
exec('ffmpeg -i "'.$DIR.'/'.$_GET["video"].'" -qscale 4 -vcodec libx264 -f mp4 - 2>/dev/null');
|
||||
break;
|
||||
}
|
||||
} else { */
|
||||
// Clears the cache and prevent unwanted output
|
||||
ob_clean();
|
||||
@ini_set('error_reporting', E_ALL & ~ E_NOTICE);
|
||||
@apache_setenv('no-gzip', 1);
|
||||
@ini_set('zlib.output_compression', 'Off');
|
||||
|
||||
if (isset($_GET["mime"]))
|
||||
$file = $CONVERT.'/'.$_GET["mime"].'/'.preg_replace('/\.[^.]*$/', '.'.$_GET["mime"], $_GET["video"]);
|
||||
else
|
||||
$file = $DIR.'/'.$_GET["video"]; // The media file's location
|
||||
$size = filesize($file); // The size of the file
|
||||
$mime = mime_content_type($file);
|
||||
|
||||
// Send the content type header
|
||||
header('Content-type: ' . $mime);
|
||||
|
||||
// Check if it's a HTTP range request
|
||||
if(isset($_SERVER['HTTP_RANGE'])){
|
||||
// Parse the range header to get the byte offset
|
||||
$ranges = array_map(
|
||||
'intval', // Parse the parts into integer
|
||||
explode(
|
||||
'-', // The range separator
|
||||
substr($_SERVER['HTTP_RANGE'], 6) // Skip the `bytes=` part of the header
|
||||
)
|
||||
);
|
||||
|
||||
// If the last range param is empty, it means the EOF (End of File)
|
||||
if(!$ranges[1]){
|
||||
$ranges[1] = $size - 1;
|
||||
}
|
||||
|
||||
// Send the appropriate headers
|
||||
header('HTTP/1.1 206 Partial Content');
|
||||
header('Accept-Ranges: bytes');
|
||||
header('Content-Length: ' . ($ranges[1] - $ranges[0])); // The size of the range
|
||||
|
||||
// Send the ranges we offered
|
||||
header(
|
||||
sprintf(
|
||||
'Content-Range: bytes %d-%d/%d', // The header format
|
||||
$ranges[0], // The start range
|
||||
$ranges[1], // The end range
|
||||
$size // Total size of the file
|
||||
)
|
||||
);
|
||||
|
||||
// It's time to output the file
|
||||
$f = fopen($file, 'rb'); // Open the file in binary mode
|
||||
$chunkSize = 8192; // The size of each chunk to output
|
||||
|
||||
// Seek to the requested start range
|
||||
fseek($f, $ranges[0]);
|
||||
|
||||
// Start outputting the data
|
||||
while(true){
|
||||
// Check if we have outputted all the data requested
|
||||
if(ftell($f) >= $ranges[1]){
|
||||
break;
|
||||
}
|
||||
|
||||
// Output the data
|
||||
echo fread($f, $chunkSize);
|
||||
|
||||
// Flush the buffer immediately
|
||||
@ob_flush();
|
||||
flush();
|
||||
}
|
||||
}
|
||||
else {
|
||||
// It's not a range request, output the file anyway
|
||||
header('Content-Length: ' . $size);
|
||||
|
||||
// Read the file
|
||||
@readfile($file);
|
||||
|
||||
// and flush the buffer
|
||||
@ob_flush();
|
||||
flush();
|
||||
}
|
||||
// }
|
||||
} else {
|
||||
?><!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<p>
|
||||
<video controls>
|
||||
<source src="<?php echo $URL.'&play=1' ?>" type="<?php echo $mime ?>">
|
||||
<?php /* <source src="<?php echo $URL.'&play=1&convert=webm' ?>" type="video/webm">*/
|
||||
if ($d=opendir($CONVERT)) {
|
||||
while (false!==($f=readdir($d))) if ($f!='.' && $f!=".." && is_dir($CONVERT.'/'.$f)) {
|
||||
$p=$CONVERT.'/'.$f.'/'.preg_replace('/\.[^.]*$/', '.'.$f, $_GET['video']);
|
||||
if (is_file($p))
|
||||
echo '<source src="'.$URL.'&play=1&mime='.$f.'" type="video/'.$f.'">';
|
||||
}
|
||||
closedir($d);
|
||||
}
|
||||
/*<source src="<?php echo $URL.'&play=1&convert=mp4' ?>" type="video/mp4"> */ ?>
|
||||
Your browser does not support the video tag.
|
||||
</video><br/>
|
||||
[<a href="<?php echo $URL.'&play=1' ?>">Click to Download or copy link to VLC player</a>]
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
}
|
||||
} else {
|
||||
?><html>
|
||||
<body>
|
||||
<p>Video not found: "<code><?php echo htmlentities($_GET["video"]) ?></code>"</p>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
}
|
||||
} else {
|
||||
?><html>
|
||||
<head>
|
||||
<style>
|
||||
ul {list-style-type: none;}
|
||||
ul li {display: inline-block; text-weight: bold; border: .5ex groove green; padding: 0; margin: .5ex;}
|
||||
table {}
|
||||
td.poster {}
|
||||
img.poster {height: 210px;}
|
||||
img.preview {height: 70px;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Videofilme</h1>
|
||||
<ul>
|
||||
<?php
|
||||
if ($d=opendir($DIR)) {
|
||||
while (false!==($f=readdir($d))) if (is_file($DIR.'/'.$f)) {
|
||||
$b=ereg_replace('\.[^.]*', '', $f);
|
||||
$t=ereg_replace(' - ', '<br/>', ereg_replace('[0-9]*-[^ ]*$', '', ereg_replace('( - )?(part|[cC][dD]|[Tt][eE][iI][lL])[0-9]+', '', ereg_replace('_', ' ', htmlentities($b)))));
|
||||
if (preg_match('/.*(part|[cC][dD]|[Tt][eE][iI][lL])([0-9]+).*/', $b, $m))
|
||||
$t.='<br/>Teil '.$m[2];
|
||||
$t=ereg_replace('<br/>$', '', ereg_replace('(<br/>)+', '<br/>', $t));
|
||||
echo '<li><table><tr><th colspan="2" class="poster"><a href="'.htmlentities($URL.'?video='.urlencode($f).'&play=1').'">'.$t.'</a></td></tr><tr><td rowspan="3"><a href="'.htmlentities($URL.'?video='.urlencode($f)).'">'.img($b, $b, "poster").'</a></td><td>'.img("$b preview 25%", "$b-25", "preview").'</td></tr><tr><td>'.img("$b preview 50%", "$b-50", "preview").'</td></tr><tr><td>'.img("$b preview 75%", "$b-75", "preview").'</td></tr></table></li>'."\n";
|
||||
}
|
||||
closedir($d);
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
<?php } ?>
|
Reference in New Issue
Block a user