Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 14/03/2010, 12h29   #1
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
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 :
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 :
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.

Dernière modification par sabotage ; 14/03/2010 à 17h10.
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 13h55   #2
Membre du Club
 
Inscription : mars 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 51
Points : 53
Points : 53
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.
yabyab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 15h14   #3
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
merci yabyab mais malheureusement ça ne résoud rien.
J'ai oublie de faire figurer ici le exit();
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 15h45   #4
Membre du Club
 
Inscription : mars 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 51
Points : 53
Points : 53
Arf,

Et as tu essayer de vider le buffer ?

Peut etre qu'un ob_start absorbe ton readfile en fait.
yabyab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h04   #5
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
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 :
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...
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h07   #6
Membre du Club
 
Inscription : mars 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 51
Points : 53
Points : 53
C'est pour protéger l'accès a tes médias que tu fais un chargement en passant par un controlleur ?
yabyab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h16   #7
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
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 :
<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!!
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h20   #8
Membre du Club
 
Inscription : mars 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 51
Points : 53
Points : 53
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 :
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();
 
	}
yabyab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h22   #9
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
Merci , j'essaie de suite pour voir
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h25   #10
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
Malheureusement le pb reste le même!
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h31   #11
Membre du Club
 
Inscription : mars 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 51
Points : 53
Points : 53
Tu pourrais poster ton code modifié avec les nouveaux headers ?
yabyab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h38   #12
Membre du Club
 
Inscription : mars 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 51
Points : 53
Points : 53
Ca devrait ressembler à ça je pense :

Code :
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;   	
 
}

Dernière modification par yabyab ; 14/03/2010 à 17h08.
yabyab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h40   #13
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
Code :
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');
 
    }
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 16h46   #14
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
Rien ne se produit malheureusement.
J'ai aucune réponse de firebug, et la requête à l'air de se perdre dans la nature
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 17h09   #15
Membre du Club
 
Inscription : mars 2010
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 51
Points : 53
Points : 53
J'ai édité mon code, il manquait l'appel a getParams() pour : $params.
yabyab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 17h49   #16
Invité de passage
 
Inscription : juillet 2003
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 15
Points : 2
Points : 2
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
the_burner est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h23.


 
 
 
 
Partenaires

Hébergement Web