Стрийминг през PHP

dreamteck

Registered
Здрвейте отново!
Преди няколко дни имах въпрос за това как да защитя файловете си от директен даунлоуд и да напрая force download през php.

С това се справих, благодаря за помощта!

Сега идва следващата стъпка, която споменах и в предишната си тема.

Имам плейър, който трябва да стриймне видео файл и да го пусне. Въпросът е, че не мога да дам директен линк към файла, защото е защитен и затова давам линк към PHP файл, който да стриймне файла.

PHP файла ми излгежда така:

PHP:
include "../general/config.php";
//Проверявам дали са зададени правилно параметрите
	if($_GET['id'] && $_GET['folder']){
//Проверяваме дали заявката се прави от потребител и ако не е, изобщо да не се занимава системата надолу.
		if($user_id){
			$purchase = ...
//Проверявам дали потребителя е платил, за да гледа този файл
			if($purchase > 0){
				//Тук отварям дадената папка и намирам файла. 
//Цялостния път до файла записвам в променлива $videofile
//Само името на файла записвам в променлива $videoname
				}
				if($videofile != ""){
//Ако имаме видео файл, правим хедърите и така нататък...
					header("Content-Type: video/mp4");
					header('Content-Length: '.filesize($videofile));
					header("Expires: -1");

					header("Cache-Control: no-store, no-cache, must-revalidate");
					header("Cache-Control: post-check=0, pre-check=0", false);
					$stream = fopen($videofile, 'r');
					fpassthru($stream);
					fclose($stream);
				}
			}
		}
	}

Файла си работи добре. Ако го достигна с линк с Гет параметри си ми отваря видеото (ако съм потребител и ако съм платил за него, разбира се). Но проблемът е, че когато подам линка с гет параметрите на плейъра, плейъра не може да го отвори.

Някой може ли да помогне с това ?

Благодаря ви предварително!
 
PHP:
	header("Cache-Control: no-store, no-cache, must-revalidate");
	header("Content-Type: video/x-flv");
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header('Location: '. $flv_url);
 
На теб плеъра ти е за MP4 така ли?

Виж това :
http://stackoverflow.com/questions/5924061/using-php-to-output-an-mp4-video

Виж прегледай хедърите дали са наред при теб.
Нещо да не си испуснал.
Не съм работил с MP4 и не знам със сигурност дали това
header("Content-Type: video/mp4");

е достатъчно.
 
Благодаря ви за отговорите!

index каза:
PHP:
	header("Cache-Control: no-store, no-cache, must-revalidate");
	header("Content-Type: video/x-flv");
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header('Location: '. $flv_url);

С това получавам 403 грешка, тъй като то ме препраща директно към файла (тоест с директен линк, щото има Location), а файлът е с права 700 - тоест няма четене от външни хора.

admin, пробвах и това за айфона, но и то не става. Ако използвам линка през php файла за директен достъп, системата ми го сервира файла за сваляне, но плейъра продължава да не го чете.

Иначе не е задължително да е mp4. Плейъра чете flv, mp4, swf и още сума ти формати. Пробвах да дам директен линк към файла и да му преправя правата - всичко си работеше, така че проблемът не е в плейъра 100%.

Целия нет обърнах...даже се регистрирах по няквки странни сайтове, че да ми разреши да гледам дискусиите в тях - нищо не намерих по този въпрос.

admin, ти как успя да го направиш това в твоята система ?
 
flv плеър ползвам.
Все различни и все работи.

Mp4 не съм пробвал не мога да коментирам.

FLV със сигура работи.
Позлвам само безплатни pleyri от сорта на http://flv-player.net/

нямал съм проблеми.
 
dreamteck каза:
Добре, ами при FLV как ти изглежда кода в PHP файла и хедърите ?
Аналогично от моят код който ти дадох по-горе.
header("Content-Type: video/x-flv");
 
Не се получава. Ако отключа файла (примерно 644) и дам директен линк (тоест stream_downloader.php?id=22&folder=tutorial_1) ще тръгне да ми сваля файла, но плейъра си дава грешка и това е :( :(

Някой може ли да ми покаже той как би направил въпросното нещо. Да кажеим ,че някъде на сървъра има файл с права 700 (само собственика има права). Имаме страница с някакъв ембеднат плейър, който си има src параметър или нещо такова. Аз използвам jw player. Този плейър трябва да стриймне заключения видео файл (mp4, flv, mov...) през PHP файл, който има хедъри и там каквото трябва.

Как бихте го направили ? Навсякъде в нета едно и също се говори, но при мен това не става и не мога да разбера защо.
 
Добре, остави правата на файловете на страна за момент.
На папките им задай:
0755
на файловете :
0644

Сега на главният въпрос. Оставяш файловите права такива. Защо ти е да ги променяш?
Ползваш начина който админ или аз ти дадохме? - Ако да :
Тогава ако отвориш самата страница трябва да тръгне да ти сваля файла.
След това го линкваш в самият player пример :
<...... parametyr= " http://hosta ti .../papka/stream_downloader.php?id=22&folder=tutorial_1" />
И не би трябвало да има проблеми.

За моят сайт зареждам видеото от Vbox, като го линквам в playera по -този начаин.
clips = clips + " { name: 'a25cbd718', url: 'http://anibox.in/videos.php?vid=a25cbd718' } ]";

Отоври линка и виж какво става :)
 
Да, точно това правя. Говоря толкова много за тези права, защото наистина ми е важно файловете да не могат да бъдат достъпни по друг начин.

И да, правя точно това, за което говорим. Пък и не е като да нямам опит с PHP и други програмни езици.

Ето как изглежда инициализирането на плейъра при мен:

PHP:
<script type="text/javascript">
jwplayer('mediaplayer').setup({
flashplayer: '../general/jw_player/player.swf',
file: 'stream_downloader.php?id=22&folder=tutorial_1',
skin: '../general/jw_player/bekle.zip'
});
</script>

Това нещо плейъра не го чете, но ако отида на линка даден в параметъра file, ще ми го отвори директно в браузъра или ще ми свали файла (зависи как съм си направил хедърите). Тоест файла си се стриймва без проблем, но ако го подам на плейъра, той не го разчита по този начин (ако му дам директен линк към файла го чете).

Промених хедърите по най - различни начини и все не става. Опитах с mp4, опитах с flv - не става (естествено майм тайповете си ги насторйвам спрямо файловете).
 
Пробвай с линка който аз съм дал да подадеш на плаера.
Пробвай и с целият път до файла да подадеш.

Ако не стане, ще ти дам от phpmelody файла да го разгледаш :)
 
Пробвах с твоя линк - не иска да го зареди също. А с целия път до файла, както вече споменах си става :)

Хмм. Може би проблемът е в самия плейър, не в php скрипта, но не мога да съм сигурен точно какво се случва.

ПРОГРЕС! Пробвах само:

PHP:
<embed src='stream_downloader.php?id=".$article['id']."&folder=".$article['folder']."' width='500' height='400'/>

И познайте, тръгва. Не мога обаче да използвам ембед. Нямам никаква гаранция какво се случва в различните браузъри и устройства. Има и един друг проблем. Докато видеото върви, други страници от сайта не могат да се зареждат паралелно. Не знам дали това е само за този, който гледа видеото или е за всички посетители на сайта.

Още ъпдейт по темата:

Пробвах и с Flowplayer:

HTML:
<a  
			 href='articles/stream/".$article['folder']."/CGS Tutorial.mp4'
			 style='display:block;width:520px;height:330px'  
			 id='cgs_player'> 
		</a>

И той дава черен екран и не пуска нищо.
 
dreamteck каза:
Пробвах с твоя линк - не иска да го зареди също. А с целия път до файла, както вече споменах си става :)

Хмм. Може би проблемът е в самия плейър, не в php скрипта, но не мога да съм сигурен точно какво се случва.
Looks like :}
http://videojs.com/
Пробвай с html5 видео тага ?
 
Да, с него става. Странна работа.

Моя линк с EMBED става с HTML5 VIDEO става, flowplayer jw player не го отварят. Flowplayer обаче отваря твоя линк.

Добре, какви са плюсовете и минусите ако остана с html 5 тага ?

Имам и още един проблем. Ако паузирам видеото или реша да сложа пойнтъра някъде другаде, видеото спира и се зарежда отначало. Това вече съм сигурен, че е от PHP стрийм файла и подаването на данни, което той прави. Нямам си идея обаче как да го оправя.
 
Единсвеният проблем на video тага в html5 който се сещам ,е че по-старите браузъри не го поддържат.
Но за сметка на това мобилните устроиства като самртфони, таблети го поддържат.



А това с поинтера нямам никаква идея. Възможно е все още да не е заредило целият клип и от там да стват някакви шашми.Никва идея.
 
Окей, благодаря ти много. И аз това си мислех за HTML5-цата, но ще прасна едно съобщение хората да знаят, че ако не работи, значи са със стар браузър и така.

А това с пойнтера си е 100% нещо от PHP стриймъра. Също и това, че докато човек гледа видеото, не може паралелно да зарежда други страници от сайта. Надявам се да успея да го оправя.
 
Аз ползвам Streaming Video Provider да ми хостват видеата - те си имат собствен плейър и предлагат направо цялостна стрийминг платформа и няма нужда да се занимавам с несъвместимости за плейъра и т.н. Аз си записвам видео-уроци с уеб камерата и си ги публикувам на сайта. Услугата им е доста на ниво според мен. Тук има инфо за плейърите специално:

http://www.streamingvideoprovider.bg/%D1%81%D1%82%D1%80%D0%B8%D0%B9%D0%BC%D0%B8%D0%BD%D0%B3-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-%D0%BF%D0%BB%D0%B5%D0%B9%D1%8A%D1%80%D0%B8.html
 

Горе