IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Streaming ios php


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut Streaming ios php
    Bonjour,

    Je suis en train de faire un script php qui permet le stream d'un fichier mp4. Tout fonctionne correctement avec mon pc mais pas avec mon iphone.

    Voici le code raccourci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    set_time_limit(0);
     
    // Fonction qui récupère selon le range demandé
     
    $content = Nasring::getHtml($source, false, false, false, false, false, $start.'-'.$end);
     
    header('Content-Type:video/mp4');
     
    header("Cache-Control: max-age=2592000");
     
    header("Expires: ".gmdate('D, d M Y H:i:s', time()+2592000) . ' GMT');
     
    header("Connection: Keep-Alive");
     
    header('HTTP/1.1 206 Partial Content');
     
    header("Accept-Ranges: bytes");
     
    header('Content-Range: bytes '.$start.'-'.$end.'/'.$cl);
     
    $length = $end - $start + 1;
     
    header('Content-Length: '.$length);
     
    echo $content;
    $start vaut le premier byte et $end vaut le dernier. $cl vaut la taille totale du fichier et $length vaut la taille de la partie de bytes demandée

    Voilà je ne comprends pas pourquoi ça ne fonctionne pas sur iphone ni sur ipad. Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    qu'est ce qui ne fonctionne pas ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Ben sur ios (iphone, ipad) ça me met le bouton play mais barré comme si je ne pouvais pas lire la vidéo. J'ai pensé a un problème d'encodage mais si je met un lien direct vers la vidéo, ça marche.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    C'est trop dur de répondre ?

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par moffa13 Voir le message
    C'est trop dur de répondre ?
    A quoi cela sert-il de répondre si l'on n'a pas la solution ou une piste à te faire explorer ?

    Dans le même genre de message qui ne sert à rien :
    C'est trop dur d'être patient, tolérant et aimable ?

    La grande majorité des lecteurs de ce forum répondent sur leur temps libre.
    On est pas payé au nombre de réponse.
    Donc prend ton mal en patience et ne sois pas aussi intransigeant.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Oui a part que je n'obtiens jamais de réponses à croire que ma question est trop difficile

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En général, quand personne ne répond, c'est que personne n'a la réponse (ou que personne n'est disponible, ce qui est tout aussi possible vu qu'on est quand même toujours en août et qu'un certain nombre d'entre nous sont en vacances )

    Cela étant dit, je vais répéter un grand classique : le PHP est exécuté côté serveur, donc si tu as un problème côté client, ce n'est pas le PHP qui est en cause mais la source générée.

    Es-tu sûr de tes headers ? Tu utilises un navigateur particulier sur iPhone/iOS ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Le problème ne vient pas de la vidéo car je peux la lire si je ne la stream pas, donc le fichier mp4 direct donc ce n'est pas l'encodage, c'est forcément le php

  9. #9
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Points : 7 503
    Points
    7 503
    Par défaut
    http://www.developpez.net/forums/d25...reaming-video/

    comme indiqué dans le post mis en lien. le streaming et côté client et non serveur. l'utilisation des balise header ne sert pas à faire de streaming mais de l'envoi brut de fichier.
    tu nous indique que cela fonctionne correctement sur ton pc, la question est tu utilise quel navigateur sur ton PC? est tu sur que ton code et compatible avec safari etc .... comprend bien que si cela marche ailleur c'est que soit ce n'est pas compatible avec ton matériel soit tu t'y prend mal.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Je comprends mais le pire c'est que cela fonctionne si je lis le fichier brut donc mis dans le ftp et dans mon iphone je met le lien, la vidéo se lit correctement. En revanche si j'utilise php pour streamer le fichier mis dans le FTP, le bouton play est barré donc je ne vois pas ou est le problème car ios n a pas de problème pour faire le stream avec les range header sinon le stream fonctionne parfaitement sur pc. Merci de vos réponses sinon mes headerd sont. Bons non ?

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Aucune idée, je n'ai jamais fait de streaming sur iOS.
    Bon, tu utilises un composant pour construire ton flux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $content = Nasring::getHtml($source, false, false, false, false, false, $start.'-'.$end);
    C'est une classe de parsing ? une API récupérée quelque part ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    La classe Nasring est la classe principale de mon site web, la méthode getHtml permet de récupérer du contenu sur internet, j'y ai rajouté un paramètre qui permet de spécifier le range demandé. J'ai modifié mon code pour une meilleure optimisation qui fonctionne parfaitement bien. Voici le nouveau code qui marche très bien sauf encore une fois sur iphone

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
            ob_start();
     
    	if(isset($_SERVER['HTTP_RANGE']))
     
    	$opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE'];
     
    	$opts['http']['method']= "HEAD";
     
    	$conh=stream_context_create($opts);
     
    	$opts['http']['method']= "GET";
     
    	$cong = stream_context_create($opts);
     
    	file_get_contents($source, false, $conh); 
     
    	ob_end_clean();
     
    	array_map("header",$http_response_header);
     
    	header('Accept-Ranges: bytes');
     
    	header('Content-Type: video/mp4');
     
    	readfile($source, false, $cong);

    Si tu veux le contenu de la méthode getHtml, le voici :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public static function getHtml($url, $post=false, $saveCookie = false, $fileSaveCookie = false, $fileLoadCookie = false, $nobody = false, $range = false){
    		$curl = curl_init();
    		curl_setopt($curl, CURLOPT_URL, $url);	
    		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    		curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    		curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'); 
    		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    		if($post !== false){
    			curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    		}
    		if($nobody){
    			curl_setopt($curl, CURLOPT_HEADER, 1);
    			curl_setopt($curl, CURLOPT_NOBODY, 1);
    		}
    		if($range !== false){
    			curl_setopt($curl, CURLOPT_RANGE, $range);
    		}
    		if($saveCookie !== false){
    			if($fileSaveCookie !== false)
    			curl_setopt($curl, CURLOPT_COOKIEJAR, $fileSaveCookie);
    			if($fileLoadCookie !== false)
    			curl_setopt($curl, CURLOPT_COOKIEFILE, $fileLoadCookie);
    		}
    		curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
    		curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    		$html = curl_exec($curl);
    		return $html;
    	}

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bon, le seul truc que je voie qui puisse poser problème, c'est cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');
    Sauf erreur de ma part, le User-agent signale le type de navigateur et d'OS qui envoie la demande.
    Là tu fais systématiquement la demande en tant que Firefox 3.6 sous Windows. Il est possible qu'il n'y ait pas de différence entre une réponse adaptée à Firefox sous Windows et et une réponse pour Chrome sous Windows, mais que ça soit différent pour Firefox sous iOS par exemple.

    Essaye d'envoyer le véritable user-agent (récupérable par $_SERVER['HTTP_USER_AGENT'])
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    Merci, en fait la méthode getHtml récupère un bout du fichier mp4 (en spécifiant le range, par exemple 0-50000) sur un serveur distant. Celle-ci récupère très bien le contenu demandé mais le problème est quand je l'envoi sur l'iphone, celui-ci ne stream pas. De plus je n'utilise plus la méthode getHtml mais j'utilise ceci, voici le code (je vais commenter en passant ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
            ob_start(); // Démarre la temporisation de sortie
     
    	if(isset($_SERVER['HTTP_RANGE'])) // Vérifie si le client demande un certain range dans la vidéo
     
    	$opts['http']['header']="Range: ".$_SERVER['HTTP_RANGE']; // si oui, ajoute au header pour demander au serveur distant
     
    	$opts['http']['method']= "HEAD"; // Ne demande qu'a obtenir le header
     
    	$conh=stream_context_create($opts); // crée le contexte 1 pour obtenir le header
     
    	$opts['http']['method']= "GET"; // modifie pour obtenir le contenu avec
     
    	$cong = stream_context_create($opts); // crée le contexte 2 pour obtenir le header avec le contenu
     
    	file_get_contents($source, false, $conh);  // Fait une demande simple pour récupérer le header du serveur distant sans le contenu
     
    	ob_end_clean(); // Supprime le buffer de sortie
     
    	array_map("header",$http_response_header); // Parcours le header répondu et le recopie avec array_map
     
    	header('Accept-Ranges: bytes'); // Rajoute que nous acceptons le range bytes
     
    	header('Content-Type: video/mp4'); // Précise le type mime
     
     
     
    	readfile($source, false, $cong); // Affiche le fichier avec le range demandé
    Voilà, ça serait super cool que tu trouves la solution

  15. #15
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Là honnêtement...
    Pour PHP, le navigateur et l'OS du client, c'est quasiment transparent (sauf passage de User-agent ou choses du genre). Là ton code a l'air totalement indépendant du client, donc je ne sais vraiment pas où est le problème.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 0
    Points
    0
    Par défaut
    C'est horrible, je ne comprends pas du tout ! Si je met le lien vers le fichier original sur mon Iphone, ça marche ! et si je le stream avec les mêmes headers que la page où ça fonctionne, il y a toujours ce bouton play qui est barré !

    Voici les headers :

    Accept-Ranges:bytes
    Connection:close
    Content-Length:183582023
    Content-Range:bytes 172240995-355823017/355823018
    Content-Type:application/octet-stream
    Date:Thu, 28 Aug 2014 12:41:27 GMT
    Last-Modified:Fri, 04 Apr 2014 12:43:30 GMT
    Server:Apache

Discussions similaires

  1. [Forum] Twitter Stream en php
    Par Mitsuhide dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 30/11/2011, 15h19
  2. Streaming avec php
    Par SupFatma dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 25/06/2011, 03h16
  3. PHP et Streaming
    Par madislak dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 01/01/2007, 14h23
  4. Quel hébergeur choisir pour du Streaming Vidéo (PHP) ?
    Par wehtam dans le forum Hébergement
    Réponses: 6
    Dernier message: 28/08/2006, 16h16
  5. [Forum] Streaming et PHP
    Par wehtam dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 09/08/2006, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo