PluginProbe
Tutor LMS – eLearning and online course solution / 1.6.6
Tutor LMS – eLearning and online course solution v1.6.6
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 All 191 releases
← All changes | classes/Video_Stream.php +130 -130 1.0.81.6.6 View file →
@@ -1,131 +1,131 @@
1 -<?php
2 -/**
3 - * Created by PhpStorm.
4 - * User: mhshohel
5 - * Date: 24/9/18
6 - * Time: 4:03 PM
7 - */
8 -
9 -namespace TUTOR;
10 -
11 -if ( ! defined( 'ABSPATH' ) )
12 - exit;
13 -
14 -
15 -/**
16 - * Class Video_Stream
17 - * @package TUTOR
18 - *
19 - * TUTOR Video Stream Class
20 - * @since v.1.0.0
21 - */
22 -
23 -class Video_Stream {
24 -
25 - private $path = "";
26 - private $stream = "";
27 - private $buffer = 102400;
28 - private $start = -1;
29 - private $end = -1;
30 - private $size = 0;
31 -
32 - private $videoFormats;
33 -
34 - function __construct($filePath) {
35 - $this->videoFormats = apply_filters('tutor_video_types', array("mp4"=>"video/mp4", "webm"=>"video/webm", "ogg"=>"video/ogg")) ;
36 - $this->path = $filePath;
37 - }
38 -
39 - /**
40 - * Open stream
41 - */
42 - private function open() {
43 - if (!($this->stream = fopen($this->path, 'rb'))) {
44 - die('Could not open stream for reading');
45 - }
46 - }
47 -
48 - /**
49 - * Set proper header to serve the video content
50 - */
51 - private function setHeader() {
52 - ob_get_clean();
53 -
54 - header("Content-Type: {$this->videoFormats[strtolower(pathinfo($this->path, PATHINFO_EXTENSION))]}");
55 - header("Cache-Control: max-age=2592000, public");
56 - header("Expires: ".gmdate('D, d M Y H:i:s', time()+2592000) . ' GMT');
57 - header("Last-Modified: ".gmdate('D, d M Y H:i:s', @filemtime($this->path)) . ' GMT' );
58 - $this->start = 0;
59 - $this->size = filesize($this->path);
60 - $this->end = $this->size - 1;
61 - header("Accept-Ranges: 0-".$this->end);
62 -
63 - if (isset($_SERVER['HTTP_RANGE'])) {
64 - $c_end = $this->end;
65 - list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
66 -
67 - if ($range == '-') {
68 - $c_start = $this->size - substr($range, 1);
69 - }else{
70 - $range = explode('-', $range);
71 - $c_start = $range[0];
72 -
73 - $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $c_end;
74 - }
75 - $c_end = ($c_end > $this->end) ? $this->end : $c_end;
76 - if ($c_start > $c_end || $c_start > $this->size - 1 || $c_end >= $this->size) {
77 - header('HTTP/1.1 416 Requested Range Not Satisfiable');
78 - header("Content-Range: bytes $this->start-$this->end/$this->size");
79 - exit;
80 - }
81 - $this->start = $c_start;
82 - $this->end = $c_end;
83 - $length = $this->end - $this->start + 1;
84 - header('HTTP/1.1 206 Partial Content');
85 - header("Content-Length: ".$length);
86 - header("Content-Range: bytes $this->start-$this->end/".$this->size);
87 - header("Accept-Ranges: bytes");
88 - }
89 - else {
90 - header("Content-Length: ".$this->size);
91 - }
92 -
93 - }
94 -
95 - /**
96 - * close currently opened stream
97 - */
98 - private function end() {
99 - fclose($this->stream);
100 - exit;
101 - }
102 -
103 - /**
104 - * perform the streaming of calculated range
105 - */
106 - private function stream() {
107 - $i = $this->start;
108 - set_time_limit(0);
109 - while(!feof($this->stream) && $i <= $this->end) {
110 - $bytesToRead = $this->buffer;
111 - if(($i+$bytesToRead) > $this->end) {
112 - $bytesToRead = $this->end - $i + 1;
113 - }
114 - //$data = fread($this->stream, $bytesToRead);
115 - $data = @stream_get_contents($this->stream, $bytesToRead, $i);
116 - echo $data;
117 - flush();
118 - $i += $bytesToRead;
119 - }
120 - }
121 -
122 - /**
123 - * Start streaming tutor video content
124 - */
125 - function start() {
126 - $this->open();
127 - $this->setHeader();
128 - $this->stream();
129 - $this->end();
130 - }
1 +<?php
2 +/**
3 + * Created by PhpStorm.
4 + * User: themeum
5 + * Date: 24/9/18
6 + * Time: 4:03 PM
7 + */
8 +
9 +namespace TUTOR;
10 +
11 +if ( ! defined( 'ABSPATH' ) )
12 + exit;
13 +
14 +
15 +/**
16 + * Class Video_Stream
17 + * @package TUTOR
18 + *
19 + * TUTOR Video Stream Class
20 + * @since v.1.0.0
21 + */
22 +
23 +class Video_Stream {
24 +
25 + private $path = "";
26 + private $stream = "";
27 + private $buffer = 102400;
28 + private $start = -1;
29 + private $end = -1;
30 + private $size = 0;
31 +
32 + private $videoFormats;
33 +
34 + function __construct($filePath) {
35 + $this->videoFormats = apply_filters('tutor_video_types', array("mp4"=>"video/mp4", "webm"=>"video/webm", "ogg"=>"video/ogg")) ;
36 + $this->path = $filePath;
37 + }
38 +
39 + /**
40 + * Open stream
41 + */
42 + private function open() {
43 + if (!($this->stream = fopen($this->path, 'rb'))) {
44 + die('Could not open stream for reading');
45 + }
46 + }
47 +
48 + /**
49 + * Set proper header to serve the video content
50 + */
51 + private function setHeader() {
52 + ob_get_clean();
53 +
54 + header("Content-Type: {$this->videoFormats[strtolower(pathinfo($this->path, PATHINFO_EXTENSION))]}");
55 + header("Cache-Control: max-age=2592000, public");
56 + header("Expires: ".gmdate('D, d M Y H:i:s', tutor_time()+2592000) . ' GMT');
57 + header("Last-Modified: ".gmdate('D, d M Y H:i:s', @filemtime($this->path)) . ' GMT' );
58 + $this->start = 0;
59 + $this->size = filesize($this->path);
60 + $this->end = $this->size - 1;
61 + header("Accept-Ranges: 0-".$this->end);
62 +
63 + if (isset($_SERVER['HTTP_RANGE'])) {
64 + $c_end = $this->end;
65 + list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
66 +
67 + if ($range == '-') {
68 + $c_start = $this->size - substr($range, 1);
69 + }else{
70 + $range = explode('-', $range);
71 + $c_start = $range[0];
72 +
73 + $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $c_end;
74 + }
75 + $c_end = ($c_end > $this->end) ? $this->end : $c_end;
76 + if ($c_start > $c_end || $c_start > $this->size - 1 || $c_end >= $this->size) {
77 + header('HTTP/1.1 416 Requested Range Not Satisfiable');
78 + header("Content-Range: bytes $this->start-$this->end/$this->size");
79 + exit;
80 + }
81 + $this->start = $c_start;
82 + $this->end = $c_end;
83 + $length = $this->end - $this->start + 1;
84 + header('HTTP/1.1 206 Partial Content');
85 + header("Content-Length: ".$length);
86 + header("Content-Range: bytes $this->start-$this->end/".$this->size);
87 + header("Accept-Ranges: bytes");
88 + }
89 + else {
90 + header("Content-Length: ".$this->size);
91 + }
92 +
93 + }
94 +
95 + /**
96 + * close currently opened stream
97 + */
98 + private function end() {
99 + fclose($this->stream);
100 + exit;
101 + }
102 +
103 + /**
104 + * perform the streaming of calculated range
105 + */
106 + private function stream() {
107 + $i = $this->start;
108 + set_time_limit(0);
109 + while(!feof($this->stream) && $i <= $this->end) {
110 + $bytesToRead = $this->buffer;
111 + if(($i+$bytesToRead) > $this->end) {
112 + $bytesToRead = $this->end - $i + 1;
113 + }
114 + //$data = fread($this->stream, $bytesToRead);
115 + $data = @stream_get_contents($this->stream, $bytesToRead, $i);
116 + echo $data;
117 + flush();
118 + $i += $bytesToRead;
119 + }
120 + }
121 +
122 + /**
123 + * Start streaming tutor video content
124 + */
125 + function start() {
126 + $this->open();
127 + $this->setHeader();
128 + $this->stream();
129 + $this->end();
130 + }
131 131 }