После того, как я не нашел решение весь день, я даю ему попробовать здесь:
Сценарий: клиент может войти в систему и получить доступ к видеофайлам. Я предоставляю видео файлы с использованием псевдопотока PHP (запросы диапазона байтов). Видеофайлы находятся в защищенной папке.
Настроить:
load.php предоставляет код для встраивания видео html5:
<видео ...> <источник src = "videoprovider.php? secure = CODE" type = "video / webm"> </ Видео>
videoprovider.php получает код, который находит правильное видео и возвращает видео в байтах
Оба файла PHP проверяют, что клиент зарегистрирован. Для этого я использую modx в начале каждого файла с помощью:
require_once DOCUMENT_ROOT.'modx/includes/config.inc.php'; startCMSSession(); // does session_start()
Затем я могу получить доступ к данным $ _SESSION, которые были установлены во время входа в систему.
Все работает отлично на рабочем столе, но не на устройствах Android. Устройства Android показывают только индикатор загрузки видео и застревают.
Я напечатал $ _SESSION и узнал, что, как только Android попытается воспроизвести видеофайл (несколько запросов байтов диапазона), первый запрос указывает, что существует $ _SESSION, второй запрос указывает, что больше нет $ _SESSION.
Я еще не мог отследить ошибку. Что такое проблема Android? Почему он может читать сеанс, а затем больше нет.
Некоторые примечания:
У меня есть все файлы, которые правильно связаны, а не 404, которые могут убить сеанс (по крайней мере, не в консоли веб-разработчика, не видят, что делает Android).
Вызов startCMSSession (); несколько раз для каждого запроса диапазона видео не должны изменять сеанс.
Он работает во всех настольных браузерах.
Обновить:
Проблема заключается в том, что браузер не отправляет запрос на аудиотег сам по себе, а вместо этого делегирует это на stagefright. Sadely Stagefright (на Android 2.3) не отправляет файлы cookie вообще …
Итак, как это решить? (Мое устройство для тестирования – Android 4).