StreamTV Player & Cloudflare Proxy

Bypass CORS & Header constraints for Smart TVs

Listo para cargar canal

Selecciona o ingresa una URL

Ningún enlace cargado

Configurar Stream

Canales de Prueba Rápidos

Cloudflare Worker Stream Proxy Code

Copia y pega este código dentro de tu panel de Cloudflare Workers.

/**
 * Cloudflare Worker: Stream Proxy (MPD / M3U8 CORS & Header Bypass)
 * Diseñado para reproducir streams restringidos en Smart TVs.
 */

addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  // Manejar preflight OPTIONS para CORS
  if (request.method === "OPTIONS") {
    return new Response(null, {
      status: 204,
      headers: getCorsHeaders(),
    });
  }

  const url = new URL(request.url);
  const targetUrl = url.searchParams.get("url");

  if (!targetUrl) {
    return new Response("Missing 'url' parameter", { 
      status: 400, 
      headers: getCorsHeaders() 
    });
  }

  // Permitir la personalización opcional del Referer por parámetro
  const customReferer = url.searchParams.get("referer") || "https://pelisjuanita.com/";

  try {
    // Configurar cabeceras solicitadas por los servidores de streaming
    const customHeaders = new Headers();
    customHeaders.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36");
    customHeaders.set("Referer", customReferer);
    customHeaders.set("Origin", new URL(customReferer).origin);
    customHeaders.set("Accept", "*/*");

    // Reenviar Range headers para streaming de video por partes
    const range = request.headers.get("Range");
    if (range) {
      customHeaders.set("Range", range);
    }

    // Realizar la petición al servidor origen
    const response = await fetch(targetUrl, {
      method: request.method,
      headers: customHeaders,
      redirect: "follow",
    });

    // Clonar cabeceras de respuesta y añadir CORS global
    const responseHeaders = new Headers(response.headers);
    getCorsHeaders().forEach((value, key) => responseHeaders.set(key, value));

    // Desactivar restricciones de seguridad en las cabeceras entregadas a la Smart TV
    responseHeaders.delete("X-Frame-Options");
    responseHeaders.delete("Content-Security-Policy");

    return new Response(response.body, {
      status: response.status,
      statusText: response.statusText,
      headers: responseHeaders,
    });
  } catch (error) {
    return new Response(JSON.stringify({ error: error.message }), {
      status: 500,
      headers: {
        "Content-Type": "application/json",
        ...getCorsHeaders(),
      },
    });
  }
}

function getCorsHeaders() {
  return new Headers({
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Methods": "GET, HEAD, POST, OPTIONS",
    "Access-Control-Allow-Headers": "Content-Type, Range, User-Agent, Referer, Authorization",
    "Access-Control-Expose-Headers": "Content-Length, Content-Range, Content-Type",
  });
}
        

Pasos para desplegar en Cloudflare (Gratis)

  1. Crea una cuenta en Cloudflare.com e ingresa al panel principal.
  2. En la barra lateral, ve a Workers & Pages y haz clic en Create Application.
  3. Haz clic en Create Worker, asigna un nombre (ej. stream-proxy) y presiona Deploy.
  4. Presiona Edit Code, borra el código existente y pega el código mostrado arriba.
  5. Haz clic en Save and Deploy. ¡Tu proxy de streaming ya estará listo para usar!