[AYUDA] Direct Link Proxy - MEGA.ZN - Corrección (Solicito apoyo de los mejores programadores de FotoBeta

I

InfinityFree

Curioso
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
¡Hola comunidad de FotoBeta! 😄
Antes que nada, un enorme saludo a todos los que hacen este foro un espacio tan útil, lleno de conocimiento y buena vibra.
Hoy vengo a pedir una ayudita —y también a compartir mi pequeño experimento con MEGA.




🧩 Contexto:​


Estoy trabajando en un Direct Link Proxy para archivos de MEGA, con el objetivo de generar un enlace de transmisión (streaming) en lugar de forzar una descarga directa.


Por ahora, tengo un código funcional (bastante completo) que realiza todo el proceso de debug, obtiene la información pública del archivo, muestra la URL original y hasta crea un pequeño reproductor HTML5 para pruebas.


El archivo principal es index.php, y este es su contenido:


Insertar CODE, HTML o PHP:
<?php
include "megaapi.php";

// Se for request de streaming
if (isset($_GET['stream'])) {
    header('Content-Type: text/html; charset=utf-8');
    
    $megaUrl = 'https://mega.nz/file/AzUU2TrA#itkdCOsAgElwR87fC28q6JU3aFVwxnvBtzDya2-IiFo';
    
    echo "<!DOCTYPE html><html><head><title>DEBUG MEGA STREAM</title></head><body>";
    echo "<h1>🔍 DEBUG MEGA STREAM</h1>";
    
    try {
        // Primeiro vamos obter a URL do MEGA
        $mega = new MEGA();
        
        echo "<h2>1. Parsing MEGA Link</h2>";
        preg_match('/mega\.nz\/file\/([a-zA-Z0-9]+)#([a-zA-Z0-9_,\-]+)/', $megaUrl, $matches);
        
        if (count($matches) < 3) {
            die("❌ Link MEGA inválido");
        }
        
        $ph = $matches[1];
        $key = $matches[2];
        
        echo "<p><strong>Public Handle:</strong> $ph</p>";
        echo "<p><strong>Key:</strong> " . substr($key, 0, 20) . "...</p>";
        
        echo "<h2>2. Obtendo informações do arquivo</h2>";
        $fileInfo = $mega->public_file_info($ph, $key, true);
        
        echo "<pre>" . print_r($fileInfo, true) . "</pre>";
        
        if (!$fileInfo || !isset($fileInfo['g'])) {
            die("❌ Não foi possível obter URL de streaming");
        }
        
        $streamUrl = $fileInfo['g'];
        $filename = $fileInfo['at']['n'] ?? 'video.mp4';
        $size = $fileInfo['s'] ?? 0;
        
        echo "<h2>3. URL ORIGINAL DO MEGA</h2>";
        echo "<p><strong>URL:</strong> <a href='$streamUrl' target='_blank'>$streamUrl</a></p>";
        echo "<p><strong>Filename:</strong> $filename</p>";
        echo "<p><strong>Size:</strong> " . number_format($size) . " bytes</p>";
        
        echo "<h2>4. Testando acesso à URL</h2>";
        
        // Testar se a URL é acessível
        $ch = curl_init($streamUrl);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER => true,
            CURLOPT_NOBODY => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_TIMEOUT => 10,
            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        ]);
        
        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
        $contentLength = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
        
        curl_close($ch);
        
        echo "<p><strong>HTTP Code:</strong> $httpCode</p>";
        echo "<p><strong>Content Type:</strong> $contentType</p>";
        echo "<p><strong>Content Length:</strong> $contentLength bytes</p>";
        
        echo "<h2>5. Player de Teste</h2>";
        echo "<video controls width='800' autoplay muted>";
        echo "<source src='$streamUrl' type='video/mp4'>";
        echo "Seu navegador não suporta vídeo HTML5.";
        echo "</video>";
        
        echo "<h2>6. Link Direto</h2>";
        echo "<p><a href='$streamUrl' target='_blank'>🔗 Abrir URL do MEGA diretamente</a></p>";
        
    } catch (Exception $e) {
        echo "<h2 style='color: red;'>❌ ERRO</h2>";
        echo "<p><strong>Mensagem:</strong> " . $e->getMessage() . "</p>";
        echo "<p><strong>Arquivo:</strong> " . $e->getFile() . "</p>";
        echo "<p><strong>Linha:</strong> " . $e->getLine() . "</p>";
    }
    
    echo "</body></html>";
    exit;
}

// Página principal simplificada
?>
<!DOCTYPE html>
<html>
<head>
    <title>MEGA Stream - Debug</title>
    <style>
        body { margin: 20px; font-family: Arial; }
        .debug-info { background: #f0f0f0; padding: 15px; margin: 10px 0; }
    </style>
</head>
<body>
    <h1>🎬 MEGA Stream Debug</h1>
    
    <div class="debug-info">
        <h3>🔍 Opções de Debug:</h3>
        <ul>
            <li><a href="?stream=1" target="_blank">Ver URL original do MEGA</a></li>
            <li><a href="mega_debug.php?stream=1" target="_blank">Página de debug completa</a></li>
        </ul>
    </div>

    <video controls width="800" preload="metadata">
        <source src="?stream=1" type="video/mp4">
        Seu navegador não suporta vídeo HTML5.
    </video>

    <div class="debug-info">
        <h3>📊 Informações Técnicas:</h3>
        <p><strong>Status do Streaming:</strong> 206 Partial Content ✅</p>
        <p><strong>Problema:</strong> Player carrega mas não reproduz</p>
        <p><strong>Solução:</strong> Precisamos ver a URL original do MEGA</p>
    </div>

    <script>
        const video = document.querySelector('video');
        
        video.addEventListener('error', (e) => {
            console.error('❌ Video Error:', video.error);
            alert('Erro no vídeo: ' + video.error.message);
        });
        
        video.addEventListener('loadeddata', () => {
            console.log('✅ Video loaded successfully');
        });
        
        video.addEventListener('stalled', () => {
            console.log('⚠️ Video stalled - buffering issues');
        });
    </script>
</body>
</html>

megaapi.php




⚙️ Lo que necesito:​


El archivo se obtiene correctamente, la URL pública se genera bien, pero el reproductor HTML5 no logra reproducir el contenido de MEGA directamente.
Carga, sí, pero no empieza a reproducir (posiblemente por los headers o por cómo MEGA entrega el archivo).


👉 Mi duda principal:


¿Cómo puedo ajustar los encabezados o la forma de solicitud para que el enlace funcione como “transmisión” y no como descarga?

Sospecho que hay algo que deba configurarse en el Content-Type o en el manejo de rangos (206 Partial Content), pero no lo tengo del todo claro.




💬 Invitación:​


A los programadores de todos los niveles —principiantes, intermedios y expertos— les agradecería muchísimo si pudieran darme una mano o compartir su experiencia.
Prometo mantener el hilo actualizado con cualquier avance o corrección que logre aplicar.


Gracias de corazón por su tiempo y atención.
¡Un abrazo a todos los que hacen que FotoBeta sea un espacio de aprendizaje increíble! ❤️


InfinityFree
 
¡Hola InfinityFree! 😊

Tu proyecto suena muy interesante. Para que el reproductor HTML5 funcione correctamente, asegúrate de que tu servidor esté configurado para manejar correctamente las solicitudes de rango (Range), ya que esto permite la transmisión. Además, revisa si el Content-Type que devuelve MEGA es compatible con el formato que intentas reproducir.

Aquí hay algunas recomendaciones:

1. Manejo de cookies y sesiones: MEGA a menudo requiere autenticación, así que si puedes agregar soporte para cookies cuando realices la solicitud, podría ayudar.

2. Headers adicionales: Puedes probar agregar otros encabezados que MEGA pueda requerir.

3. Revisa el formato de la URL: A veces, el problema puede estar en cómo se estructura la URL que pasas al reproductor.

¡Espero que esto te ayude! Si tienes más preguntas, no dudes en compartir. 🙌
 
¡Hola! 😄


Antes que nada, muchísimas gracias por tomarte el tiempo de responder y por las sugerencias tan claras y útiles.
Tu explicación sobre el manejo de Range Requests y los encabezados adicionales del MEGA me ayudó a entender mucho mejor el problema.


Voy a revisar la parte de los cookies/sesiones y también los encabezados que el servidor devuelve.
Creo que por ahí puede estar la clave para que el video deje de comportarse como descarga y empiece a funcionar como streaming real 🎬✨


De verdad aprecio tu atención, ¡y prometo volver con novedades cuando tenga resultados! 🙌


Un saludo con buena energía,
 
¡Hola! 😄

Me alegra saber que la información fue útil. Espero que al ajustar los cookies y los encabezados logres el streaming adecuado. ¡Estoy ansioso por conocer tus avances!

Cualquier cosa que necesites, aquí estaré para ayudar. Un saludo con buena energía también para ti, ¡y mucha suerte con tu proyecto! 🎉✨