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 :

Lire un stream


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut Lire un stream
    Bonjour,

    Ma question relève tant de PHP que d'Ajax.

    J'ai une caméra IP dont le stream vidéo est accessible après authentification.

    En php, je dois donc pouvoir accéder à ce stream de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $stream=null;
    function GetImg($url,$usr,$pwd,$res="320x240",$comp="25"){
    	global $stream;
    	$context = stream_context_create(array(
    	'http' => array(
    	       'header' => "Authorization: Basic " . base64_encode("$usr:$pwd"),
        	'timeout' => 20
    	    )
    	));	    
    	$stream = fopen($url."axis-cgi/mjpg/video.cgi?resolution=$res&compression=$comp",'r',false, $context);
    }
    Question :
    Une fois ce flux ouvert, puis-je y accéder côté navigateur avec un appel Ajax pour l'afficher sur la page web ?
    Bref, peut-on utiliser Ajax/Php pour aller lire un flux vidéo et l'afficher sur une page web ?

    Je précise que la lecture directe par Ajax du flux de la caméra n'est apparemment pas possible à cause du problème de cross-domain. De même, l'affichage direct dans le navigateur pose problème à cause de l'authentification et surtout, ne fonctionne pas avec tous les navigateurs.

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Une fois ce flux ouvert, puis-je y accéder côté navigateur avec un appel Ajax pour l'afficher sur la page web ?
    Non.

    plusieurs raison a cela :

    * Pas de requête cross domain en ajax
    * Pas de transfert binaire en ajax
    * Même si tu récupère le flux qu'est ce qui va le décoder ? l'afficher ?
    * Les player HTML 5 ne supporte pas (aux dernières nouvelles) la lecture d'un stream , il leur faut un chemin vers un fichier.

    Bref, les seules solutions que j'ai pu trouver au problème sont :
    - Faire du one shot image via http. En gros tu demande une image jpg , tu l'affiche et tu demande la suivante.
    Pas très performant et les navigateurs on tendances à perdre de la mémoire

    - Faire du rtsp avec un plugin type vlc inclus dans la page. Le problème c'est qu'il faut installer un plugin
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    Aïe... c'est bien ce que je pensais...

    Merci.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    En fait, peut-être une idée.

    * Pas de requête cross domain en ajax
    Justement, l'appel ajax est fait sur le serveur, donc même domaine, donc résolu.

    * Même si tu récupère le flux qu'est ce qui va le décoder ? l'afficher ?
    Côté php, le décodage ça doit être faisable non ? Récupérer l'image courante depuis le stream ?

    * Pas de transfert binaire en ajax
    Et en renvoyant non pas directement le stream, mais les images décodées côté php, et encodées base64 = texte...

    Cela est faisable non ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Côté php, le décodage ça doit être faisable non ? Récupérer l'image courante depuis le stream ?
    Non c'est crade et pas fonctionnel.
    tu vas pas pouvoir afficher un stream en affichant image par image en javascript l'image de ton stream... Tout simplement car tu vas faire exploser le nombre de requête vers ton serveur, que de toute facon tu n'auras rien de fluide, et en plus tu vas faire fumer les navigateurs anciens/ordinateur peu puissant

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Très clairement PHP est pas fait pour ça. Il existe bien les fonction pack et unpack pour gérer du binaire.
    Mais tenter une conversion packet h264 => jpeg uniquement en PHP c'est juste un perte de temps. A partir de mjpeg tu pourra sans doute extraire un jpg de temps à autre mais rien de très performant à mon avis.
    --Edit-- Un article sur commetn récupérer un jpeg d'un flux mjpeg : http://www.lavrsen.dk/foswiki/bin/vi...egFrameGrabPHP

    Pour moi y'a 2 solutions :

    Avoir une caméra avec du "one shot image" (différent du mjpeg) qui te retourne un jpg et que donc tu peux interroger à loisir en JS. Tu peux espérer atteindre une bonne 10 aines de fps (peut être plus selon la caméra et la bande passante).

    Utiliser un activex (IE only) ou un plugin type vlc pour directement utiliser le flux RTSP de ta caméra. Dans tous les cas ça implique l'installation d'un petit quelque chose en plus.

    J'ai fait récemment l'interface de gestion embarquée d'une caméra IP et pour les preview en live du flux , je suis passé par fbVLC qui permet d'avoir un plugin vlc multi plateforme très facilement.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    J'ai jeté un oeil au plugin fbVLC mais je ne vois aucun moyen de passer un login/pwd. Et c'est mon souci principal.

    Je testerai MjpegFrameGrabPHP pour comparer les performances avec la visu en direct.

    Sinon entre temps j'ai trouvé une alternative pour mes problèmes d'authentification au niveau de la caméra elle-même qui dispose d'une bonne API.

    Merci.

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pour passer des identifiants tu fais par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rtsp://USER:PASS@IP/mon_flux_rtsp
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire du streaming, fichiers rtmp
    Par hpl76 dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 15/06/2011, 15h40
  2. Lire le stream du client qui se connecte.
    Par Galoula dans le forum Langage
    Réponses: 0
    Dernier message: 18/02/2010, 11h25
  3. Rech code pour lire flux stream camera IP DCS 950 DLink
    Par altair8080 dans le forum Visual C++
    Réponses: 5
    Dernier message: 01/02/2010, 14h57
  4. WebBrowser Lire du Stream
    Par Kiboumz dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/07/2007, 12h23

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