J'utilise un script PHP pour valider les requêtes vidéo avant de les diffuser. Ce script fonctionne comme prévu sur le bureau, avec Safari et Chrome. Mais sur iOS, j'ai un bouton de lecture cassé.Lecture MP4 en cas d'accès direct, mais pas en lecture PHP, sur iOS
Je suis sûr que la vidéo est correctement encodée pour l'iPhone/iPad, parce que lorsque j'y accède directement, cela fonctionne comme prévu.
Le code PHP pertinent:
$file_name = 'test-video.mp4';
$file_size = (string)(filesize($file_name));
header('Content-Type: video/mp4');
header('Content-Length: '.$file_size);
readfile_chunked($file_name);
exit;
(readfile_chunked()
est similaire à readfile()
mais pour des fichiers très volumineux, trouvés dans les commentaires sur la page du manuel PHP:. http://php.net/manual/en/function.readfile.php En tout état de cause, test-video.mp4
est seulement environ 5 Mo ., ce qui est inférieur à la limite de mémoire - et dans ce cas je peux effectivement remplacer dans le readfile()
normal et produire exactement le même comportement)
les en-têtes que je reçois lorsque j'accède directement test-video.mp4
sont:
Accept-Ranges:bytes
Connection:Keep-Alive
Content-Length:5558749
Content-Type:video/mp4
Date:Sun, 27 Jun 2010 21:02:09 GMT
Etag:"1c04757-54d1dd-489944c5a6400"
Keep-Alive:timeout=10, max=30
Last-Modified:Tue, 22 Jun 2010 01:25:36 GMT
Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635
Les en-têtes du script PHP sont:
Connection:Keep-Alive
Content-Disposition:inline; filename="test-video.mp4"
Content-Length:5558749
Content-Type:video/mp4
Date:Sun, 27 Jun 2010 21:03:32 GMT
Keep-Alive:timeout=10, max=15
Server:Apache/2.2.15 (CentOS) mod_ssl/2.2.15 0.9.8l DAV/2 mod_auth_passthrough/2.1 FrontPage/5.0.2.2635
X-Powered-By:PHP/5.2.13
J'ai essayé beaucoup de permutations différentes d'en-têtes, les jumelant même exactement à ceux d'une demande directe, en vain.
Quelqu'un a-t-il réussi à diffuser des vidéos HTML5 via PHP, sur iOS?
[Note:. Je voudrais essayer d'utiliser X-Sendfile, mais le site est sur un hôte partagé avec un accès très limité]
EDIT: Je lisais que iOS peut être sensible sur les extensions de fichiers, de sorte J'ai essayé de configurer une RewriteRule qui réécrit les requêtes MP4 à mon script PHP original, mais cela n'a pas aidé non plus.
Exactement - J'ai fini par copier simplement la fonction 'rangeDownload()' de l'Annexe A de l'article suivant: http://mobiforge.com/developing/story/content-delivery-mobile-devices (ce qui est cool à propos de cette fonction, elle permet également à l'utilisateur de démarrer la lecture à partir de n'importe quel point de la vidéo, simplement en cliquant sur la timeline.) Je pense que j'ai été particulièrement dérouté par le problème car il fonctionne parfaitement sur le bureau, alors que iOS a cet octet exigence de gamme. – JKS