PHP: iPad ne joue pas les vidéos MP4 livré en PHP, mais si on y accède directement, il n'

Je suis en train d'essayer de trouver une solution à ce problème depuis quelques jours déjà, j'ai essayé tous les conseils que j'ai pu trouver ici sur stackoverflow et d'autres plates-formes. Et encore, il n'y a pas de solution.

Je suis intégration d'une vidéo via la balise vidéo HTML5:

 <video poster="thumb.png" controls="controls" preload="none" width="640" height="480">
    <source src="provider.php?secure=12345" type="video/mp4">
 </video>

J'ai essayer de remettre le fichier vidéo MP4 en PHP au lieu de le relier directement. Lier le fichier mp4 directement travaille et joue le fichier!

Test:

  1. le fichier vidéo: https://github.com/q2apro/videotest-ipad/raw/master/video.mp4 (joue sur iPad)
  2. la vidéo de chargement du fichier en PHP avec les mêmes en-têtes: https://github.com/q2apro/videotest-ipad/blob/master/test-headers.php (ne pas jouer sur iPad) - Code source
  3. la vidéo de chargement du fichier en PHP avec le Byte-range: https://github.com/q2apro/videotest-ipad/blob/master/test-byterange.php (ne pas jouer sur iPad) - Code source
  4. la vidéo de chargement du fichier en PHP avec des Plages d'Octet (un autre script): https://github.com/q2apro/videotest-ipad/blob/master/test-byterange-2.php (pas de jeu sur un iPad, d'alerte "L'opération n'a pas pu être terminée") - Code source

Notes:

  • tous les liens ci-dessus sont directement accès/lire le fichier vidéo, sans balise embed
  • vidéo fonctionne sur tous les navigateurs dans Windows (mais pas dans Safari/Chrome sur iPad, probablement pas iPhone)

Ma Configuration:

  • test de l'appareil: iPad iOS 6 (je n'ai pas de mac, impossible de débogage)
  • iPad avec Safari et Chrome (essayé les deux navigateurs)
  • mon serveur d'hébergement mutualisé à partir de domainfactory
  • outil de débogage: Firefox 29 Développeur Web Console /WIN7

La .htaccess dans le dossier test définit le type MIME et Accept-Ranges:

AddType video/mp4 .mp4 

<IfModule mod_headers.c>
   Header set Accept-Ranges "bytes"
</IfModule>


Même si j'ai créé le même en-tête (comparer test Url 1. et 2.), l'iPad n'est pas la lecture du fichier par le biais de l'PHP demande.

Au lieu de cela, je reçois toujours ce strikedthrough bouton de lecture:

PHP: iPad ne joue pas les vidéos MP4 livré en PHP, mais si on y accède directement, il n'

Les en-têtes de 1. (direct mp4 appel):

PHP: iPad ne joue pas les vidéos MP4 livré en PHP, mais si on y accède directement, il n'

Les en-têtes de 2. Les mêmes en-têtes ci-dessus, mais mis en place par PHP (mp4 livré par PHP):

PHP: iPad ne joue pas les vidéos MP4 livré en PHP, mais si on y accède directement, il n'

--

J'ai aussi essayé la lecture de tout fichier vidéo et de l'envoyer au navigateur à l'aide de PHP fread(), fpassthru() et file_get_contents() mais l'iPad est toujours montrant le pas-jouer-icône.

--

Mon hébergeur n'offre pas de Connection keep-alive, cela pourrait-il être un problème?
Est ce que le iPad de l'interprétation .php différent .mp4?

Quelqu'un peut-il m'aider à sortir de la douleur? Je suis totalement coincé.

PS: Ce que j'ai essayé à prendre en compte:

  • Plage d'octets demandes (206 partial content) Zero un Zero deux Zero trois
  • corriger l'encodage vidéo Zero quatre
  • utilisé d'autres vidéos encodées lors des tests de
  • désactivé zlib.output_compression dans les scripts php

Mise à JOUR: Console de Débogage

J'ai finalement obtenu un MAC d'un ami, connecté à l'iPad, a ouvert la Console de Débogage dans Safari sur Mac, chargé de la page sur l'iPad et vérifié les messages d'erreur apparaissant sur le Mac (btw, comment plus compliqué apple pourrait nous forcer à développer...). Pour tous les scripts de test, cette erreur s'affiche:

Failed to load resource: Plug-in handled load
Qu'est-ce que votre script PHP?

OriginalL'auteur Kai Noack | 2014-06-04