Advertisement
5ally

stream-video.php

Apr 10th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.55 KB | None | 0 0
  1. <?php
  2. $file = '/path/to/video.mp4';
  3. if ( ! ( $fp = @fopen($file, 'rb') ) ) {
  4.     header( 'HTTP/1.0 404 Not Found' );
  5.     exit;
  6. }
  7.  
  8. $size   = filesize($file); // File size
  9. $length = $size;           // Content length
  10. $start  = 0;               // Start byte
  11. $end    = $size - 1;       // End byte
  12.  
  13. header('Content-type: video/mp4');
  14. header("Accept-Ranges: 0-$length");
  15. if (isset($_SERVER['HTTP_RANGE'])) {
  16.  
  17.     $c_start = $start;
  18.     $c_end   = $end;
  19.  
  20.     list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
  21.     if (strpos($range, ',') !== false) {
  22.         header('HTTP/1.1 416 Requested Range Not Satisfiable');
  23.         header("Content-Range: bytes $start-$end/$size");
  24.         exit;
  25.     }
  26.     if ($range == '-') {
  27.         $c_start = $size - substr($range, 1);
  28.     }else{
  29.         $range  = explode('-', $range);
  30.         $c_start = $range[0];
  31.         $c_end   = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
  32.     }
  33.     $c_end = ($c_end > $end) ? $end : $c_end;
  34.     if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) {
  35.         header('HTTP/1.1 416 Requested Range Not Satisfiable');
  36.         header("Content-Range: bytes $start-$end/$size");
  37.         exit;
  38.     }
  39.     $start  = $c_start;
  40.     $end    = $c_end;
  41.     $length = $end - $start + 1;
  42.     fseek($fp, $start);
  43.     header('HTTP/1.1 206 Partial Content');
  44. }
  45. header("Content-Range: bytes $start-$end/$size");
  46. header("Content-Length: ".$length);
  47.  
  48.  
  49. $buffer = 1024 * 8;
  50. while(!feof($fp) && ($p = ftell($fp)) <= $end) {
  51.  
  52.     if ($p + $buffer > $end) {
  53.         $buffer = $end - $p + 1;
  54.     }
  55.     set_time_limit(0);
  56.     echo fread($fp, $buffer);
  57.     flush();
  58. }
  59.  
  60. fclose($fp);
  61. exit();
  62. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement