Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Передача видео в плеер? Ретранслятор!

#1 arashvg

arashvg
  • Пользователь
  • 6 сообщений
  • Репутация: 0
0

Отправлено 02 Февраль 2012 - 18:04

собственно есть скрипт который (работал пока контакт не поменял структуру) вытаскивал прямую ссылку на видеофайл контакта и потоком передавал его в плеер, на его основе нужно сделать обычную передачу видео в плеер, тоесть выдирать никаких сслок не нужно:

вот код скрипта:

<?php set_time_limit(0);
//+------------------------------+
//|	relaying				 |
//+------------------------------+

//===================================================================++
// Настройки, если Вы не уверены в том что делаете, лучше не меняйте!||
//===================================================================++

define("QUALITY", '360');
define("MESSAGE", 'Sorry video not found');
define("TIMEOUT", 10);  




//#### Дальше ничего не менять без знаний PHP
define("BLOCK", 8*1024);

if(isset($_GET['str']))
{
	//Обработка входящих данных
	if(preg_match('#^video((?:|-)\d+)_(\d+)(?:|_(\d+))$#', $_GET['str'], $match))
	{
			$oid = $match[1];
			$id = $match[2];
			$quality = isset($match[3]) ? $match[3] : QUALITY;
			$startTime = isset($_GET['start']) ? '?start='.$_GET['start'] : '';
	}
	else die(MESSAGE);
}
else die (MESSAGE);

//## Получаем данные со страницы
$data = getData($oid, $id, MESSAGE, TIMEOUT);


//## Разбираем полученные данные
//get host
$start = strpos($data, 'st=')+3;
$length = strpos($data, '&', $start)-$start;
$host = substr($data, $start, $length);

//get uid
$start = strpos($data, 'uid=')+4;
$length = strpos($data, '&', $start)-$start;
$uid = substr($data, $start, $length);

//get hash
$start = strpos($data, 'vtag=')+5;
$length = strpos($data, '&', $start)-$start;
$hash = substr($data, $start, $length);

//fix for very old video
$oldVideo = false;
if(strpos($host, 'vkadre.ru'))
{
	$oldVideo = true;
	$start = strpos($data, 'vkid=')+5;
	$length = strpos($data, '&', $start)-$start;
	$vkid = substr($data, $start, $length);
}
else
{
	$highQuality = false;
	if(strpos($data, "video_max_hd = '0'")!==false) $quality = '240';
	else
	{
		if(strpos($data, "video_max_hd = '1'")!==false) $maxQ = '360';
		else if(strpos($data, "video_max_hd = '2'")!==false) $maxQ = '480';
		else if(strpos($data, "video_max_hd = '3'")!==false) $maxQ = '720';
		if($maxQ<$quality) $quality = $maxQ;
		$highQuality = true;
	}

	$ext = '.mp4';
	if(strpos($data, 'video_no_flv = 0')!==false)
	{
		if(!$highQuality || $quality=='240')
		{
			$quality = '';
			$ext = 'flv';
		}

	}
}


if($oldVideo)
{
	$link = 'http://'.$host.'/assets/videos/'.$hash.$vkid.'.vk.flv';
	$startTime = '';
}
else $link = $host.'u'.$uid.'/video/'.$hash.'.'.$quality.$ext;


$link .= $startTime;
$header = get_headers($link, 0);

$fp = @fopen($link, "rb") or die (MESSAGE);
if(isset($header))	foreach($header as $v) header($v);
while(!feof($fp))  echo fread($fp, BLOCK);
fclose($fp);


function getData($oid, $id, $message="Video not found", $timeout=30)
{
	$url = 'http://vkontakte.ru/video.php?act=a_embedbox&oid='. $oid .'&vid='. $id;
	$ch = curl_init($url) ;
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
	curl_setopt($ch,CURLOPT_TIMEOUT, $timeout);
	$data = curl_exec($ch);

	$start = strpos($data, 'hash=')+5;
	$length = strpos($data, '\\', $start)-$start;
	$hash = substr($data, $start, $length);

	$url = 'http://vkontakte.ru/video_ext.php?oid='.$oid.'&id='.$id.'&hash='.$hash;
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
	curl_setopt($ch,CURLOPT_TIMEOUT, $timeout);
	$data = curl_exec($ch);
	curl_close($ch);
	if(strpos($data, 'не найден')!==false ||  strpos($data, 'видео изъято')!==false) die($message);

return $data;
}
?>


пытался сделать сам, но у меня ничео не работает, может подскажыте где ошибся? вот мой код:

<?php
define("QUALITY", '360');
define("MESSAGE", 'Sorry video not found');
define("TIMEOUT", 10);


//echo $_GET['stat'];
$link. = $_GET['stat'];
$header = get_headers($link, 0);

$fp = @fopen($link, "rb") or die (MESSAGE);
if(isset($header))	foreach($header as $v) header($v);
while(!feof($fp))  echo fread($fp, BLOCK);
fclose($fp);
echo $fp;


?>

 

 

  • 0

#2 Freekiller

Freekiller
  • Пользователь
  • 2 сообщений
  • Репутация: 0

Отправлено 05 Февраль 2012 - 09:47

Вот тебе код, у меня на денвере работает


<?php set_time_limit(0);
//+------------------------------+
//| relaying |
//+------------------------------+

//===================================================================++
// Настройки, если Вы не уверены в том что делаете, лучше не меняйте!||
//===================================================================++

define("QUALITY", '360');
define("MESSAGE", 'Sorry video not found');
define("TIMEOUT", 10);


//#### Дальше ничего не менять без знаний PHP
define("BLOCK", 8*1024);

$url = "http://vk.com/video_ext.php?oid=64208647&id=161215477&hash=ad710bacd9e94891&";
#if(isset($_GET['str']))
if($url){
//Обработка входящих данных
$get = explode( "?", $url );
$get = strtolower( end( $get ) );
preg_match('|oid=(.*)&|Uis', $get, $oid);
preg_match('|&id=(.*)&|Uis', $get, $id);
preg_match('|hash=(.*)&|Uis', $get, $hash);

$oid = $oid['1'];
$id = $id['1'];
$hash = $hash['1'];
$quality = isset($match[3]) ? $match[3] : QUALITY;
$startTime = isset($_GET['start']) ? '?start='.$_GET['start'] : '';
}
else die (MESSAGE);

//## Получаем данные со страницы
$data = getData($oid, $id, $hash, MESSAGE, TIMEOUT);

//## Разбираем полученные данные
//get host
$start = strpos($data, 'st=')+3;
$length = strpos($data, '&', $start)-$start;
$host = substr($data, $start, $length);

//get uid
$start = strpos($data, 'uid=')+4;
$length = strpos($data, '&', $start)-$start;
$uid = substr($data, $start, $length);

//get hash
$start = strpos($data, 'vtag=')+5;
$length = strpos($data, '&', $start)-$start;
$hash = substr($data, $start, $length);

//fix for very old video
$oldVideo = false;
if(strpos($host, 'vkadre.ru')){
$oldVideo = true;
$start = strpos($data, 'vkid=')+5;
$length = strpos($data, '&', $start)-$start;
$vkid = substr($data, $start, $length);
}else{
$highQuality = false;
if(strpos($data, "video_max_hd = '0'")!==false) $quality = '240';
else
{
if(strpos($data, "video_max_hd = '1'")!==false) $maxQ = '360';
else if(strpos($data, "video_max_hd = '2'")!==false) $maxQ = '480';
else if(strpos($data, "video_max_hd = '3'")!==false) $maxQ = '720';
if($maxQ<$quality) $quality = $maxQ;
$highQuality = true;
}

$ext = '.mp4';
if(strpos($data, 'video_no_flv = 0')!==false)
{
if(!$highQuality || $quality=='240')
{
$quality = '';
$ext = 'flv';
}

}
}


if($oldVideo){
$link = 'http://'.$host.'/assets/videos/'.$hash.$vkid.'.vk.flv';
$startTime = '';
}
else $link = $host.'u'.$uid.'/video/'.$hash.'.'.$quality.$ext;

$header = get_headers($link, 0);
$fp = @fopen($link, "rb") or die (MESSAGE);
if(isset($header)){
foreach($header as $v) header($v);
}
while(!feof($fp)){
echo fread($fp, BLOCK);
}
fclose($fp);


function getData($oid, $id, $hash, $message="Video not found", $timeout=30)
{ $url = 'http://vk.com/video_ext.php?oid='.$oid.'&id='.$id.'&hash='.$hash;
$ch = curl_init($url) ;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ;
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>

  • 0

#3 arashvg

arashvg
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 06 Февраль 2012 - 10:07

Вот тебе код, у меня на денвере работает


Вы не совсем правильно меня поняли, мне не нужно парсить контакт, мне нужно скормить скрипту ссылку на виде, например http://tubecontext.c...deoplayer/l.mp4 (ссылка рабочая, видео есть). И пропустить это видео через него как через ретранслятор.

тоесть прмрено так:

<?php
$url='http://tubecontext.com/videoplayer/l.mp4';
$header = get_headers($url, 0);
$fp = @fopen($url, "rb") or die (MESSAGE);
if(isset($header)){
foreach($header as $v) header($v);
}
while(!feof($fp)){
echo fread($fp, BLOCK);
}
fclose($fp);
?>

но у меня этот код дает ошибку 504, а сам парсер ВК в свою очередь, предлагает скачать видео, такого же эффекта нужно добиться и мне!
  • 0

#4 HapkomaH

HapkomaH
  • Пользователь
  • 38 сообщений
  • Репутация: 2

Отправлено 06 Февраль 2012 - 11:39

504 ошибка значит, что времени не хватило, поставить нужно set_time_limit(0); особенно на локалке. И желательно после echo fread($fp, BLOCK); добавить еще flush(); для отдачи текущего буфера браузеру сразу. Кстати для разгрузки небольшой сервера лучше наверное читать большими блоками (не проверял, могу ошибаться).

P.S.: arashvg, добро пожаловать! ;)
  • 0

#5 arashvg

arashvg
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 06 Февраль 2012 - 13:45

следующий код

<?php
error_reporting(E_ALL | E_STRICT) ;
ini_set('display_errors', 'On');
set_time_limit(0);
$url='http://tubecontext.com/videoplayer/l.mp4';
$header = get_headers($url, 0);
$fp = @fopen($url, "rb") or die (MESSAGE);
if(isset($header)){
foreach($header as $v) header($v);
}
while(!feof($fp)){
echo fread($fp, BLOCK);
flush();
}
fclose($fp);
?>
выдает также выдает 504, теструю на хостинге, вот ссылка http://onlainmovie.pp.ua/2.php

моежет в самом коде ошибка, тоесть может я не то, или не все то что нужно взял из работающего парсера?

P.S.: тут пришло в голову, а есть ли в ВК защита ссылки по ИП, например как на фильмиксе, или других круптых онлайн сайтах? есле нету, то в парсере нету и ретранслятора... тоесть он просто выдергивает ссылку из кода плеера (прямую ссылку, которая меняется не зависимо от ИП, а например раз в сутки), а не пропускает через себя видео поток, в таком случае и мой код работать не будет, хотя, он должен отдавать мне вдео на скачку вет сслку на видео я ему скормил также как и процедура парсинга в исходном скрипте....
Кто, что думает?
  • 0

#6 arashvg

arashvg
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 06 Февраль 2012 - 15:08

p.s. после 50-го нажатия F5 в браузере с загруженной ссылкой http://onlainmovie.pp.ua/2.php браузер все-таки предложил мне скачать файл, размером 10 мб, но вставляя ссылку в плеер видео не отображается, хотя по индикатору буферизации плеера, в буфер файл загружается

закомментировав строку //flush();

получаю

<b>Warning</b>: fread() [<a href='function.fread'>function.fread</a>]: Length parameter must be greater than 0 in <b>..../onlainmovie.pp.ua/2.php</b> on line <b>16</b><br />

  • 0

#7 arashvg

arashvg
    Topic Starter
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 06 Февраль 2012 - 16:29

блин дебилизм, добавил $link=$_GET['str']; перед строкой $header = get_headers($link, 0); в исходном коде, и все работет, в чем проблема была, хз )
  • 0

#8 Freekiller

Freekiller
  • Пользователь
  • 2 сообщений
  • Репутация: 0

Отправлено 08 Апрель 2012 - 06:26

arashvg, Если нужен просто ретранслятор видео то

$title = "имя файла";
header('Content-Disposition: attachment; filename="'.$title.'.flv"');
$link = ссылка на видео .flv';
$header = get_headers($link, 0);
$fp = @fopen($link, "rb");
if(isset($header)) foreach($header as $v) header($v);
while(!feof($fp)) echo fread($fp, BLOCK);
fclose($fp);


  • 0

#9 Bond

Bond
  • Пользователь
  • 1 сообщений
  • Репутация: 0

Отправлено 28 Февраль 2015 - 16:09

Вот тебе код, у меня на денвере работает

 
Не подскажите работает еще?


Сообщение отредактировал Bond: 28 Февраль 2015 - 16:10

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru