Bonjour,
j'avais déjà posté un message à propos d'un problème de lecture de fichiers audio/video en streaming depuis un script PHP. Ce problème là est résolu, mais il a engendré un autre problème.
Je m'explique, le but au départ était de lire des fichiers audio ou vidéo avec une balise html5 classique mais depuis un script PHP. Cela fonctionne à présent, l'ennui c'est que cette fonctionnalité est en fait inclus dans un plus grand projet qui nécessite l'exécution de plusieurs scripts en même temps. Or, le script qui lit les fichiers audio/video semble totalement occuper le serveur puisque aucun autre script ne peut s'exécuter en même temps.
Pour que vous saisissiez vraiment en quoi cela est très embêtant, voilà le projet complet:
Chaque applications fait intervenir une multitude de scripts PHP, donc si l'un d'eux bloque tous les autres, ça perd un peu de son intérêt. (Dans le dernier screen, j'ai du ouvrir la fenêtre de lecture video en dernier car on ne peut rien exécuter d'autre une fois qu'elle est ouverte)
Voilà le fragment du script qui lit les fichiers audio/video (sachez que ce script passe par une réécriture http, et que donc les données GET ainsi que les sessions sont vérifiées en amont):
Qu'est-ce qui bloque ? Merci de votre aide
Modifié par juliendargelos (13 Jun 2014 - 17:22)
j'avais déjà posté un message à propos d'un problème de lecture de fichiers audio/video en streaming depuis un script PHP. Ce problème là est résolu, mais il a engendré un autre problème.
Je m'explique, le but au départ était de lire des fichiers audio ou vidéo avec une balise html5 classique mais depuis un script PHP. Cela fonctionne à présent, l'ennui c'est que cette fonctionnalité est en fait inclus dans un plus grand projet qui nécessite l'exécution de plusieurs scripts en même temps. Or, le script qui lit les fichiers audio/video semble totalement occuper le serveur puisque aucun autre script ne peut s'exécuter en même temps.
Pour que vous saisissiez vraiment en quoi cela est très embêtant, voilà le projet complet:
Chaque applications fait intervenir une multitude de scripts PHP, donc si l'un d'eux bloque tous les autres, ça perd un peu de son intérêt. (Dans le dernier screen, j'ai du ouvrir la fenêtre de lecture video en dernier car on ne peut rien exécuter d'autre une fois qu'elle est ouverte)
Voilà le fragment du script qui lit les fichiers audio/video (sachez que ce script passe par une réécriture http, et que donc les données GET ainsi que les sessions sont vérifiées en amont):
if(isset($_GET['path'])) $path=$_GET['path'];
if(isset($path)) {
if(is_readable($path)) {
if(is_file($path)) {
header_remove();
header('Content-Type: '.mime_content_type($path));
header('Accept-Ranges: 0-'.$length);
if(isset($_SERVER['HTTP_RANGE'])) $range=$_SERVER['HTTP_RANGE'];
elseif($apache=apache_request_headers()) {
$headers=array();
foreach($apache as $header=>$val) $headers[strtolower($header)]=$val;
if(isset($headers['range'])) $range=$headers['range'];
else $range=false;
}
else $range=false;
if(isset($range)) {
$fp=@fopen($path,'rb');
$size=filesize($path);
$length=$size;
$start=0;
$end=$size-1;
$c_start=$start;
$c_end=$end;
list(,$range)=explode('=',$range,2);
if(strpos($range,',')!==false) {
header('HTTP/1.1 416 Requested Range Not Satisfiable');
header('Content-Range: bytes '.$start.'-'.$end.'/'.$size);
exit;
}
if($range0=='-') $c_start=$size-substr($range,1);
else {
$range=explode('-',$range);
$c_start=$range[0];
$c_end=(isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size;
}
$c_end=($c_end>$end) ? $end : $c_end;
if($c_start>$c_end || $c_start>$size-1 || $c_end>=$size) {
header('HTTP/1.1 416 Requested Range Not Satisfiable');
header('Content-Range: bytes '.$start.'-'.$end.'/'.$size);
exit;
}
$start=$c_start;
$end=$c_end;
$length=$end-$start+1;
fseek($fp,$start);
header('HTTP/1.1 206 Partial Content');
header('Content-Range: bytes '.$start.'-'.$end.'/'.$size);
header('Content-Length: '.$length);
fseek($fp,$start);
$buffer=1024*8;
while(!feof($fp) && ($p=ftell($fp))<=$end) {
if($p+$buffer>$end) $buffer=$end-$p+1;
set_time_limit(0);
echo fread($fp,$buffer);
flush();
}
fclose($fp);
}
else {
header('HTTP/1.1 206 Partial Content');
header('Content-Length:1');
readfile($path);
}
}
}
}
Qu'est-ce qui bloque ? Merci de votre aide
Modifié par juliendargelos (13 Jun 2014 - 17:22)