Я пытаюсь найти решение этой проблемы уже несколько дней, я пробовал все советы, которые я мог найти здесь, в stackoverflow и других платформах. И все же решения нет.
Я вставляю видео через тег HTML5:
<video poster="thumb.png" controls="controls" preload="none" width="640" height="480">
<source src="provider.php?secure=12345" type="video/mp4">
</video>
Я пытаюсь доставить видеофайл MP4 через PHP, а не напрямую связывать его. Связывание файла mp4 напрямую работает и воспроизводит файл!
Тестирование:
- видеофайл: https://github.com/q2apro/videotest-ipad/raw/master/video.mp4 (играет на iPad)
- видеофайл, загруженный PHP с теми же заголовками: https://github.com/q2apro/videotest-ipad/blob/master/test-headers.php (не играя на iPad) - Исходный код
- видеофайл, загруженный PHP с байтовыми диапазонами: https://github.com/q2apro/videotest-ipad/blob/master/test-byterange.php (не играющий на iPad) - Исходный код
- видеофайл, загруженный PHP с помощью Byte Ranges (еще один script): https://github.com/q2apro/videotest-ipad/blob/master/test-byterange-2.php (не играя на iPad, Операция не может быть выполнена ") - Исходный код
Примечания:
- все ссылки, приведенные выше, имеют прямой доступ/воспроизведение видеофайла без встроенного тега
- видео работает во всех браузерах в Windows (но не в Safari/Chrome на iPad, возможно, не в iPhone).
Моя настройка:
- тестирующее устройство: iPad iOS 6 (у меня нет mac, не удается отладить)
- iPad с Safari и Chrome (попробовал оба браузера)
- мой сервер является общедоступным с domainfactory
- инструмент для отладки: Firefox 29 Web Developer Console/WIN7
.htaccess
в тестовой папке задает тип MIME и Accept-Ranges:
AddType video/mp4 .mp4
<IfModule mod_headers.c>
Header set Accept-Ranges "bytes"
</IfModule>
Даже если я создал тот же заголовок (сравните тестовые URL 1. и 2.), iPad не воспроизводит файл через запрос PHP.
Вместо этого я всегда получаю эту кнопку прокрутки:
Заголовки 1. (прямой вызов mp4):
Заголовки 2. Те же заголовки, что и выше, но настроенные PHP (mp4, поставляемые PHP):
-
Я также пробовал прочитать весь видеофайл и отправить его в браузер с помощью PHP fread(), fpassthru() и file_get_contents(), но iPad всегда показывает cannot- играть-значок.
-
Мой размещенный сервер не поддерживает Connection keep-alive, может ли это быть проблемой? Является ли iPad интерпретацией .php отличным от .mp4?
Может ли кто-нибудь помочь мне избавиться от боли? Я полностью застрял.
PS: Я пытался рассмотреть:
- Запросы диапазона байтов (206 частичный контент) 01 02 03
- правильное кодирование видео 04
- использовали другие кодированные видео при тестировании
- отключено zlib.output_compression в php-скриптах
UPDATE: консоль отладки
Наконец-то я получил MAC-адрес друга, связал iPad, открыл консоль Debug в Safari на Mac, загрузил страницу на iPad и проверил сообщения об ошибках, появляющиеся на Mac (кстати, насколько сложнее могла сила яблока нас развивать...). Для всех тестовых скриптов эта ошибка появляется:
Failed to load resource: Plug-in handled load