pull in the new byte range code for viewing videos

This commit is contained in:
Isaac Connor 2016-08-31 10:58:50 -04:00
parent fb35f5c48a
commit e74bf3fedf
1 changed files with 60 additions and 22 deletions

View File

@ -25,36 +25,74 @@
// Does not support scaling at this time. // Does not support scaling at this time.
// //
if ( !canView( 'Events' ) ) if ( !canView( 'Events' ) ) {
{
$view = "error"; $view = "error";
return; return;
} }
require_once('includes/Storage.php');
require_once('includes/Event.php'); require_once('includes/Event.php');
$Storage = NULL;
$errorText = false; $errorText = false;
$path = '';
if ( ! empty($_REQUEST['eid'] ) ) { if ( ! empty($_REQUEST['eid'] ) ) {
$Event = new Event( $_REQUEST['eid'] ); $Event = new Event( $_REQUEST['eid'] );
$Storage = $Event->Storage(); $path = $Event->Path().'/'.$Event->DefaultVideo();
$path = $Event->Relative_Path().'/'.$Event->DefaultVideo(); Debug("Path: $path");
Error("Path: $path");
} else { } else {
$errorText = "No video path"; $errorText = "No video path";
} }
if ( $errorText ) if ( $errorText ) {
Error( $errorText ); Error( $errorText );
else{ header ("HTTP/1.0 404 Not Found");
# FIXME guess it from the video file die();
header( 'Content-type: video/mp4' );
if ( ! readfile( $Storage->Path().'/'.$path ) ) {
Error("No bytes read from ". $Storage->Path() . '/'.$path );
} else {
Error("Success sending " . $Storage->Path().'/'.$path );
}
} }
$size = filesize($path);
$fh = @fopen($path,'rb');
if ( ! $fh ) {
header ("HTTP/1.0 404 Not Found");
die();
}
$begin = 0;
$end = $size;
if ( isset( $_SERVER['HTTP_RANGE'] ) ) {
Debug("Using Range " . $_SERVER['HTTP_RANGE'] );
if ( preg_match( '/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches) ) {
$begin = intval( $matches[1] );
if ( ! empty( $matches[2]) ) {
$end = intval( $matches[2] );
}
Debug("Using Range $begin $end size: $size");
}
} # end if HTTP_RANGE
if ( $begin > 0 || $end < $size ) {
header('HTTP/1.0 206 Partial Content');
} else {
header('HTTP/1.0 200 OK');
}
header('Content-type: video/mp4');
header('Accept-Ranges: bytes');
header('Content-Length:'.($end-$begin));
header("Content-Disposition: inline;");
header("Content-Range: bytes $begin-$end/$size");
header("Content-Transfer-Encoding: binary\n");
header('Connection: close');
$cur = $begin;
fseek( $fh, $begin, 0 );
while( ! feof( $fh ) && $cur < $end && ( connection_status() == 0 ) ) {
#Error("Sending $cur");
print fread( $fh, min( 1024*16, $end - $cur ) );
$cur += 1024*16;
usleep(100);
}
?> ?>