Código PHP para ocultar URL de streaming/video

  • Autor Autor jzucchet
  • Fecha de inicio Fecha de inicio
J

jzucchet

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola, cómo están?
Alguien sabría algún código php donde pueda ocultar la URL del streaming o vídeo por una propia de mi servidor?
 
Desde URL o Desde tu propio vps?
 
una forma "podría" ser que llames a cierta web en php, le pases el parámetro que es la ruta o el id de tu streaming pero lo encriptes usando AES o algún otro algoritmo de encriptación a prueba de todo intento de descifrado, ademas en tu servidor puedes validar de donde viene esa conexión, si no viene de tu servidor rechazas la petición.
 
Ocultarlo a traves de una URL y servidor propio.

Desde URL
Ocultarlo a traves de una URL y servidor propio.


Me he quedado dormido este codigo creado por mi pero usado por muchos es bueno para proteger contenido de una forma sencilla

es llamado DRM basico

PHP:
/**

Esto creara una funcion generica que validara la fecha, dispositivo del usuario, navegador, ip, fecha de caducidad y demas

La funciones Decrypt debe ser creada y pasarla como JSON PARSE

*/





/** DRM */

function created_uri($contentShow, $data)

{

    $allowed = isset($_SERVER['HTTP_X_ALLOWED']) ? $_SERVER['HTTP_X_ALLOWED'] : false;

    $content = isset($_SERVER['HTTP_X_CONTENT']) ? $_SERVER['HTTP_X_CONTENT'] : false;



    if ($allowed and $content) {



        /** Firma */

        $sig = isset($data['sig']) ? $data['sig'] : false;



        if ($sig) {

            $signature = json_decode(Decrypt($sig));

            $method = $signature->encrypted;

            /** Permitido */

            $authenticated = true;



            /** exp */

            $exp = isset($method->expire) ? $method->expire : false;

            if (strtotime('now') >= $exp) {

                $authenticated = false;

            }



            /** ei */

            $ei = isset($method->ei) ? base64_decode($method->ei) : false;

            if (helper_user_agent() != $ei) {

                $authenticated = false;

            }



            /** ip */

            $ip = isset($method->ip) ? $method->ip : false;

            if (helper_user_ip() != $ip) {

                $authenticated = false;

            }



            /** id */

            $id = isset($method->id) ? $method->id : false;

            if ($content != $id) {

                $authenticated = false;

            }



            /** Acceso */

            if ($authenticated) {

                return $contentShow;

            } else {

                exit('{[Error.401]}');

            }

        } else {

            exit('{[Error.400]}');

        }

    } else {

        exit('{[Error.400]}');

    }

}



/*

    Lo siguiente es para utilizar los metodos created_uri()

*/



/** Tiempo */

$iat = time();

$exp = $iat + (60 * 1);



/** Firma */

$sig = array(

    'iat' => $iat,

    'exp' => $exp,

    'encrypted' => [

        'expire' => $exp,

        'ei' => base64_encode( helper_user_agent() ),

        'ip' => helper_user_ip(),

        'id' => 'Identificador del video ej: 1',

        'itag' => 'default',

        'source' => getenv('APP_NAME'),

        'mime' => 'application/x-mpegURL',

        'clen' => 'Segundos del video/content',

        'lmt' => $iat,

        'sparams' => 'expire,ei,ip,id,itag,source,mime,clen,dur,lmt'

    ]

);



/*

    El metodo Encrypt debe ser creada y pasarla como JSON PARSE

*/

/** Firma protegida */

$tplSig = Encrypt(json_encode($sig));

$urlSig = http_build_query($sig['encrypted']);



/** Firma Creada */

$signature = '?' . urldecode ( $urlSig ) . '&sig=' . $tplSig;



/*

    Enviando los parametros

*/



/** La firma debe pasar de la siguiente forma */



$uri = '/streamingProgressive/' . $slug . $signature;



/*

    Adicionalmente debe enviar varios parametros por los HEADER

    Asi evitara el uso de hotlinking fake IP / referrer

*/



/*

    Esto debe ser enviado en los Header's de su soliictud a la url

    streamingProgressive

 

    xhr.setRequestHeader('X-content', '<?php echo $sig['encrypted']['id']; ?>');

    xhr.setRequestHeader('X-allowed', '<?php echo $sig['encrypted']['itag']; ?>');

*/



/*

    Funciones genericas que se usan



*/



/** Metodo para la IP del usuario */

function helper_user_ip()

{



    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

        //check ip from share internet

        $ip = $_SERVER['HTTP_CLIENT_IP'];

    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

        //to check ip is pass from proxy

        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

    } elseif (!empty($_SERVER['REMOTE_ADDR'])) {

        $ip = $_SERVER['REMOTE_ADDR'];

    } else {

        $ip = null;

    }

    return $ip;

}



/** Metodo para obtener el agent del usuario */

function helper_user_agent()

{



    if (!empty($_SERVER['HTTP_USER_AGENT'])) {

        //check ip from share internet

        $agent = $_SERVER['HTTP_USER_AGENT'];

    } else {

        $agent = null;

    }

    return $agent;

}



/**

    Analizando las URL'S y entiendo el proceso realizado

*/





/**



    https://videos.com/videoplayback/1?expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09



 

    URL PARTS



 

    Scheme:

    https



    Protocol:

    https



    Authority:

    videos.com

    Host:

    videos.com

    Hostname:

    videos.com

    Domain:

    videos.com

    Tld:

    com



    Resource:

    /videoplayback/1?expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09



    Directory:

    /videoplayback

    Path:

    /videoplayback/1

    File name:

    1

    Query string:

    expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09



    Query String





    'expire':

    1576342267 // Tiempo de vida

    'ei': // Navegador

    TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==

    'ip': // Ip del usuario

    127.0.0.1

    'id':

    1 // Recurso solicitado

    'itag':

    default // Calidad del video

    'source':

    Video // Fuente donde se solicita (DOMINIO)

    'mime':

    application/x-mpegURL // Tipo de contenido

    'clen':

    6932456 // Duracion del video

    'lmt':

    1576342207 // Fecha de creacion

    'sparams':

    expire,ei,ip,id,itag,source,mime,clen,dur,lmt // Parametros validados

 

    'sig':

    SIGNATURE // Firma que sera validada por el back-end

*/
 
De las dos formas?
Ósea por ejemplo que la url del streaming sea por ejemplo: Streaming.com:80/live.m3u8 o .mp4 y que bajo mi dominio y servidor diga mydomain.com/test-php? algo así...
 
Tienes algún código?
 
Desde URL



Me he quedado dormido este codigo creado por mi pero usado por muchos es bueno para proteger contenido de una forma sencilla

es llamado DRM basico
Voy a probar a ver que tal.
 
Desde URL o Desde tu propio vps?
No es lo que quiero exactamente, quiero algo que por ejemplo el dominio del archivo sea 352.235.234.32/live.m3u8 , .mp4 o .mp3 y que con el código a la gente le salga algo así mydomain.com/test.php? o algo así cosa que no sepan de donde viene el dominio original.
 


$stream1 = new VideoStream('archivos/local.mp4');
$stream1->start();

Convertira tuservidor.com/archivos/local.mp4

a

dondeseejecute.php
 
Perfecto eso es lo que quería, pero tengo un problema si la persona entra al archivo se ve el código junto con el link del streaming. No hay forma de que ese código cuando accedan a través del link de otra cosa o no se vea directamente?
 
Perfecto eso es lo que quería, pero tengo un problema si la persona entra al archivo se ve el código junto con el link del streaming. No hay forma de que ese código cuando accedan a través del link de otra cosa o no se vea directamente?

con la clase de arriba haces enlaces solo para la ip que lo creo y demas lo puedes juntar y hacer algo guapo.
 
con la clase de arriba haces enlaces solo para la ip que lo creo y demas lo puedes juntar y hacer algo guapo.
Vale gracias!
Una última cosita, cuando tenga el código ya hecho, lo pongo en el reproductor tal cual (link.com/index.php)? O le tengo que poner algun #.m3u8 para que ande?