[PHP] Streaming vidéo via script php sécurisé
lu38ca
-
lu38ca -
lu38ca -
Bien le bonjour!
Alors, je vous explique la situation.
- J'ai un serveur (racine : /var/www) sur lequel il y a un site ou, un fois authentifié, j'ai accès au contenu d'un HDD que je monte (/media/multimedia/).
- Les fichiers sont donc sécurisés, il n'est pas possible d'y avoir accès par le serveur FTP mais uniquement par un script php : download.php ou streaming.php.
Avant de refondre toute mon appli avec Zend, je montais (ou ln -s) le disque directement dans le serveur, tout fonctionnait très bien, mais il était possible en connaissant le nom du dossier d'accéder aux fichiers sans s'authentifier.
Le problème maintenant c'est que le téléchargement des fichiers marche très bien, mais le streaming non. Enfin, il marche avec la balise HTML5 <video> mais le problème c'est que toutes mes vidéos ne sont pas en .mp4 ou .ogg mais surtout en .avi.
Je voudrais donc utiliser le même code que celui que j'avais dans l'ancienne version, c'est à dire :
Mais ça ne marche pas, même pas pour du mp3. J'ai pourtant tout éssayé entre les type MIME, les applications/balises vidéos (mais je veux lire du avi donc ça limite les possibilités), changer les scripts php, ...
Donc je sais pas trop, si quelqu'un pouvait me venir en aide (ou m'apprendre que x-mplayer2 pour une raison inconnu ne lit que des fichiers et pas de flux)
Je vous donne du coup mes 2 scripts download.php et stream.php qui son sensiblement les meme sauf pour la fin :
download.php :
streaming.php :
Voilou, si un dieu traîne par la, j'achète.
Merci d'avance,
Luca.
Alors, je vous explique la situation.
- J'ai un serveur (racine : /var/www) sur lequel il y a un site ou, un fois authentifié, j'ai accès au contenu d'un HDD que je monte (/media/multimedia/).
- Les fichiers sont donc sécurisés, il n'est pas possible d'y avoir accès par le serveur FTP mais uniquement par un script php : download.php ou streaming.php.
Avant de refondre toute mon appli avec Zend, je montais (ou ln -s) le disque directement dans le serveur, tout fonctionnait très bien, mais il était possible en connaissant le nom du dossier d'accéder aux fichiers sans s'authentifier.
Le problème maintenant c'est que le téléchargement des fichiers marche très bien, mais le streaming non. Enfin, il marche avec la balise HTML5 <video> mais le problème c'est que toutes mes vidéos ne sont pas en .mp4 ou .ogg mais surtout en .avi.
Je voudrais donc utiliser le même code que celui que j'avais dans l'ancienne version, c'est à dire :
<object type="application/x-mplayer2" width="<?php echo $largeur; ?>" height="<?php echo $hauteur; ?>" data="<?php echo $link ?>" > <param name="filename" value="<?php echo $name ?>"> <param name="autostart" value="1"> <param name="width" value="<?php echo $largeur; ?>"> <param name="height" value="<?php echo $hauteur; ?>"> <param name="loop" value="true"> </object>
Mais ça ne marche pas, même pas pour du mp3. J'ai pourtant tout éssayé entre les type MIME, les applications/balises vidéos (mais je veux lire du avi donc ça limite les possibilités), changer les scripts php, ...
Donc je sais pas trop, si quelqu'un pouvait me venir en aide (ou m'apprendre que x-mplayer2 pour une raison inconnu ne lit que des fichiers et pas de flux)
Je vous donne du coup mes 2 scripts download.php et stream.php qui son sensiblement les meme sauf pour la fin :
download.php :
<?php
function dl_file ($file)
{
if (! is_file($file)) {
die("<b>404 File not found!</b>");
}
$len = filesize($file);
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename, "."), 1));
// Récupération du type MIME
switch ($file_extension) {
case "avi":
$ctype = "video/x-msvideo";
break;
// [...]
default:
$ctype = "application/force-download";
}
// Reset du cache + Ajout pour IE
header("Pragma: public");
header("Expires: 0");
header(
"Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
// Ajout du type MIME
header("Content-Type: $ctype");
// Force download
$header = "Content-Disposition: attachment; filename=" . urldecode($filename) . ";";
header($header);
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $len);
ob_clean();
flush();
set_time_limit(0);
readfile($file);
exit();
}
dl_file($this->homeDir . '/' . $this->file);
?>
streaming.php :
<?php
function stream_file ($file)
{
// [...]
// Pareil que download.php
// Ajout du type MIME
header("Content-Type: $ctype");
// Démarrage Streaming
$fh = fopen($file, "rb");
fseek($fh, 0);
while (! feof($fh)) {
print(fread($fh, 16384));
}
fclose($fh);
exit();
}
stream_file($this->homeDir . '/' . $this->file);
?>
Voilou, si un dieu traîne par la, j'achète.
Merci d'avance,
Luca.
A voir également:
- [PHP] Streaming vidéo via script php sécurisé
- Mode sécurisé samsung - Guide
- Script vidéo youtube - Guide
- Montage video windows - Guide
- Streaming - Guide
- Fast streaming - Accueil - Guide TV et vidéo
2 réponses
Bonjour,
je n'ai pas de réponse à votre problème.
Simplement je vois video et avi et streaming
J'espère pour vous que ce sont des vidées perso... parce que si ce sont des copies de films, vous risquez de gros ennuis... Juste par amitié...
A+
je n'ai pas de réponse à votre problème.
Simplement je vois video et avi et streaming
J'espère pour vous que ce sont des vidées perso... parce que si ce sont des copies de films, vous risquez de gros ennuis... Juste par amitié...
A+
Hum.. Oui je fais des films que je ripe ensuite.. Plus sérieusement, je ne crée pas un site de partage illégale, mon serveur ne sert qu'en local, et il me permet de partager tous mes documents (photos, musique et film) chez moi uniquement. Je suis juste un jeune étudiant en informatique qui apprend en faisant quelque chose de concret :)