Intereting Posts
Корзина Woocommerce добавляет дополнительные теги <p> Stop bot быстро отправляет несколько запросов. PHP + AJAX Функция отслеживания отправки календаря Google Calendar в php Сброс соединения с помощью peer: mod_fcgid: ошибка чтения данных с сервера FastCGI удалить целую строку после x mins в mysql db и PHP Автозагрузчики ресурсов Zend не работают в пространствах имен Обработка ошибок PHP с .htaccess и записью в текстовый файл php_error.log Замена глобальных переменных, как и почему Как выполнить поиск символа в любом порядке (12 букв, из которых 6 должно быть слово) с PHP? предотвращать автоматическое добавление косой черты при использовании parse_str PHP слишком медленный, может ли кто-нибудь увидеть способ сделать это быстрее? Есть ли такой инструмент, как phpMyAdmin, который можно настроить для доступа только к одной базе данных? Неустранимая ошибка: вызов неопределенной функции session_register () ZF2 Форма Гидратация с несколькими объектами и полями Каскадный выбор

Показать видео на iPhone / iPad через PHP

Я хотел бы показать mp4 через тег видео, а исходный URL-адрес видео – это URL-адрес приложения YII. Я раньше использовал Yii: app-> request-> sendFile, но видео не работало на iPad / iPhone, поэтому теперь я пытаюсь отправить заголовки самостоятельно, используя приведенный ниже код, но все еще не работая.

$finfo = finfo_open(FILEINFO_MIME_TYPE); $file_path = "video.mp4"; $file_mime_type = finfo_file($finfo, $file_path); $file_size = filesize($file_path); header("HTTP/1.1 206 Partial Content"); header("Accept-Ranges: bytes"); header("Content-Type: $file_mime_type"); header("Content-Length: $file_size"); header("Content-Range: bytes 0-".($file_size-1)."/$file_size"); readfile($file_path); exit; 

Я даже пытался реализовать функцию rangeDownload из http://mobiforge.com/developing/story/content-delivery-mobile-devices, но проблема в том, что $ _SERVER ['HTTP_RANGE'] всегда имеет значение null даже когда запрос идет с iPhone / iPad.

Я также пробовал это решение здесь mp4-файл через php, не играющий в качестве html5-видео, но безрезультатно.

Этот код работает отлично для веб-браузера. Также, если я получаю доступ к .mp4 прямо с iPhone / iPad, он отлично работает, так что это не проблема с самим видео

Любая помощь, пожалуйста?

Ваша проблема может быть по нескольким причинам.
1) Вы не можете создать правильное видео. Попробуйте использовать такую ​​строку:

 c:\utils\ffmpeg\bin\ffmpeg -i MVI_7386.MOV -acodec aac -ac 2 -strict experimental -b:a 160k -s 640x480 -vcodec libx264 -preset slow -profile:v baseline -level 30 -maxrate 10000000 -bufsize 10000000 -b:v 1200k -pix_fmt yuv420p -f mp4 -threads 2 -async 1 -vsync 1 -y video.ipad.mp4 

2) Я использовал этот ответ с небольшими изменениями для отправки видео через php. Вот мой файл video.php:

 <?php $path = './video.ipad.mp4'; if (file_exists($path)) { $size=filesize($path); $fm=@fopen($path,'rb'); if(!$fm) { // You can also redirect here header ("HTTP/1.1 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[1]); if(!empty($matches[2])) { $end=intval($matches[2]); } } } if($begin>0||$end<$size) header('HTTP/1.1 206 Partial Content'); else header('HTTP/1.1 200 OK'); header("Content-Type: video/mp4"); header('Content-Length:'.($end-$begin)); header("Content-Range: bytes $begin-$end/$size"); $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(); } 

И html очень прост:

 <!doctype html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>test</title> </head> <body> <video controls> <source src="./video.php" type="video/mp4"> </video> </body> </html> 

Вы можете видеть, что я здесь сделал.

PS Извините за видео. 🙂 Я не мог найти anoter один.