PluginProbe ʕ •ᴥ•ʔ
Presto Player / 2.3.3
Presto Player v2.3.3
4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / inc / Services / Streamer.php
presto-player / inc / Services Last commit date
API 2 years ago Blocks 5 years ago License 5 years ago AdminNotice.php 5 years ago AdminNotices.php 4 years ago AjaxActions.php 2 years ago Blocks.php 4 years ago Compatibility.php 4 years ago Menu.php 2 years ago Migrations.php 5 years ago Player.php 2 years ago ProCompatibility.php 2 years ago ReusableVideos.php 2 years ago Scripts.php 2 years ago Settings.php 4 years ago Shortcodes.php 2 years ago Streamer.php 4 years ago Translation.php 2 years ago VideoPostType.php 2 years ago
Streamer.php
130 lines
1 <?php
2
3 namespace PrestoPlayer\Services;
4
5 class Streamer
6 {
7 private $path = '';
8 private $stream = '';
9 private $buffer = 0;
10 private $start = -1;
11 private $end = -1;
12 private $size = 0;
13 private $type = '';
14
15 function __construct($file_path, $file_type, $buffer = 102400)
16 {
17 $this->path = $file_path;
18 $this->type = $file_type;
19 $this->buffer = $buffer;
20 }
21
22 /**
23 * Start streaming video content
24 */
25 function start()
26 {
27 $this->open();
28 $this->set_header();
29 $this->stream();
30 $this->end();
31 }
32
33 /**
34 * Open stream
35 */
36 private function open()
37 {
38
39 $this->stream = fopen($this->path, 'rb');
40
41 if (!$this->stream) {
42 die('Could not open stream for reading');
43 }
44 }
45
46 /**
47 * Set proper header to serve the video content
48 */
49 private function set_header()
50 {
51
52 $this->start = 0;
53 $this->size = filesize($this->path);
54 $this->end = $this->size - 1;
55
56 ob_get_clean();
57 header('Content-Type: '. $this->type);
58 header('Cache-Control: max-age=2592000, public');
59 header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 2592000) . ' GMT');
60 header('Last-Modified: ' . gmdate('D, d M Y H:i:s', @filemtime($this->path)) . ' GMT');
61 header('Accept-Ranges: 0-' . $this->end);
62
63 if (isset($_SERVER['HTTP_RANGE'])) {
64
65 $c_start = $this->start;
66 $c_end = $this->end;
67
68 list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
69 if (strpos($range, ',') !== false) {
70 header('HTTP/1.1 416 Requested Range Not Satisfiable');
71 header("Content-Range: bytes $this->start-$this->end/$this->size");
72 exit;
73 }
74 if ('-' == $range) {
75 $c_start = $this->size - substr($range, 1);
76 } else {
77 $range = explode('-', $range);
78 $c_start = $range[0];
79 $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $c_end;
80 }
81 $c_end = ($c_end > $this->end) ? $this->end : $c_end;
82 if ($c_start > $c_end || $c_start > $this->size - 1 || $c_end >= $this->size) {
83 header('HTTP/1.1 416 Requested Range Not Satisfiable');
84 header("Content-Range: bytes $this->start-$this->end/$this->size");
85 exit;
86 }
87 $this->start = $c_start;
88 $this->end = $c_end;
89 $length = $this->end - $this->start + 1;
90 fseek($this->stream, $this->start);
91 header('HTTP/1.1 206 Partial Content');
92 header('Content-Length: ' . $length);
93 header("Content-Range: bytes $this->start-$this->end/" . $this->size);
94 } else {
95
96 header('Content-Length: ' . $this->size);
97 }
98 }
99
100 /**
101 * perform the streaming of calculated range
102 */
103 private function stream()
104 {
105
106 $i = $this->start;
107 set_time_limit(0);
108
109 while (!feof($this->stream) && $i <= $this->end) {
110 $bytes_to_read = $this->buffer;
111 if (($i + $bytes_to_read) > $this->end) {
112 $bytes_to_read = $this->end - $i + 1;
113 }
114 $data = fread($this->stream, $bytes_to_read);
115 echo $data;
116 flush();
117 $i += $bytes_to_read;
118 }
119 }
120
121 /**
122 * close curretly opened stream
123 */
124 private function end()
125 {
126 fclose($this->stream);
127 exit;
128 }
129 }
130