Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, eu to precisando elaborar um sistema que possa fazer streaming de um arquivo de vídeo que fica em outro servidor, é importante citar que realmente fazer o streaming de arquivos externo é melhor solução, uma vez que não poderei nem hospedar o arquivo de video, nem usar o arquivo externo como fonte do vídeo. Pesquisando eu li bastante sobre streaming em chunks, onde os dados de vídeo são servidos de forma segmentada, inclusive eu encontrei um script que faz isso no php, após algumas alterações e testes eu constatei que dá certo para arquivos locais, mas que ao tentar fazer streaming de arquivos externos de outros servidores, o vídeo carrega somente até no máximo, 20 minutos e depois para. Eu já tentei de tudo, desde verificar se não era cabeçalhos de requisição que não estavam configurados corretamente, tempo de processamento do php, tamanho do buffer que baixa e serve os dados de vídeo. Enfim, tudo que eu imagina que poderia ser o problema, uma vez que se carrega até quase 20 minutos, é porque dá certo, logo só deve estar havendo algum problema que faz com que a transmissão pare antes do fim do vídeo. Se vocês puderem me ajudar fico realmente grato, pois já pesquisei e fiz de tudo mas não consegui resolver o problema.
O código que estou utilizando para fazer o streaming de arquivo de vídeo esterno:
ini_set('max_execution_time', 0);
ini_set('max_input_time', 0);
function GetSizeExFile($UrlFile){
$Curl = curl_init();
curl_setopt($Curl, CURLOPT_URL, $UrlFile);
curl_setopt($Curl, CURLOPT_HEADER, 1);
curl_setopt($Curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($Curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($Curl, CURLOPT_NOBODY, 1);
curl_setopt($Curl, CURLOPT_SSL_VERIFYPEER, false);
$Cont = curl_exec($Curl);
$Size = curl_getinfo($Curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
return $Size;
}
function StreamingExternal($UrlFile){
header("Connection: Keep-Alive");
header ('Content-type: video/mp4');
header ('Accept-Ranges: bytes');
header ('Cache-control: no-cache');
header ('Pragma: private');
$Size = GetSizeExFile($UrlFile);
if(isset($_SERVER['HTTP_RANGE'])){
list($a, $Range) = explode("=",$_SERVER['HTTP_RANGE']);
str_replace($Range, "-", $Range);
$Size2 = $Size-1;
$NewLength = $Size2-$Range;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: ".$NewLength);
header("Content-Range: bytes ".$Range.$Size2."/".$Size);
}
else{
$Size2 = $Size-1;
header("Content-Range: bytes 0-".$Size2."/".$Size);
header("Content-Length: ".$Size);
}
if($File = fopen($UrlFile, 'rb')){
while(!feof($File) and (connection_status()==0)){
print(fread($File, 1024*8));
flush();
}
$Status = (connection_status()==0);
fclose($File);
}
return($Status);
}Carregando comentários...