Nilson15 6 Denunciar post Postado Maio 30, 2015 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); } Compartilhar este post Link para o post Compartilhar em outros sites
Thiago Lenzi 3 Denunciar post Postado Maio 30, 2015 Piratex? Vamos lá. * Sua resposta é mais simples do que imagina. Se você tem de visualizar arquivo por arquivo manualmente, recomendo Verificar execuções do navegador e um bom player html5 resolverá sua questão. Tenho interesse em ajuda-lo, porém não compreendi seus objetivos com esse script. Comente suas intenções no script. Compartilhar este post Link para o post Compartilhar em outros sites
Nilson15 6 Denunciar post Postado Maio 31, 2015 Thiago, o que eu preciso é que meu site possa carregar alguns vídeos de outros sites. Esses outros sites possuem mecanismos de proteção contra o acesso direto, o famoso hotlink. Seja por cookie, tokens ou ip, ambos possuem tais métodos que impedem que meu site utilize a url dos vídeos para simplesmente carregar-los em um player html5 ou mesmo flash. Embora exista essa proteção, eu já criei um script que contorna isso tudo e consegue obter o vídeo, mas isso no php. Logo, o que eu preciso é de uma maneira de fazer com que o php pegue o vídeo e forneça para o usuário, mas como são vídeos grandes, não tem como baixa-lo por completo e servir ao usuário, somente da certo se for aos pedaços. Portanto, eu preciso que o php baixe pedaço por pedaço do vídeo e já o retorne pro navegador, principalmente para que meu sistema consiga contornar os meios de proteção e porque futuramente, eu penso em aplicar alguns algoritmos que possam compactar esses dados enviado ao navegador. Creio que eu poderia fazer de forma semelhante ao que já fiz no php para obter o vídeo no flash, fazendo assim um player em que já contorna esses sistemas e proteção e carrega o vídeo pro usuário, mas eu realmente gostaria de conseguir fazer isso no php, até mesmo para não ficar limitado a ter que utilizar somente o player em flash, pois é meu interesse utilizar um player em html5 que eu mesmo pretendo desenvolver e que pra mim não será difícil.Eu não sei agora se alguém vai me ajudar, porque ao me ajudar, o que eu estarei fazendo é contornar um meio de segurança para obter conteúdo de forma não autorizada de outro serviço, mas gostaria muito e seria inteiramente grato se mesmo assim o fizessem. Compartilhar este post Link para o post Compartilhar em outros sites