Stream de Fembed 🎦 PHP gratis (Proxy)

zcriptz

1
Ómicron
Programador
Verificación en dos pasos desactivada
Desde
26 Mar 2013
Mensajes
4.646
PHP:
<?php
error_reporting(0);

$fembedUrl = $_GET['url'];
$partSize = 3; //MB
$personalKey = 'sBBcAcKK123';  //Una clave para el token, la que quieran...

class xURL{
    public function __construct($cookies=NULL, $agent=NULL, $proxy=NULL){
        $this->resources = [];
        $this->SETOPT = array(
            'RETURNTRANSFER' => 1,
            'FOLLOWLOCATION' => 1,
            'SSL_VERIFYHOST' => 0,
            'SSL_VERIFYPEER' => 0,
            'CUSTOMREQUEST'  => 'GET',
        );
        $this->proxy = $proxy;
        if($cookies){
            $this->SETOPT['COOKIEJAR'] = $cookies;
            $this->SETOPT['COOKIEFILE'] = $cookies;
        }
        $this->SETOPT['USERAGENT'] = $agent;
    }

    public function cURLOPT($c=''){
        if(!$c) $c = $this->lastResource;
        curl_setopt_array($c, array_combine(array_map(function($k){ return constant('CURLOPT_'.$k); }, array_keys($this->SETOPT)), $this->SETOPT));
        return $this;
    }

    public function cURL($o=''){
        $this->lastResource = curl_init();
        if(!$this->firstResource) $this->firstResource = $this->lastResource;
        if($this->proxy){
            $proxyData = array_flip(explode('@', $this->proxy));
            $this->SETOPT['PROXY'] = $proxyData[0];
            if($pD[1]) $this->SETOPT['PROXYUSERPWD'] = $proxyData[1];
            if($this->URL) $this->SETOPT['URL'] = $this->URL;
            if(!$this->SETOPT['PROXYTYPE']) $this->SETOPT['PROXYTYPE'] = 'HTTP';
        }
        if($o) $this->ADDOPT($o);
        if(@$this->httpHeaders) curl_setopt($c, CURLOPT_HTTPHEADER, $this->httpHeaders);
        $this->resources[] = $this->lastResource;
        return $this;
    }

    public function browse($URL=NULL, $ref=NULL, $post=NULL){
        if($URL) $this->SETOPT['URL'] = $URL;
        if($ref) $this->SETOPT['REFERER'] = $ref;
        if($this->SETOPT['POSTFIELDS'] || $this->SETOPT['POSTFIELDS'] = $post){
            $this->SETOPT['POST'] = 1;
            $this->SETOPT['CUSTOMREQUEST'] = 'POST';
        }else{
            $this->SETOPT['POST'] = 0;
            unset($this->SETOPT['CUSTOMREQUEST']);
        }
        return $this->exec($this->cURL()->cURLOPT()->lastResource);
    }

    public function exec($c=''){
        if(!$c) $c = $this->lastResource;
        $this->result = curl_exec($c);
        return $this;
    }

    private function close($c){
        return curl_close($c);
    }

    public function getSize(){
        $s = $this->getHeader('Content-Range') ? explode('/', $this->getHeader('Content-Range')[1])[1] : $this->getHeader('Content-Length')[1];
        return $s;
    }

    public function searchHeader($h){
        foreach($this->headers AS $k => $v) if($e = explode(': ', $v) AND stristr($e[0], $h)) return array_map('trim', $e);
        return false;
    }

    public function getHeader($header=NULL, $follow=1){
        $this->cURL(
            array(
                'HEADER' => 1,
                'FOLLOWLOCATION' => $follow,
                //'NOBODY' => 1
                'RANGE' => '0-200'
            )
        );
        $this->headers = array_filter(array_map('trim', explode(PHP_EOL, $this->exec($this->cURLOPT()->lastResource)->result)));
        if($header) return $this->searchHeader($header);
        return $this;
    }

    private function flushBytes($c, $str){
        echo $str;
        $this->flush();
        return strlen($str);
    }

    public function flush(){
        ob_end_flush();
        ob_flush();
        flush();
        ob_start();
        return $this;
    }

    public function ADDOPT($a){
        $this->SETOPT = array_merge($this->SETOPT, $a);
        return $this;
    }

    function cmd($c){
        preg_match_all('/curl "[^"]+|-H "[^"]+|--[^"]+"[^"]+/', str_replace('^', '', str_replace('\^"', "'", $c)), $cmdInfo);
        $this->SETOPT['POSTFIELDS'] = '';
        foreach($cmdInfo[0] AS $curlInfo)
            !strstr($curlInfo, '--data')
                ?
                    strstr($curlInfo, '-H "')
                        &&
                    ($curlInfo = str_replace('-H "', '', $curlInfo))
                        &&
                    $this->headers[] = $curlInfo
                :
                    $this->SETOPT['POSTFIELDS'] = urldecode(preg_replace('/--[^"]+"/', '', $curlInfo))
        ;

        return $this->browse(str_replace('curl "', '', $cmdInfo[0][0]), '');
    }

    private function setRange($x, $r, $r2){
        $this->ADDOPT(
            array(
                'HEADER' => 0,
                'RANGE' => $r.'-'.$r2,
                'NOPROGRESS' => 0,
                'BUFFERSIZE' =>  $this->bufferSize,
                'TIMEOUT' => 0,
                'CONNECTTIMEOUT' => 0,
                'WRITEFUNCTION' => array($this, 'flushBytes')
            )
        );
        return $this->cURLOPT($x);
    }
 
    public function streamVideo($i=0, $end=NULL, $s = 0, $bf = 10240){
            $this->bufferSize = $bf;
            if(!$s) $s = $this->getSize();
            if(!$end) $end = $s;
            header('Content-Length:'.$end+1);
            $this->setRange($this->lastResource, $i, $end);
            $this->exec($curl);
    }
}


$size = isset($_COOKIE['size_FStream']) ? $_COOKIE['size_FStream'] : '';
$videoLocation = isset($_COOKIE['videoLocation_FStream']) ? $_COOKIE['videoLocation_FStream'] : '';
$token = isset($_COOKIE['token_FStream']) ? $_COOKIE['token_FStream'] : '';

if(isset($_GET['reset']) OR $token != md5($size.$videoLocation.$personalKey)){
    $xURL = new xURL('cookies.txt', $_SERVER['HTTP_USER_AGENT']);

    $host = str_ireplace('www.', '', parse_url($fembedUrl)['host']);

    preg_match('/v\/([a-z0-9-]+)/', $fembedUrl, $fembedId);

    $xURL->cmd('curl "https://'.$host.'/api/source/'.$fembedId[1].'" -H "authority: '.$host.'" -H "accept: */*" -H "origin: '.$host.'" -H "x-requested-with: XMLHttpRequest" -H "user-agent: '.$_SERVER['HTTP_USER_AGENT'].'" -H "content-type: application/x-www-form-urlencoded; charset=UTF-8" -H "sec-fetch-site: same-origin" -H "sec-fetch-mode: cors" -H "referer: https://'.$host.'/v/'.$fembedId.'" -H "accept-language: es-ES,es;q=0.9" --data "r=^&d='.$host.'" --compressed');

    $videoData = json_decode($xURL->result);
    $xURL = new xURL('cookies.txt', $_SERVER['HTTP_USER_AGENT']);
    $videoLocation = $videoData->data[count($videoData->data)-1]->file;
    $xURL->SETOPT['URL'] = $videoLocation;

    $size = $xURL->getSize();
    $token = md5($size.$videoLocation.$personalKey.$fembedUrl);
    setcookie('videoLocation_FStream', urlencode($videoLocation), time()+7200);
    setcookie('size_FStream', $size, time()+7200);
    setcookie('token_FStream', $token, time()+7200);
}else{
    $xURL = new xURL('cookies.txt', $_SERVER['HTTP_USER_AGENT']);
}

if($_SERVER['HTTP_RANGE'])
    $rangeReceived = explode('-', explode('=', $_SERVER['HTTP_RANGE'])[1]);
;

$beginReceived = preg_replace("/[^0-9](.*)$/", '', $rangeReceived[0]);

$endReceived = preg_replace("/[^0-9](.*)$/", '', $rangeReceived[1]);

$begin = $beginReceived OR $begin = 0;

$end = $endReceived OR $end = 1024*1024*$partSize+$begin;

$begin > 0 || $end < $size
    ?
        header('HTTP/1.0 206 Partial Content')
    :
        header('HTTP/1.0 200 OK')
;

$length = $end-$begin+1;
header("Content-Length: $length");
header("Content-Type: video/mp4");
header('Accept-Ranges: bytes');
header("Content-Transfer-Encoding: BINARY");
header("Content-Disposition: inline");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Connection: close');

header("Content-Range: bytes $begin-$end/$size");

$xURL->SETOPT['URL'] = $videoLocation;
$xURL->streamVideo($begin, $end, $size, 10240);

No necesita Frameworks.

Pueden poner que la URL de Fembed se defina por GET o POST, eso queda a criterio. (Este código, solo funciona con Fembed)

Se puede adelantar el video. 👍 (Gracias al sistema de rangos)

¿Qué hace?
Descarga el video de Fembed (en memoria, no lo guarda) y lo va pasando al usuario constantemente. (Proxy)

Solo hay que copiar el código y guardarlo como PHP. 👍

Se puede usar hosting normal. (Aunque quizás se pare un poco)


¡A ver quien es el primero que dice que funciona! (O que no 😂)
Funciona de maravilla 😍


Pueden agregarle un poco de seguridad con lo siguiente:

PD: editándolo, sirve para otros servidores.


___________

 
Última edición:

Henry00jj95

Épsilon
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
29 May 2019
Mensajes
864
Lo probare bro. ;)
 

Henry00jj95

Épsilon
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
29 May 2019
Mensajes
864
Genial :D👍

Por cierto, tu web de la firma está caída :(, no se si sea hace mucho, por las dudas te aviso.
Si bro, ya no la estoy usando, y la deje hay mejor, me dedique a otra cosas ;) pero estoy probando tú script en otra web 😍
 

Joseph2009

Gamma
Social Media
Verificación en dos pasos desactivada
¡Usuario con pocos negocios!
Desde
26 Ene 2016
Mensajes
176
Para que sirve exactamente? que diferencia hay con usar el embed normal de fembed?
 

zcriptz

1
Ómicron
Programador
Verificación en dos pasos desactivada
Desde
26 Mar 2013
Mensajes
4.646
Para que sirve exactamente? que diferencia hay con usar el embed normal de fembed?

No tiene PopUp.

Puedes tener control del video poniéndolo en tu propio player.

Si lo editas puedes descargar la película también.
 

Henry00jj95

Épsilon
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
29 May 2019
Mensajes
864
No tiene PopUp.

Puedes tener control del video poniéndolo en tu propio player.

Si lo editas puedes descargar la película también.
Funciona de maravilla 😍
 

Joseph2009

Gamma
Social Media
Verificación en dos pasos desactivada
¡Usuario con pocos negocios!
Desde
26 Ene 2016
Mensajes
176
No tiene PopUp.

Puedes tener control del video poniéndolo en tu propio player.

Si lo editas puedes descargar la película también.

Pero si los de fembed te pillan haciendo eso seguro q te dan ban xD
 

Dieguit0sk8

Delta
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
6 Jul 2012
Mensajes
500
Que servidor recomiendas para utilziar estos tipos de script, ya que consume bastante.?
 

Dieguit0sk8

Delta
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
6 Jul 2012
Mensajes
500
¿Mediste el consumo? 🤔
Si, gasta muchisimo y si se usa en un hosting compartido, la velocidad de tranferencia es muy lenta, llega a un punto en el que si ven el video muchas personas a la vez a muchos no le carga.
 

zcriptz

1
Ómicron
Programador
Verificación en dos pasos desactivada
Desde
26 Mar 2013
Mensajes
4.646
Si, gasta muchisimo y si se usa en un hosting compartido, la velocidad de tranferencia es muy lenta, llega a un punto en el que si ven el video muchas personas a la vez a muchos no le carga.

Lo he estado usando en hostgator en un shared hosting (se puede seleccionar el más caro) con el cupón CRAZYMONTH de $0.01 un mes y me anduvo bien.
El consumo que marcaba era bajisimo.

Pero no sabría decirte cuantas personas a la vez...

También en los VPS más baratos de OVH.

Lo ideal sería tener varios servidores y repartir...

_____

Actualicé el código para declarar el tamaño de las partes en MB.
 
Última edición:

Jonaxhs

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios!
Desde
13 Nov 2019
Mensajes
33
Como lo configuro bro , si remplazo url por la url de video me da el mismo error
 

Adjuntos

  • Captura de pantalla de 2020-04-23 13-40-26.png
    Captura de pantalla de 2020-04-23 13-40-26.png
    303,2 KB · Visitas: 110

Henry00jj95

Épsilon
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
29 May 2019
Mensajes
864
Como lo configuro bro , si remplazo url por la url de video me da el mismo error
Algo esta haciendo mal bro, en si el codigo funciona correctamente, ya lo probe y lo volvi a probar y va de maravilla.
Fijate que sea una URL de fembed :)
 

Jonaxhs

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios!
Desde
13 Nov 2019
Mensajes
33
Algo esta haciendo mal bro, en si el codigo funciona correctamente, ya lo probe y lo volvi a probar y va de maravilla.
Fijate que sea una URL de fembed :)
Incluso lo hice con el formulario y me salta el siguiente error
 

Adjuntos

  • Captura de pantalla de 2020-04-23 14-04-14.png
    Captura de pantalla de 2020-04-23 14-04-14.png
    130,7 KB · Visitas: 78

zcriptz

1
Ómicron
Programador
Verificación en dos pasos desactivada
Desde
26 Mar 2013
Mensajes
4.646
Incluso lo hice con el formulario y me salta el siguiente error

Creo que está fallando al tomar el MP4.

El enlace de Fembed que pusiste, funciona?
(Puede ser que haya sido eliminado y por eso no funciona)
 

Henry00jj95

Épsilon
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
29 May 2019
Mensajes
864
Creo que está fallando al tomar el MP4.

El enlace de Fembed que pusiste, funciona?
(Puede ser que haya sido eliminado y por eso no funciona)
Parece que esta con error bro, acabo de probarlo y da error, lo que probe anteriomente ha sido la version anterior, antes que actualices el codigo, por que veo que es diferente. ;)
 

Crea una cuenta o accede para comentar

Debes ser un miembro para poder comentar

Crear cuenta

Crea una cuenta en nuestra comunidad

Acceder

¿Ya tienes una cuenta? Accede aquí


Arriba