Я использую видео тег для воспроизведения видео.
Я использую php-файлы для воспроизведения следующим образом:
<video id="playvideo" preload="auto" width="845" height="395" poster="http://img.ruphp.com/php/oceans-clip.png"> <source src="../getvideo_webm.php" type='video/webm' /> <source src="../getvideo_mp4.php" type='video/mp4'/> <source src="../getvideo_ogv.php" type='video/ogg' /> </video>
Все .php-файлы отлично воспроизводятся, когда я проверяю их непосредственно в браузере. Но вышеуказанная настройка со всеми .php в качестве исходных файлов не будет воспроизводиться. Если я дам прямой источник .mp4, он будет играть нормально.
Getvideo_mp4.php выглядит так:
$path = 'oceans-clip.mp4'; if (file_exists($path)) { $size=filesize($path); $fm=@fopen($path,'rb'); if(!$fm) { // You can also redirect here header ("HTTP/1.0 404 Not Found"); die(); } $begin=0; $end=$size; if(isset($_SERVER['HTTP_RANGE'])) { if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'],$matches)){ $begin=intval($matches[0]); if(!empty($matches[1])) { $end=intval($matches[1]); } } } 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($fm,$begin,0); while(!feof($fm)&&$cur<$end&&(connection_status()==0)) { print fread($fm,min(1024*16,$end-$cur)); $cur+=1024*16; usleep(1000); } die(); }
в$path = 'oceans-clip.mp4'; if (file_exists($path)) { $size=filesize($path); $fm=@fopen($path,'rb'); if(!$fm) { // You can also redirect here header ("HTTP/1.0 404 Not Found"); die(); } $begin=0; $end=$size; if(isset($_SERVER['HTTP_RANGE'])) { if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'],$matches)){ $begin=intval($matches[0]); if(!empty($matches[1])) { $end=intval($matches[1]); } } } 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($fm,$begin,0); while(!feof($fm)&&$cur<$end&&(connection_status()==0)) { print fread($fm,min(1024*16,$end-$cur)); $cur+=1024*16; usleep(1000); } die(); }
Так что я делаю неправильно?
Вышеприведенный код работает. После того, как я изменил URL-адрес src для файлов .php, он действительно сработал. Теперь он воспроизводится в moz, т. Е. Хром с только php-файлами в качестве источников в теге видео.
Вам нужно будет повторить путь после извлечения его и передать его атрибуту 'src' тега видео HTML5. Ваша нынешняя стратегия не будет работать хорошо, надеюсь …
К примеру ,
<source src="<?php echo getMp4VideoUrl(); ?>" type='video/mp4'/>
Браузер определяет видеоконтент из заголовка, отправленного ему с запросом. Просто манипулируйте заголовком и сохраните расширение PHP. Он будет работать отлично