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

PHP & Base de données Discussion :

Retourner le flux flv d'un fichier


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut Retourner le flux flv d'un fichier
    Bonjour à tous,

    Je suis confronté à un gros problème technique!
    Pour les besoins de mon appli, j'ai architecturé mon site comme suit en utilisant Zend Framework:
    + Application
    -> videos
    -> modules
    -> ...
    + WWW

    Application est un dossier privé, et WWW est public.
    Je stocke mes uploads flv dans Application>Videos.

    Mon problème est que je n'arrive pas à renvoyer le flux flv d'une vidéo demandée.
    C'est normalement le rôle de mon action fluxvideo de mon controlleur film que j'appelle comme suit par ex: "film/fluxvideo/id/163" depuis la playlist du lecteur flash jwplayer.

    Je n'arrive pas à renvoyer le flv!!
    Voici le code actuel de mon action
    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
        public function fluxvideoAction()
        {
    		$this->_helper->viewRenderer->setNoRender();
    		$this->_helper->layout->disableLayout();
     
    		// recuperation du dossier privé application>medias
    		$videosPath = Zend_Registry::get('path_medias');
    		$flv = $videosPath.DIRECTORY_SEPARATOR."video_{$params['id']}.flv";	        
            //video_$id.flv	        
    		// ouvre un fichier en mode binaire
    		//$name = './img/ok.png';
    		header('Content-Type: video/x-flv'); 
     
    		readfile($flv); 
                    exit;   	
        }
    J'ai même essayé avec d'autres techniques comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	        $fh = fopen($flv, "rb");
    	        fseek($fh, $pos);
    	        while (!feof($fh)) 
    	        {
    	            print (fread($fh, 16384));
    	        }
    	        fclose($fh);
    Je suis perdu.
    Merci par avance pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut Zend FW
    Salut,

    Quand tu es dans une action du Zend Framework, le fil de processus va par la suite inclure une Zend_View.

    Tu devrai t'assurer qu'aucun buffer n'est en place ds ton action, donc les purger.

    Ensuite met un exit() à la fin de ton action.

    Ca debloquera peut-être ton probleme.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    merci yabyab mais malheureusement ça ne résoud rien.
    J'ai oublie de faire figurer ici le exit();

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    Arf,

    Et as tu essayer de vider le buffer ?

    Peut etre qu'un ob_start absorbe ton readfile en fait.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    J'ai essayé mais ça ne marche pas.
    En fait, j'ai l'impression que le flux est retourné (avec firebug) je vois une réponse du type (marche uniquement si je ne place pas de exit dans mon action)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FLV���	�����K��������
    onMetaData����duration�@@Ç®záH�	starttime����������
    totalduration�@@Ç®záH�width�@gÀ������height�@n�������
    videodatarate�@n¤²ìæ/¸�
    audiodatarate�@LÔ•ÒZ6‹�
    suite à ma requête, mais apparemment le type de la réponse est "text/html; charset=utf-8" d'après firebug!!
    Je comprends pas trop...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    C'est pour protéger l'accès a tes médias que tu fais un chargement en passant par un controlleur ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    oui yabyab c pour ça.

    De plus, j'utilise une playlist sous jw player générée dynamiquement dont les vidéos pointent vers cette action du controlleur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rss version='2.0' xmlns:media='http://search.yahoo.com/mrss/'><channel><item><title>zzz</title><media:content url='/projet/fluxvideo/id/165' type='video/x-flv'/></item></channel></rss>
    Mais ça ne mache pas!!

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    Je pense que tu dois mettre des headers comme pr un téléchargement.
    Voici une action de mon FW qui gère les downloads sous forme d'Action :
    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
     
    	public function downloadAction() {
     
        if(!is_file($this->_repository.$this->_navigation))
          Yab_Request::code(404);
     
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header('Content-disposition: attachment; filename='.basename($this->_repository.$this->_navigation));
     
        readfile($this->_repository.$this->_navigation);
     
        exit();
     
    	}

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    Merci , j'essaie de suite pour voir

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    Malheureusement le pb reste le même!

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    Tu pourrais poster ton code modifié avec les nouveaux headers ?

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    Ca devrait ressembler à ça je pense :

    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
    29
    30
    31
    32
    33
    34
    35
    public function fluxvideoAction() {
     
    	$this->_helper->viewRenderer->setNoRender();
    	$this->_helper->layout->disableLayout();
     
    $params = $this->getRequest()->getParams();
     
    	$videosPath = Zend_Registry::get('path_medias');
     
    	$flv = realpath($videosPath.DIRECTORY_SEPARATOR."video_{$params['id']}.flv");	        
     
    	while(0 < ob_get_level())
    		ob_end_clean(); 
     
    	if(!$flv) {
     
    		echo "Erreur dans le nom du fichier";
     
    	} else {
     
    	  header("Pragma: public");
    	  header("Expires: 0");
    	  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    	  header("Cache-Control: public");
    	  header("Content-Description: File Transfer");
    	  header('Content-Disposition: attachment; filename='.basename($flv));
    		header('Content-Type: video/x-flv'); 
     
    		readfile($flv); 
     
    	}
     
    	exit;   	
     
    }

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    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
     
        public function fluxvideoAction()
        {
    		$this->_helper->viewRenderer->setNoRender();
    		$this->_helper->layout->disableLayout();    	
     
    	    header("Pragma: public");
    	    header("Expires: 0");
    	    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    	    header("Cache-Control: public");
    	    header("Content-Description: File Transfer");
    	    header('Content-disposition: attachment; filename=video.flv');
     
    	    readfile('video.flv');
     
        }

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    Rien ne se produit malheureusement.
    J'ai aucune réponse de firebug, et la requête à l'air de se perdre dans la nature

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut
    J'ai édité mon code, il manquait l'appel a getParams() pour : $params.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 16
    Par défaut
    Non ça ne marche pas malheureusement.
    Je n'ai pas tenu compte de $params pour simplifier (en chargeant un flv du dossier courant), mais ça ne marche pas .
    Merci en tout cas

Discussions similaires

  1. [C#]Erreur lecture flux http et ecriture fichier
    Par f.colo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/01/2012, 10h40
  2. Récupérer flux à partir d'un fichier XML
    Par loicmaxinfo dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2008, 17h45
  3. Redirection de flux standard vers des fichiers
    Par raoulchatigre dans le forum C++
    Réponses: 8
    Dernier message: 29/01/2008, 11h27
  4. Flux endommagé pour un fichier unité
    Par randriano dans le forum Delphi
    Réponses: 9
    Dernier message: 11/04/2007, 09h48
  5. Download automatique d'un flux sous forme de fichier.
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 11/10/2006, 16h53

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