{"id":2,"date":"2026-05-05T13:33:47","date_gmt":"2026-05-05T13:33:47","guid":{"rendered":"https:\/\/googlecumbia.metricavisual.com\/?page_id=2"},"modified":"2026-09-16T20:22:05","modified_gmt":"2026-09-16T20:22:05","slug":"cine-familiar","status":"publish","type":"page","link":"https:\/\/googlecumbia.metricavisual.com\/","title":{"rendered":"Cine familia"},"content":{"rendered":"\n<!-- REPRODUCTOR HLS PARA WORDPRESS -->\n<div class=\"wptv\" id=\"wptv-1\" data-src=\"https:\/\/lbgo.bozztv.com\/ssh101\/ssh101\/wowchannelsd\/chunks.m3u8?lb_backend_hint=7\" data-title=\"Canal en vivo\" data-poster=\"\" data-autoplay=\"true\" data-muted=\"true\">\n<\/div>\n\n<!-- ESTILOS DEL REPRODUCTOR -->\n<style>\n.wptv{--wptv-accent:#3b82f6;width:100%;max-width:900px;margin:0 auto;font-family:system-ui,-apple-system,\"Segoe UI\",Roboto,sans-serif;color:#fff;-webkit-tap-highlight-color:transparent}\n.wptv *{box-sizing:border-box}\n.wptv__stage{position:relative;width:100%;aspect-ratio:16\/9;background:#000;border-radius:14px;overflow:hidden;box-shadow:0 12px 30px rgba(0,0,0,.55)}\n.wptv__stage:fullscreen{border-radius:0;aspect-ratio:auto;height:100%}\n.wptv__video{width:100%;height:100%;object-fit:contain;display:block;background:#000}\n.wptv__overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:rgba(0,0,0,.78);backdrop-filter:blur(3px);text-align:center;padding:16px;z-index:3;transition:opacity .25s}\n.wptv__overlay[hidden]{display:none}\n.wptv__spinner{width:42px;height:42px;border:3px solid rgba(255,255,255,.2);border-top-color:var(--wptv-accent);border-radius:50%;animation:wptv-spin .9s linear infinite}\n@keyframes wptv-spin{to{transform:rotate(360deg)}}\n@media (prefers-reduced-motion:reduce){.wptv__spinner{animation-duration:2.5s}}\n.wptv__msg{margin:0;font-size:15px;opacity:.92}\n.wptv__btn{appearance:none;border:0;cursor:pointer;background:var(--wptv-accent);color:#fff;font-weight:700;font-size:15px;padding:11px 22px;border-radius:999px;transition:transform .15s,filter .15s}\n.wptv__btn:hover{filter:brightness(1.12)}\n.wptv__btn:active{transform:scale(.97)}\n.wptv__bar{position:absolute;left:0;right:0;bottom:0;z-index:2;display:flex;align-items:center;gap:6px;padding:26px 10px 8px;background:linear-gradient(to top,rgba(0,0,0,.85),transparent);opacity:0;transform:translateY(6px);transition:opacity .2s,transform .2s;flex-wrap:wrap}\n.wptv__stage:hover .wptv__bar,.wptv__stage.is-paused .wptv__bar,.wptv__bar:focus-within{opacity:1;transform:none}\n.wptv__ico{appearance:none;background:transparent;border:0;color:#fff;cursor:pointer;padding:7px;border-radius:8px;line-height:0;display:inline-flex;align-items:center;justify-content:center;transition:background .15s}\n.wptv__ico:hover{background:rgba(255,255,255,.16)}\n.wptv__ico:focus-visible,.wptv__btn:focus-visible,.wptv__sel:focus-visible{outline:2px solid #fff;outline-offset:2px}\n.wptv__ico svg{width:20px;height:20px;fill:currentColor;pointer-events:none}\n.wptv__live{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:800;letter-spacing:.08em;background:rgba(255,255,255,.12);border:0;color:#fff;padding:6px 10px;border-radius:999px;cursor:pointer}\n.wptv__live i{width:8px;height:8px;border-radius:50%;background:#ef4444;display:block;animation:wptv-pulse 1.6s infinite}\n.wptv__live.is-behind{opacity:.6}\n.wptv__live.is-behind i{background:#94a3b8;animation:none}\n@keyframes wptv-pulse{0%,100%{opacity:1}50%{opacity:.25}}\n.wptv__vol{width:80px;accent-color:var(--wptv-accent);cursor:pointer}\n.wptv__spacer{flex:1}\n.wptv__sel{background:rgba(255,255,255,.12);color:#fff;border:0;border-radius:8px;padding:6px 8px;font-size:12px;cursor:pointer}\n.wptv__sel option{color:#111}\n.wptv__title{position:absolute;top:0;left:0;right:0;z-index:2;padding:12px 14px 30px;font-size:14px;font-weight:600;background:linear-gradient(to bottom,rgba(0,0,0,.7),transparent);opacity:0;transition:opacity .2s}\n.wptv__stage:hover .wptv__title,.wptv__stage.is-paused .wptv__title{opacity:1}\n@media (max-width:480px){.wptv__vol{display:none}.wptv__sel{font-size:11px}}\n<\/style>\n\n<!-- L\u00d3GICA DEL REPRODUCTOR -->\n<script>\n(function () {\n  \"use strict\";\n  var HLS_CDN = \"https:\/\/cdn.jsdelivr.net\/npm\/hls.js@1.5.17\/dist\/hls.min.js\";\n  var hlsLoader = null;\n\n  function loadHls() {\n    if (window.Hls) return Promise.resolve(window.Hls);\n    if (hlsLoader) return hlsLoader;\n    hlsLoader = new Promise(function (res, rej) {\n      var s = document.createElement(\"script\");\n      s.src = HLS_CDN; s.async = true;\n      s.onload = function () { res(window.Hls); };\n      s.onerror = function () { rej(new Error(\"No se pudo cargar hls.js\")); };\n      document.head.appendChild(s);\n    });\n    return hlsLoader;\n  }\n\n  var ICONS = {\n    play: '<svg viewBox=\"0 0 24 24\"><path d=\"M8 5v14l11-7z\"\/><\/svg>',\n    pause: '<svg viewBox=\"0 0 24 24\"><path d=\"M6 5h4v14H6zm8 0h4v14h-4z\"\/><\/svg>',\n    vol: '<svg viewBox=\"0 0 24 24\"><path d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3a4.5 4.5 0 0 0-2.5-4v8a4.5 4.5 0 0 0 2.5-4z\"\/><\/svg>',\n    mute: '<svg viewBox=\"0 0 24 24\"><path d=\"M16.5 12a4.5 4.5 0 0 0-2.5-4v2.2l2.4 2.4c.07-.2.1-.4.1-.6zM19 12c0 .9-.2 1.8-.5 2.6l1.5 1.5A8.9 8.9 0 0 0 21 12c0-4.3-3-7.9-7-8.8v2A7 7 0 0 1 19 12zM4.3 3L3 4.3 7.7 9H3v6h4l5 5v-6.7l4.2 4.2c-.7.5-1.4.9-2.2 1.1v2c1.4-.3 2.6-.9 3.7-1.7l2 2 1.3-1.3L4.3 3zM12 4L9.9 6.1 12 8.2V4z\"\/><\/svg>',\n    fs: '<svg viewBox=\"0 0 24 24\"><path d=\"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z\"\/><\/svg>',\n    pip: '<svg viewBox=\"0 0 24 24\"><path d=\"M19 11h-8v6h8v-6zm4 8V5a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2zm-2 .02H3V4.98h18v14.04z\"\/><\/svg>'\n  };\n\n  function build(root) {\n    var src = root.dataset.src;\n    if (!src) return;\n    var title = root.dataset.title || \"\";\n    var autoplay = root.dataset.autoplay !== \"false\";\n    var startMuted = root.dataset.muted !== \"false\";\n\n    root.innerHTML =\n      '<div class=\"wptv__stage is-paused\">' +\n        (title ? '<div class=\"wptv__title\">' + title.replace(\/[<>&]\/g, \"\") + \"<\/div>\" : \"\") +\n        '<video class=\"wptv__video\" playsinline webkit-playsinline preload=\"metadata\"' +\n          (root.dataset.poster ? ' poster=\"' + root.dataset.poster + '\"' : \"\") + \"><\/video>\" +\n        '<div class=\"wptv__overlay\" role=\"status\" aria-live=\"polite\">' +\n          '<div class=\"wptv__spinner\"><\/div>' +\n          '<p class=\"wptv__msg\">Cargando transmisi\u00f3n\u2026<\/p>' +\n          '<button class=\"wptv__btn\" type=\"button\" hidden>\u25b6 Iniciar reproducci\u00f3n<\/button>' +\n        \"<\/div>\" +\n        '<div class=\"wptv__bar\">' +\n          '<button class=\"wptv__ico js-play\" type=\"button\" aria-label=\"Reproducir\">' + ICONS.play + \"<\/button>\" +\n          '<button class=\"wptv__ico js-mute\" type=\"button\" aria-label=\"Silenciar\">' + ICONS.vol + \"<\/button>\" +\n          '<input class=\"wptv__vol js-vol\" type=\"range\" min=\"0\" max=\"1\" step=\"0.05\" value=\"1\" aria-label=\"Volumen\">' +\n          '<button class=\"wptv__live js-live\" type=\"button\" title=\"Ir al directo\"><i><\/i>EN VIVO<\/button>' +\n          '<span class=\"wptv__spacer\"><\/span>' +\n          '<select class=\"wptv__sel js-quality\" aria-label=\"Calidad\" hidden><option value=\"-1\">Auto<\/option><\/select>' +\n          '<button class=\"wptv__ico js-pip\" type=\"button\" aria-label=\"Picture in picture\" hidden>' + ICONS.pip + \"<\/button>\" +\n          '<button class=\"wptv__ico js-fs\" type=\"button\" aria-label=\"Pantalla completa\">' + ICONS.fs + \"<\/button>\" +\n        \"<\/div>\" +\n      \"<\/div>\";\n\n    var q = function (s) { return root.querySelector(s); };\n    var stage = q(\".wptv__stage\"), video = q(\".wptv__video\"),\n        overlay = q(\".wptv__overlay\"), spinner = q(\".wptv__spinner\"),\n        msg = q(\".wptv__msg\"), bigBtn = q(\".wptv__btn\"),\n        btnPlay = q(\".js-play\"), btnMute = q(\".js-mute\"), rngVol = q(\".js-vol\"),\n        btnLive = q(\".js-live\"), selQ = q(\".js-quality\"),\n        btnPip = q(\".js-pip\"), btnFs = q(\".js-fs\");\n\n    var hls = null, retries = 0, MAX_RETRIES = 6, retryTimer = null, destroyed = false;\n\n    if (location.protocol === \"https:\" && \/^http:\\\/\\\/\/i.test(src)) {\n      showError(\"El stream usa HTTP y tu sitio HTTPS: el navegador lo bloquear\u00e1 por seguridad. Usa una URL https:\/\/.\");\n      return;\n    }\n\n    function setOverlay(text, opts) {\n      opts = opts || {};\n      overlay.hidden = false;\n      msg.textContent = text;\n      spinner.style.display = opts.loading ? \"\" : \"none\";\n      bigBtn.hidden = !opts.button;\n      if (opts.button) bigBtn.textContent = opts.button;\n    }\n    function hideOverlay() { overlay.hidden = true; }\n    function showError(text) { setOverlay(text, { button: \"\ud83d\udd04 Reintentar\" }); }\n\n    function scheduleRetry(reason) {\n      if (destroyed) return;\n      if (retries >= MAX_RETRIES) { showError(reason + \" Pulsa para reintentar.\"); return; }\n      var wait = Math.min(1000 * Math.pow(2, retries), 15000);\n      retries++;\n      setOverlay(\"Reconectando\u2026 (intento \" + retries + \"\/\" + MAX_RETRIES + \")\", { loading: true });\n      clearTimeout(retryTimer);\n      retryTimer = setTimeout(start, wait);\n    }\n\n    function teardown() {\n      clearTimeout(retryTimer);\n      if (hls) { try { hls.destroy(); } catch (e) {} hls = null; }\n    }\n\n    function tryPlay() {\n      var p = video.play();\n      if (p && p.catch) {\n        p.catch(function () {\n          if (!video.muted) {\n            video.muted = true; syncMute();\n            video.play().catch(function () {\n              setOverlay(\"Pulsa para reproducir\", { button: \"\u25b6 Reproducir\" });\n            });\n          } else {\n            setOverlay(\"Pulsa para reproducir\", { button: \"\u25b6 Reproducir\" });\n          }\n        });\n      }\n    }\n\n    function fillQualities() {\n      if (!hls || !hls.levels || hls.levels.length < 2) { selQ.hidden = true; return; }\n      selQ.innerHTML = '<option value=\"-1\">Auto<\/option>';\n      hls.levels.forEach(function (l, i) {\n        var o = document.createElement(\"option\");\n        o.value = i;\n        o.textContent = (l.height ? l.height + \"p\" : Math.round(l.bitrate \/ 1000) + \"k\");\n        selQ.appendChild(o);\n      });\n      selQ.hidden = false;\n    }\n\n    function start() {\n      teardown();\n      if (destroyed) return;\n      setOverlay(\"Cargando transmisi\u00f3n\u2026\", { loading: true });\n\n      var native = video.canPlayType(\"application\/vnd.apple.mpegurl\");\n\n      loadHls().then(function (Hls) {\n        if (destroyed) return;\n        if (Hls && Hls.isSupported()) {\n          hls = new Hls({\n            lowLatencyMode: true,\n            enableWorker: true,\n            backBufferLength: 30,\n            maxBufferLength: 20,\n            maxMaxBufferLength: 40,\n            liveSyncDurationCount: 3,\n            manifestLoadingMaxRetry: 4,\n            levelLoadingMaxRetry: 4,\n            fragLoadingMaxRetry: 6\n          });\n          hls.loadSource(src);\n          hls.attachMedia(video);\n          hls.on(Hls.Events.MANIFEST_PARSED, function () {\n            retries = 0; fillQualities(); hideOverlay();\n            if (autoplay) tryPlay(); else setOverlay(\"Listo\", { button: \"\u25b6 Reproducir\" });\n          });\n          hls.on(Hls.Events.LEVEL_SWITCHED, function () {\n            if (selQ.value === \"-1\" && hls) {\n              var l = hls.levels[hls.currentLevel];\n              selQ.options[0].textContent = \"Auto\" + (l && l.height ? \" (\" + l.height + \"p)\" : \"\");\n            }\n          });\n          hls.on(Hls.Events.ERROR, function (evt, data) {\n            if (!data.fatal) return;\n            switch (data.type) {\n              case Hls.ErrorTypes.NETWORK_ERROR:\n                if (data.details === Hls.ErrorDetails.MANIFEST_LOAD_ERROR ||\n                    data.details === Hls.ErrorDetails.MANIFEST_LOAD_TIMEOUT) {\n                  scheduleRetry(\"No se pudo conectar con el servidor.\");\n                } else { try { hls.startLoad(); } catch (e) { scheduleRetry(\"Error de red.\"); } }\n                break;\n              case Hls.ErrorTypes.MEDIA_ERROR:\n                try { hls.recoverMediaError(); } catch (e) { scheduleRetry(\"Error de v\u00eddeo.\"); }\n                break;\n              default:\n                scheduleRetry(\"La transmisi\u00f3n no est\u00e1 disponible.\");\n            }\n          });\n        } else if (native) {\n          nativePlay();\n        } else {\n          setOverlay(\"Tu navegador no soporta streaming HLS.\");\n        }\n      }).catch(function () {\n        if (native) nativePlay();\n        else showError(\"No se pudo cargar el reproductor.\");\n      });\n    }\n\n    function nativePlay() {\n      selQ.hidden = true;\n      video.src = src;\n      video.addEventListener(\"loadedmetadata\", function () {\n        retries = 0; hideOverlay(); if (autoplay) tryPlay();\n      }, { once: true });\n      video.addEventListener(\"error\", function () { scheduleRetry(\"Error en la transmisi\u00f3n.\"); }, { once: true });\n    }\n\n    function syncPlay() {\n      var paused = video.paused;\n      btnPlay.innerHTML = paused ? ICONS.play : ICONS.pause;\n      btnPlay.setAttribute(\"aria-label\", paused ? \"Reproducir\" : \"Pausar\");\n      stage.classList.toggle(\"is-paused\", paused);\n    }\n    function syncMute() {\n      var m = video.muted || video.volume === 0;\n      btnMute.innerHTML = m ? ICONS.mute : ICONS.vol;\n      btnMute.setAttribute(\"aria-label\", m ? \"Activar sonido\" : \"Silenciar\");\n      rngVol.value = m ? 0 : video.volume;\n    }\n    function syncLive() {\n      var behind = false;\n      try {\n        if (video.seekable.length) behind = (video.seekable.end(video.seekable.length - 1) - video.currentTime) > 10;\n      } catch (e) {}\n      btnLive.classList.toggle(\"is-behind\", behind);\n    }\n    function goLive() {\n      try {\n        if (hls && hls.liveSyncPosition != null) video.currentTime = hls.liveSyncPosition;\n        else if (video.seekable.length) video.currentTime = video.seekable.end(video.seekable.length - 1) - 0.5;\n      } catch (e) {}\n      video.play();\n    }\n\n    video.muted = startMuted;\n    video.volume = 1;\n    syncMute(); syncPlay();\n\n    btnPlay.addEventListener(\"click\", function () { video.paused ? video.play() : video.pause(); });\n    btnMute.addEventListener(\"click\", function () { video.muted = !video.muted; if (!video.muted && video.volume === 0) video.volume = 1; syncMute(); });\n    rngVol.addEventListener(\"input\", function () { video.volume = +rngVol.value; video.muted = +rngVol.value === 0; syncMute(); });\n    btnLive.addEventListener(\"click\", goLive);\n    selQ.addEventListener(\"change\", function () { if (hls) hls.currentLevel = parseInt(selQ.value, 10); });\n    btnFs.addEventListener(\"click\", function () {\n      if (document.fullscreenElement) document.exitFullscreen();\n      else if (stage.requestFullscreen) stage.requestFullscreen();\n      else if (video.webkitEnterFullscreen) video.webkitEnterFullscreen();\n    });\n    if (document.pictureInPictureEnabled) {\n      btnPip.hidden = false;\n      btnPip.addEventListener(\"click\", function () {\n        if (document.pictureInPictureElement) document.exitPictureInPicture();\n        else video.requestPictureInPicture().catch(function () {});\n      });\n    }\n    bigBtn.addEventListener(\"click\", function () {\n      if (bigBtn.textContent.indexOf(\"Reintentar\") > -1) { retries = 0; start(); }\n      else { hideOverlay(); video.play(); }\n    });\n    video.addEventListener(\"click\", function () { video.paused ? video.play() : video.pause(); });\n\n    video.addEventListener(\"play\", function () { syncPlay(); hideOverlay(); });\n    video.addEventListener(\"pause\", syncPlay);\n    video.addEventListener(\"volumechange\", syncMute);\n    video.addEventListener(\"waiting\", function () { setOverlay(\"Cargando\u2026\", { loading: true }); });\n    video.addEventListener(\"playing\", function () { retries = 0; hideOverlay(); });\n    video.addEventListener(\"timeupdate\", syncLive);\n\n    stage.tabIndex = 0;\n    stage.addEventListener(\"keydown\", function (e) {\n      var k = e.key.toLowerCase();\n      if (k === \" \" || k === \"k\") { e.preventDefault(); video.paused ? video.play() : video.pause(); }\n      else if (k === \"m\") { video.muted = !video.muted; syncMute(); }\n      else if (k === \"f\") { btnFs.click(); }\n      else if (k === \"l\") { goLive(); }\n      else if (k === \"arrowup\") { e.preventDefault(); video.volume = Math.min(1, video.volume + .1); }\n      else if (k === \"arrowdown\") { e.preventDefault(); video.volume = Math.max(0, video.volume - .1); }\n    });\n\n    document.addEventListener(\"visibilitychange\", function () {\n      if (document.hidden && hls) { try { hls.stopLoad(); } catch (e) {} }\n      else if (!document.hidden && hls) { try { hls.startLoad(); goLive(); } catch (e) {} }\n    });\n\n    window.addEventListener(\"pagehide\", function () { destroyed = true; teardown(); });\n\n    if (\"IntersectionObserver\" in window) {\n      var io = new IntersectionObserver(function (entries) {\n        if (entries[0].isIntersecting) { io.disconnect(); start(); }\n      }, { rootMargin: \"200px\" });\n      io.observe(root);\n    } else { start(); }\n  }\n\n  function init() {\n    document.querySelectorAll(\".wptv[data-src]\").forEach(function (el) {\n      if (el.dataset.wptvReady) return;\n      el.dataset.wptvReady = \"1\";\n      build(el);\n    });\n  }\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", init);\n  else init();\n})();\n<\/script>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.4\/css\/all.min.css\" rel=\"stylesheet\">\n\n<style>\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n\nbody {\n  font-family: Arial, sans-serif;\n  background: #111;\n  color: #fff;\n  padding: 20px;\n}\n\n.container {\n  max-width: 480px;\n  margin: auto;\n  background: #1f2937;\n  border-radius: 20px;\n  padding: 20px;\n}\n\n.radio-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-bottom: 20px;\n}\n\n.radio-header h3 {\n  color: #ec4899;\n}\n\n.live {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 0.85rem;\n  font-weight: bold;\n}\n\n.live-dot {\n  width: 12px;\n  height: 12px;\n  background: #22c55e;\n  border-radius: 50%;\n  box-shadow: 0 0 8px #22c55e;\n}\n\n.station-banner {\n  text-align: center;\n  margin-bottom: 20px;\n}\n\n.station-banner img {\n  width: 160px;\n  height: 160px;\n  border-radius: 20px;\n  object-fit: cover;\n}\n\n.station-info h2 {\n  margin-top: 10px;\n  font-size: 1.2rem;\n}\n\n.station-info p {\n  color: #9ca3af;\n  font-size: 0.9rem;\n}\n\n.controls {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 20px;\n  margin: 20px 0;\n}\n\n.btn {\n  width: 60px;\n  height: 60px;\n  border: none;\n  border-radius: 50%;\n  cursor: pointer;\n  background: #374151;\n  color: #fff;\n  font-size: 22px;\n  transition: transform 0.1s ease;\n}\n\n.btn:active {\n  transform: scale(0.95);\n}\n\n.btn.play {\n  background: #ec4899;\n  width: 75px;\n  height: 75px;\n}\n\n#btn-video {\n  width: 100%;\n  padding: 12px;\n  border: none;\n  border-radius: 12px;\n  background: #8b5cf6;\n  color: #fff;\n  cursor: pointer;\n  font-size: 16px;\n  font-weight: bold;\n}\n\n.playlist {\n  margin-top: 20px;\n}\n\n.station-list {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 10px;\n}\n\n.station-item {\n  background: #374151;\n  border-radius: 12px;\n  padding: 10px;\n  text-align: center;\n  cursor: pointer;\n  transition: background 0.2s;\n}\n\n.station-item.active {\n  background: #ec4899;\n}\n\n.station-item img {\n  width: 70px;\n  height: 70px;\n  object-fit: cover;\n  border-radius: 12px;\n  margin-bottom: 6px;\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.station-item strong {\n  display: block;\n  font-size: 0.85rem;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.station-item small {\n  color: #d1d5db;\n  font-size: 0.75rem;\n}\n\n\/* MODAL VIDEO *\/\n\n#modal-video {\n  display: none;\n  position: fixed;\n  inset: 0;\n  background: rgba(0,0,0,0.9);\n  justify-content: center;\n  align-items: center;\n  z-index: 9999;\n}\n\n#modal-video.show {\n  display: flex;\n}\n\n#modal-video-content {\n  width: 90%;\n  max-width: 900px;\n  aspect-ratio: 16\/9;\n  background: #000;\n  position: relative;\n  border-radius: 12px;\n  overflow: hidden;\n}\n\n#video-player {\n  width: 100%;\n  height: 100%;\n  object-fit: contain;\n}\n\n#cerrar-video {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 40px;\n  height: 40px;\n  border: none;\n  border-radius: 50%;\n  background: #ec4899;\n  color: #fff;\n  font-size: 22px;\n  cursor: pointer;\n  z-index: 10;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n<\/style>\n\n<div class=\"container\">\n\n  <header class=\"radio-header\">\n    <h3>Radio + TV Player<\/h3>\n\n    <div class=\"live\">\n      <div class=\"live-dot\"><\/div>\n      EN VIVO\n    <\/div>\n  <\/header>\n\n  <div class=\"station-banner\">\n    <img decoding=\"async\" id=\"station-logo\" src=\"\" alt=\"Station Logo\">\n    \n    <div class=\"station-info\">\n      <h2 id=\"station-name\"><\/h2>\n      <p id=\"station-freq\"><\/p>\n    <\/div>\n  <\/div>\n\n  <div class=\"controls\">\n    <button class=\"btn\" onclick=\"prevStation()\">\n      <i class=\"fas fa-backward\"><\/i>\n    <\/button>\n\n    <button class=\"btn play\" id=\"play-btn\">\n      <i id=\"play-icon\" class=\"fas fa-play\"><\/i>\n    <\/button>\n\n    <button class=\"btn\" onclick=\"nextStation()\">\n      <i class=\"fas fa-forward\"><\/i>\n    <\/button>\n  <\/div>\n\n  <button id=\"btn-video\">\n    \u25b6 VER CANAL TV\n  <\/button>\n\n  <div class=\"playlist\">\n    <div id=\"station-list\" class=\"station-list\"><\/div>\n  <\/div>\n\n<\/div>\n\n<audio id=\"audio\" playsinline=\"\"><\/audio>\n\n<!-- MODAL -->\n\n<div id=\"modal-video\">\n\n  <div id=\"modal-video-content\">\n\n    <button id=\"cerrar-video\">\u00d7<\/button>\n\n    <video id=\"video-player\" controls=\"\" playsinline=\"\"><\/video>\n\n  <\/div>\n\n<\/div>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/hls.js@latest\"><\/script>\n\n<script>\nconst stations = [\n  {\n    name:\"LA VOZ PERU\",\n    freq:\"retro TV\",\n    url:\"https:\/\/stream.zeno.fm\/jqmfghcszwlvv\",\n    logo:\"https:\/\/i.postimg.cc\/85z90095\/radio-la-voz-peru-la-firme.png\",\n    tv:\"https:\/\/lbgo.bozztv.com\/ssh101\/ssh101\/retrotvcr2025\/chunks.m3u8?lb_backend_hint=7\"\n  },\n  {\n    name:\"LATINA TELEVISION\",\n    freq:\"latina\",\n    url:\"https:\/\/stream-51.zeno.fm\/hpttv0nr4a0uv?zs=iiu2UdOAQ9GQ8K_EL19oQw\",\n    logo:\"https:\/\/i.postimg.cc\/jdF4ydzC\/rock-de-los-80.png\",\n    tv:\"https:\/\/jireh-9-hls-video-us-isp.dps.live\/hls-video\/567ffde3fa319fadf3419efda25619456231dfea\/latinanoticias\/latinanoticias.smil\/latinanoticias\/livestream2\/chunks.m3u8?dpssid=b211934004269fbb0f554e34&sid=ba5t1l1xb273784619569fbb0f65fe4c&ndvc=0\"\n  },\n  {\n    name:\"CUMBIAY RADIO\",\n    freq:\"TV AMAZONIA\",\n    url:\"https:\/\/stream.zeno.fm\/5g8ii1ncoiwuv\",\n    logo:\"https:\/\/i.postimg.cc\/BbD1rDhV\/CUMBIAY-RADIO.png\",\n    tv:\"https:\/\/servilive.com:3199\/live\/amazoniatvlive.m3u8\"\n  },\n  {\n    name:\"VOCES PERUANAS\",\n    freq:\"COSTUMBRES TV\",\n    url:\"https:\/\/stream.zeno.fm\/zhiunct47shtv\",\n    logo:\"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.png\",\n    tv:\"https:\/\/7.innovatestream.pe:19360\/cvntumbes\/cvntumbes.m3u8\"\n  },\n  {\n    name:\"voces peruanas\",\n    freq:\"cosmos tv\",\n    url:\"https:\/\/stream.zeno.fm\/zhiunct47shtv\",\n    logo:\"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.png\",\n    tv:\"https:\/\/canaletaplus.com:3922\/live\/cosmoslive.m3u8\"\n  },\n  {\n    name:\"poder wanca\",\n    freq:\"mega cine tv\",\n    url:\"https:\/\/stream.zeno.fm\/zhiunct47shtv\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/tpWX7UerL1cUIZuKxBgDD6bnNs3fEwcZ54gWg5s3N1U\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJREF3cTd2Z3dvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJREkxcDcwdmdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MTYyNzc5NzAwMA.webp\",\n    tv:\"https:\/\/cnn.hostlagarto.com\/megacinetv\/tracks-v1a1\/mono.m3u8\"\n  },\n  {\n    name:\"full chichas\",\n    freq:\"sumac tv\",\n    url:\"https:\/\/stream-157.zeno.fm\/zwytkt2pgf9uv?zt\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/9q-sbNX7cW4gl0VPhY42t0mclIv9dVUuMZoR-ZP6tY4\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1ExcUhsNGdvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRHduZDJwcGdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MDg1MjQ0MzAwMA.webp\",\n    tv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/makins\/chunks.m3u8\"\n  },\n  {\n    name:\"la RIBERE\u00d1A\",\n    freq:\"el mago TV\",\n    url:\"https:\/\/stream.zeno.fm\/jqmfghcszwlvv\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/jxRWn-NPwDCgA819A-_fn0TqTpGdl0n0334Reg-m2Mo\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRGctTG1mMndvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRGc6TGVDNXdvTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcxNzAxMzMwMTAwMA.webp\",\n    tv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/elmagotv2\/chunks.m3u8\"\n  },\n  {\n    name:\"radio yunguyo\",\n    freq:\"tv en linea cuzco\",\n    url:\"https:\/\/stream-167.zeno.fm\/671md145hwzuv?zt\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/1fnTieOpPoKHgwMLJgWZPfpmO8vwDlgrLG913WX9sbk\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1E4Tld1elFzTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1FtUFBCNlFnTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MTU0ODYyMjAwMA.webp\",\n    tv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/ucchullo\/chunks.m3u8\"\n  },\n  {\n    name:\"cuzco legal\",\n    freq:\"tv ayacucho\",\n    url:\"https:\/\/stream-158.zeno.fm\/ryrhxgus0wzuv?zt\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/fPzZN4zvNtw-ieMCQDUBjYTDiGuos0Ontr-qDteWBkU\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1FyTGo0cUFvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1F6UDdGeXdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY4NzI4ODk1OTAwMA.webp\",\n    tv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/canal33ayacucho\/chunks.m3u8\"\n  },\n  {\n    name:\"la sure\u00f1a\",\n    freq:\"pantalla clasica\",\n    url:\"https:\/\/stream-155.zeno.fm\/bg4qy23suxhvv?zt\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/wtweicIxQ4k8Mx0hBCFTsJgIUi2Z2NKidL1GH0ujjVc\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRElydl96elFrTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRElqdTd3N1FvTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyODk4OTAwODAwMA.webp\",\n    tv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/pantallaclasics\/chunks.m3u8\"\n  },\n  {\n    name:\"arequipa clasica\",\n    freq:\"tucuman\",\n    url:\"https:\/\/stream.zeno.fm\/h20h3vrrm2zuv?an-uid\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/T8-8PdELZAbYW5hkkqLPanpdl_Vs8hO8JSvA35W5MmY\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1E3czZ6LUFrTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1FtYno1c1FnTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyOTM3ODYzMzAwMA.webp\",\n    tv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/lavoztuc\/chunks.m3u8\"\n  },\n  {\n    name:\"onda azul\",\n    freq:\"may time pelis\",\n    url:\"https:\/\/stream-162.zeno.fm\/eqotxvldgmpvv?zt\",\n    logo:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/fSgf1EHjyP9Bp1CI2e8XrDhIyEA_4FRXei0iaWVC-gE\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvZDc0YmQ3ZGQtMWZkNi00OTA3LWJhZTUtNTk1NjRiNGVjMTI4L2ltYWdlLz91PTE2ODg2NjAyMTkwMDA.webp\",\n    tv:\"https:\/\/appletree-mytimespain-rakuten.amagi.tv\/360p\/index.m3u8\"\n  },\n  {\n    name:\"radio total\",\n    freq:\"ciudad magica\",\n    url:\"https:\/\/stream.zeno.fm\/buubpev72b9vv\",\n    logo:\"https:\/\/i.postimg.cc\/vZT7HPZJ\/RADIO-TOTAL500-X-500.png\",\n    tv:\"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/verycoolfgr\/playlist.m3u8\"\n  },\n  {\n    name:\"cumbiay\",\n    freq:\"vision hd multimedia\",\n    url:\"https:\/\/stream.zeno.fm\/5g8ii1ncoiwuv\",\n    logo:\"https:\/\/i.postimg.cc\/BbD1rDhV\/CUMBIAY-RADIO.png\",\n    tv:\"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/visionhdrd\/playlist.m3u8\"\n  },\n  {\n    name:\"siscoveri\",\n    freq:\"pachamama\",\n    url:\"https:\/\/stream-164.zeno.fm\/7heuhyl3swvvv?zt\",\n    logo:\"https:\/\/images.zeno.fm\/cq4x0x1UzbtlFYimKk37EGO-xdyoEXwSPu1blCA9a_Q\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvOTc2MzUyMmEtOGVhYi00M2YyLTg1ZTItYTgyZDZhYmUxZTdjL2ltYWdlLz91PTE2OTMwMTI1MTUwMDA.webp\",\n    tv:\"https:\/\/183.bozztv.com\/ssh101\/ssh101\/jnetv\/chunks.m3u8\"\n  }\n];\n\nlet currentStation = 0;\nlet isPlaying = false;\nlet hls = null;\n\nconst audio = document.getElementById(\"audio\");\nconst stationName = document.getElementById(\"station-name\");\nconst stationFreq = document.getElementById(\"station-freq\");\nconst stationLogo = document.getElementById(\"station-logo\");\nconst stationList = document.getElementById(\"station-list\");\nconst btnVideo = document.getElementById(\"btn-video\");\nconst modalVideo = document.getElementById(\"modal-video\");\nconst cerrarVideo = document.getElementById(\"cerrar-video\");\nconst video = document.getElementById(\"video-player\");\nconst playIcon = document.getElementById(\"play-icon\");\n\nfunction loadStation(index) {\n  currentStation = index;\n  const station = stations[index];\n\n  stationName.textContent = station.name;\n  stationFreq.textContent = station.freq;\n  stationLogo.src = station.logo;\n\n  audio.src = station.url;\n  btnVideo.dataset.video = station.tv;\n\n  if (isPlaying) {\n    audio.play().catch(e => console.log(\"Autoplay bloqueado:\", e));\n  }\n\n  highlightStation();\n}\n\nfunction highlightStation() {\n  [...stationList.children].forEach((el, i) => {\n    el.classList.toggle(\"active\", i === currentStation);\n  });\n}\n\nfunction playPause() {\n  if (!isPlaying) {\n    audio.play().then(() => {\n      playIcon.className = \"fas fa-pause\";\n      isPlaying = true;\n    }).catch(e => {\n      console.log(\"Error al reproducir audio:\", e);\n    });\n  } else {\n    audio.pause();\n    playIcon.className = \"fas fa-play\";\n    isPlaying = false;\n  }\n}\n\nfunction nextStation() {\n  currentStation = (currentStation + 1) % stations.length;\n  loadStation(currentStation);\n}\n\nfunction prevStation() {\n  currentStation = (currentStation - 1 + stations.length) % stations.length;\n  loadStation(currentStation);\n}\n\ndocument.getElementById(\"play-btn\").addEventListener(\"click\", playPause);\n\n\/\/ Renderizar lista de emisoras\nstations.forEach((station, i) => {\n  const div = document.createElement(\"div\");\n  div.className = \"station-item\";\n  div.innerHTML = `\n    <img decoding=\"async\" src=\"${station.logo}\" alt=\"${station.name}\">\n    <strong>${station.name}<\/strong>\n    <small>${station.freq}<\/small>\n  `;\n  div.onclick = () => loadStation(i);\n  stationList.appendChild(div);\n});\n\nloadStation(0);\n\naudio.addEventListener(\"error\", () => {\n  console.log(\"Radio no disponible en este momento\");\n});\n\n\/* REPRODUCTOR DE VIDEO TV *\/\n\nbtnVideo.addEventListener(\"click\", () => {\n  const url = btnVideo.dataset.video;\n\n  \/\/ Pausar audio si la radio estaba sonando\n  if (isPlaying) {\n    playPause();\n  }\n\n  modalVideo.classList.add(\"show\");\n\n  if (Hls.isSupported()) {\n    if (hls) {\n      hls.destroy();\n    }\n    hls = new Hls({ lowLatencyMode: true });\n    hls.loadSource(url);\n    hls.attachMedia(video);\n    hls.on(Hls.Events.MANIFEST_PARSED, function () {\n      video.play().catch(e => console.log(\"Video Play Error:\", e));\n    });\n  } else if (video.canPlayType('application\/vnd.apple.mpegurl')) {\n    \/\/ Compatibilidad Nativa para iOS \/ Safari\n    video.src = url;\n    video.play().catch(e => console.log(\"Video Play Error iOS:\", e));\n  }\n});\n\nfunction closeVideo() {\n  modalVideo.classList.remove(\"show\");\n\n  video.pause();\n  video.removeAttribute('src'); \n  video.load();\n\n  if (hls) {\n    hls.destroy();\n    hls = null;\n  }\n}\n\ncerrarVideo.addEventListener(\"click\", closeVideo);\n\nmodalVideo.addEventListener(\"click\", (e) => {\n  if (e.target === modalVideo) {\n    closeVideo();\n  }\n});\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Radio + TV Player EN VIVO \u25b6 VER CANAL TV \u00d7<\/p>\n","protected":false},"author":1,"featured_media":1152,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","has-post-thumbnail","hentry"],"magazineBlocksPostFeaturedMedia":{"thumbnail":"https:\/\/googlecumbia.metricavisual.com\/wp-content\/uploads\/2026\/06\/cine-familia-150x150.png","medium":"https:\/\/googlecumbia.metricavisual.com\/wp-content\/uploads\/2026\/06\/cine-familia-300x164.png","medium_large":"https:\/\/googlecumbia.metricavisual.com\/wp-content\/uploads\/2026\/06\/cine-familia-768x419.png","large":"https:\/\/googlecumbia.metricavisual.com\/wp-content\/uploads\/2026\/06\/cine-familia-1024x559.png","1536x1536":"https:\/\/googlecumbia.metricavisual.com\/wp-content\/uploads\/2026\/06\/cine-familia.png","2048x2048":"https:\/\/googlecumbia.metricavisual.com\/wp-content\/uploads\/2026\/06\/cine-familia.png"},"magazineBlocksPostAuthor":{"name":"Rabi","avatar":"https:\/\/secure.gravatar.com\/avatar\/f801d06501b4b5f3b6f1dd296f2be2e92a3c3f2195efe2eba5a72ee5bdd2e8be?s=96&d=mm&r=g"},"magazineBlocksPostCommentsNumber":"0","magazineBlocksPostExcerpt":"Radio + TV Player EN VIVO \u25b6 VER CANAL TV \u00d7","magazineBlocksPostCategories":[],"magazineBlocksPostViewCount":0,"magazineBlocksPostReadTime":1,"_links":{"self":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2"}],"version-history":[{"count":34,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":36528,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/36528"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/media\/1152"}],"wp:attachment":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}