PHP воспроизведение видео на iPad
Итак, это мой PHP видеокод он работает в браузерах, но когда я пытаюсь заставить его играть на айфонах и айпадах, кажется, что он вызывает кнопку воспроизведения с x через нее.
<?php
header('Content-type: video/mp4');
$homepage = file_get_contents('http://cdn.videos.budtraffic.com/sodaradio/J/Jessie%20J%20-%20Laserlight.mp4');
echo $homepage;
exit;
?>
2 ответа:
Короткий ответ:
Потому что iOS-устройство требует, чтобы сервер поддерживал запрос байтовых диапазонов для видео, а ваш код не предоставляет такой возможности.
Длинный ответ:
Когда устройство iOS делает запрос на видео, оно не загружает все видео целиком. Они загружают только небольшой кусок за один раз, чтобы минимизировать использование полосы пропускания, а также потому, что пользователь может захотеть перейти к более поздней части видео без загрузки предыдущих частей. Для этой цели они делают запрос диапазонов байтов. В основном, они говорят серверу: "Эй, дайте мне часть файла между 100-м и 200-м байтами". Запрос диапазона байтов использует Заголовок
Range
и выглядит следующим образомGET /myvideo.mp4 HTTP/1.1 Host: www.example.com Range: bytes=500-999
Сервер должен в этом случае ответить чем-то вроде этого
Таким образом, вам потребуется гораздо больше, чем эти четыре строки php для поддержки устройств iOS. Сначала нужно разобрать ЗаголовокHTTP/1.1 206 Partial Content Content-Type: video/mp4 Content-Range: bytes 500-999/20000
Range
. Этот информация доступна в глобальном var$_SERVER['HTTP_RANGE']
. Затем вам нужно будет извлечь только эту часть файла и отправить ее клиенту. Вам также потребуется заполнить заголовокContent-Range
. Обратите внимание, что заголовокContent-Range
содержит полный размер файла, поэтому ваш код должен будет предоставить эту информацию. Заметьте также, что почти каждый сервер поддерживает такой запрос для статических файлов. Если вам не нужно делать специальное обращение к файлу, возможный вариант-скопировать файл в общий доступ. сервер и пусть он делает работу за вас.Несвязанный комментарий
Примите это как конструктивную критику, но ваш код в его нынешнем виде поставит ваш сервер на колени. Вы в основномпомещаете весь файл в память перед его отправкой, и что еще хуже, вы делаете это длякаждого запроса . Если 100 человек одновременно скачивают видео на 100 МБ, вам потребуется 10 ГБ памяти на сервере, чтобы обслуживать их. Это не масштаб, вовсе нет.A гораздо лучшим решением было бы отправить файл в качестве его чтения с вашего CDN, используя функцию readfile. Таким образом, вам нужно использовать только небольшой кусок памяти, и вы можете обслуживать гораздо больше параллельных запросов.
EDIT : на самом деле, вам также нужно ответить специальным кодом ответа, частичным содержанием 206. Я забыл об этом в первом варианте этого ответа. Теперь исправлено
Я пытаюсь сделать то же самое: безопасный PHP-скрипт для доступа к видео MP4.
IOS (iPad & iPhone) не работает с ним.
Я попробовал с тем, что вы сказали (диапазон байт), следуя этому руководству:
Http://mobiforge.com/developing/story/content-delivery-mobile-devices
Но iPad никогда не отправляет "HTTP_RANGE" в своем запросе: потому что это a .php файл, почему он должен это делать??
Я сделал правило перезаписи (access. mp4 - > access.php), и даже когда iOS пытается reach access. mp4, нет HTTP_RANGE в запросе к серверу.
Итак, я думаю, что нет никакого способа сделать безопасный PHP-скрипт, работающий с iOS...