Odtwarzacz wideo z zewnętrznego serwera :)

0

Witam.

Mam z plikiem video.php?id=xxx gdyż gdy na niego wejdę zaczyna się normalnie pobierać plik MP4 ale gdy dodam go w odtwarzaczu (plik 'index.php') to nie załapuje wideo i wyświetla błąd.

P.S.
Proszę niezwracać uwagi na funkcje $filesize = remote_size($URL, $this); gdyż jest poprawna

plik video.php

<?php
if(isset($_GET['id']) && !empty($_GET['id'])) {

	$url = 'http://netload.in/'.$_GET['id'].'.htm';

		$login = '###';
		$haslo = '###';
	
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, "http://www.netload.in/index.php");
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt ($ch, CURLOPT_HEADER, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, "txtuser=$login&txtpass=$haslo&txtcheck=login&txtlogin=Login");
		curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
		$page = curl_exec($ch);
		
		preg_match_all('/Set-Cookie: (.*);/U',$page,$temp);
		$cookie = $temp[1];
		$cookie = implode('; ',$cookie);
		$ch = @curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, 1);
		curl_setopt($ch, CURLOPT_COOKIE, $cookie);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
		$page = curl_exec( $ch);
		preg_match ( '/Set-Cookie: (.*);/', $page, $cook );
		if(preg_match ( '/Location: (.*)/', $page, $linkpre))
		$URL = trim ( $linkpre[1] );
		if(empty($URL))
		{
			echo "Zly link!";
			die; 
		}
		$filesize = remote_size($URL, $this);
		
		header('Content-type: video/mp4');
		header('Content-Disposition: attachment; filename="'.md5(date('YmD')).'.mp4"');
		header('Content-Length: '.$filesize);
		header("Content-Transfer-Encoding: binary"); 

		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $URL);
		curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
		curl_exec($ch);
		curl_close($ch);
	}
?>

plik index.php

<!-- 1. jquery library -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
 
<!-- 2. flowplayer -->
<script src="flowplayer.min.js"></script>
 
<!-- 3. skin -->
<link rel="stylesheet" type="text/css" href="skin/minimalist.css" />

<style>
.flowplayer {
   width: 600px;
   height: 338px;
}
</style>

<div class="flowplayer" data-engine="flash">
   <video preload="none">
      <source type="video/mp4" src="video.php?id=dateick0P7p3qbG"/>
   </video>
</div>

<script>
// run script after document is ready
$(function() {
 
   // install flowplayer to an element with CSS class "player"
   $(".player").flowplayer({ swf: "/swf/flowplayer-.swf" });
 
});
</script>
0

jaki błąd? sprawdź dokładnie jak wygląda zapytanie w przeglądarce - możliwe, że strona generuje jakieś ciasteczka lub sprawdza inne rzeczy które znajdują się w nagłówku

0

Wychodzi błąd w playerze: flash: Video file not found

A headery dostaje takie:

  1. z którego brany jest $URL
HTTP/1.1 302 Found Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: affiliate_hash=YX1onxE; expires=Sun, 27-Jan-2013 07:34:20 GMT; path=/; domain=.netload.in Location: http://85.131.134.76/e9d0fb30231555136dba5717fea2dfad535f329a Content-type: text/html Content-Length: 0 Date: Sun, 13 Jan 2013 07:34:22 GMT Server: nginx/1.2.4 
  1. a to po wejściu na ten adres (http://85.131.134.76/e9d0fb30231555136dba5717fea2dfad535f329a)
HTTP/1.1 206 Partial Content Accept-Ranges: bytes Content-Length: 65 Content-Range: bytes 0-64/169275312 Content-Disposition: attachment; filename="A.Night.At.The.Classic.S02E07.HDTV.x264-FiHTV.mp4" Content-Type: application/octet-string Date: Sun, 13 Jan 2013 07:35:44 GMT Last-Modified: Fri, 11 Jan 2013 10:21:27 GMT Connection: close ftypisomisom �moovlmvhd�s �s XV�
0

cURL ma coś takiego jak COOKIEJAR/COOKIEFILE, czemu wynajdujesz koło od nowa?
Ma też FOLLOWLOCATION.

To co przedstawiłeś, że zwraca serwer netload.in jest coś nie bardzo, bo:
Zwraca 206 Partial Content, co sugeruje, że nagłówki z żądaniem były o tylko część pliku. Potem jest nawet Content-Length, 65 bajtów. W Content-Range widać, że plik ma 169275313 bajtów, a ty prosisz o pierwsze 65. --- Pytanie - skąd wziąłeś te nagłówki?
Próbowałeś zapisać zwrotkę z video.php i sprawdzić, że plik faktycznie zapisuje się jak trzeba w całości?

0

Poprzez wtyczkę monitorującą HEADER'y w Google Chrome. Potrzebuje taki skrypt aby cały film wyświetlało mi w playerze a brało z video.php bo ja już nie wiem jak to zrobić :/
Myślałem że ten zadziała, ale nie wiem czemu nie chce, skoro pobierać się da to myślałem że player go też widzi i uruchomi.

0
dzek69 napisał(a):

Próbowałeś zapisać zwrotkę z video.php i sprawdzić, że plik faktycznie zapisuje się jak trzeba w całości?

0

Masz racje po pobraniu bliku jest błąd ;/

UPDATE:

Zrobiłem tak:

<?php
if(isset($_GET['id']) && !empty($_GET['id'])) {

	$url = 'http://netload.in/'.$_GET['id'].'.htm';
	
	$login = '###';
	$haslo = '###';
	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, "http://www.netload.in/index.php");
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt ($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, "txtuser=$login&txtpass=$haslo&txtcheck=login&txtlogin=Login");
	curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
	$page = curl_exec($ch);
	
	preg_match_all('/Set-Cookie: (.*);/U',$page,$temp);
	$cookie = $temp[1];
	$cookie = implode('; ',$cookie);
	$ch = @curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_COOKIE, $cookie);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
	$page = curl_exec( $ch);
	preg_match('/Location: (.*)/', $page, $linkpre);
	$URL = $linkpre[1];
	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $URL);
	curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_exec($ch);
	curl_close($ch);
	
}
?>

I wywala komunikat:
HTTP/1.1 400 Bad Request Content-Length: 11 Bad Request

0

no to chyba jasne, wysyłasz jakiś błędne żądanie, sprawdź URL pod jaki się dobijasz

0

Gdy wejde pod ten adres co mi on podaje normalnie na PC to zaczyna pobierać.
Ale gdy dam go w ten kod co wyżej tzn:

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $URL);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_exec($ch);
        curl_close($ch);

Wyrzuca błąd:
HTTP/1.1 400 Bad Request Content-Length: 11 Bad Request

0

moze dlatego, ze zrezygnowales w ostatnim kroku z podawania ciasteczek?

0

Nic to nie zmienia niestety :/

0

Totalnie nie wiem co jest nie tak :/ ma ktoś jakiś pomysł?

Kod wygląda tak:

<?php 
if(isset($_GET['id']) && !empty($_GET['id'])) {

	$url = 'http://netload.in/'.$_GET['id'].'.htm';
	
	$login = '###';
	$haslo = '###';
	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, "http://www.netload.in/index.php");
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt ($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, "txtuser=$login&txtpass=$haslo&txtcheck=login&txtlogin=Login");
	curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
	$page = curl_exec($ch);
	
	preg_match_all('/Set-Cookie: (.*);/U',$page,$temp);
	$cookie = $temp[1];
	$cookie = implode('; ',$cookie);
	$ch = @curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_COOKIE, $cookie);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
	$page = curl_exec( $ch);
	preg_match('/Location: (.*)/', $page, $linkpre);
	$URL = $linkpre[1];
	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $URL);
	curl_setopt($ch, CURLOPT_COOKIE, $cookie);
	curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
	curl_exec($ch);
	curl_close($ch);
	
}
?>
0

spróbuj

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0); //!!
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); //!!
curl_setopt($ch, CURLOPT_URL, $link);
//curl_setopt($ch, CURLOPT_FILE, $link);
//curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/23.0');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); // Czas maksymalnego oczekiwania na polaczenie w sekundach // jak chcesz
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Czas maksymalnego wykonywania zapytania w sekundach // jak chcesz
$chdata = curl_exec($ch);
//$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);

1 użytkowników online, w tym zalogowanych: 0, gości: 1