{"id":1,"date":"2026-05-05T13:33:47","date_gmt":"2026-05-05T13:33:47","guid":{"rendered":"https:\/\/googlecumbia.metricavisual.com\/?p=1"},"modified":"2026-06-21T01:41:09","modified_gmt":"2026-06-21T01:41:09","slug":"radios-peru","status":"publish","type":"post","link":"https:\/\/googlecumbia.metricavisual.com\/?p=1","title":{"rendered":"radios peru"},"content":{"rendered":"\n<style>\n.radio-title {\n    margin: 20px 0;\n    font-size: 22px;\n    text-align: center;\n}\n\n.radio-grid-container {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    gap: 15px;\n    padding: 20px;\n}\n\n.radio-player-card {\n    width: 180px;\n    background: #111827;\n    border-radius: 16px;\n    padding: 14px;\n    box-shadow: 0 0 15px rgba(255, 0, 0, 0.35);\n    transition: 0.3s;\n    text-align: center;\n}\n\n.radio-player-card:hover {\n    transform: scale(1.05);\n}\n\n.radio-player-card.playing {\n    box-shadow: 0 0 25px rgba(34, 197, 94, 0.8);\n}\n\n.radio-player-card img {\n    width: 100%;\n    height: 150px;\n    object-fit: cover;\n    border-radius: 12px;\n}\n\n.btn-radio {\n    width: 100%;\n    margin-top: 10px;\n    padding: 10px;\n    border: none;\n    border-radius: 10px;\n    background: #dc2626;\n    color: #fff;\n    font-size: 15px;\n    cursor: pointer;\n    transition: background 0.2s;\n}\n\n.radio-player-card.playing .btn-radio {\n    background: #16a34a;\n}\n\n.radio-status {\n    font-size: 13px;\n    margin-top: 6px;\n    opacity: 0.85;\n    color: #fff;\n}\n<\/style>\n\n<h1 class=\"radio-title\">\ud83c\udfa7 Radios en Vivo<\/h1>\n<div class=\"radio-grid-container\" id=\"radios-live-container\"><\/div>\n\n<script>\n(function() {\n    let currentAudio = null;\n    let currentCard = null;\n\n    const radios = [\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/fSgf1EHjyP9Bp1CI2e8XrDhIyEA_4FRXei0iaWVC-gE\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvZDc0YmQ3ZGQtMWZkNi00OTA3LWJhZTUtNTk1NjRiNGVjMTI4L2ltYWdlLz91PTE2ODg2NjAyMTkwMDA.webp\",stream:\"https:\/\/stream-162.zeno.fm\/eqotxvldgmpvv?zt\"},\n        {img:\"https:\/\/i.postimg.cc\/k4FgyZ4V\/cumbiay-peru.png\",stream:\"https:\/\/stream.zeno.fm\/5g8ii1ncoiwuv\"},\n        {img:\"https:\/\/i.postimg.cc\/90mFgpRL\/recuerdame-wey.png\",stream:\"https:\/\/stream.zeno.fm\/uhz3xzwswp8uv\"},\n        {img:\"https:\/\/i.postimg.cc\/TY1SwZtB\/LOGO-RADIO-LA-VOZ-PERU.png\",stream:\"https:\/\/stream.zeno.fm\/9lsy0almdvutv\"},\n        {img:\"https:\/\/i.postimg.cc\/K8gpN98Z\/la-voz-peru-logo-oficial.png\",stream:\"https:\/\/stream.zeno.fm\/zhiunct47shtv\"},\n        {img:\"https:\/\/images.zeno.fm\/vBTANpUh74OBxw6cTrjTgicp99TZTBqevMSoRaNV6xg\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zLzQ5MjZmY2QxLWRjMmMtNGRjNC05NzQ4LTMxNGQ3ZGVhZmE2OC9pbWFnZS8_dT0xNzM5MjMyNzkyMTAw.webp\",stream:\"https:\/\/stream.zeno.fm\/hq09bgaqogbuv\"},\n        {img:\"https:\/\/images.zeno.fm\/e6h_8m74-2qlZViw0Y39xxQtQC1GOLdf7f1dCzcrvNY\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zL2FneHpmbnBsYm04dGMzUmhkSE55TWdzU0NrRjFkR2hEYkdsbGJuUVlnSURRakpMX3hnb01DeElPVTNSaGRHbHZibEJ5YjJacGJHVVlnSURRako2Yzl3b01vZ0VFZW1WdWJ3L2ltYWdlLz91PTE3MzkyMzI4MzM0MDc.webp\",stream:\"https:\/\/stream.zeno.fm\/jqmfghcszwlvv\"},\n        {img:\"https:\/\/images.zeno.fm\/pMWaUkiF5e1v8drdcm-a8VFT9uaEA62FfklKhLVCJEM\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zLzkwNWYzOTVhLTNlMDYtNDM4Ni04YzIzLWYyZDdlZjhmMDE0Ny9pbWFnZS8_dT0xNzM5MjMyODcwMzc2.webp\",stream:\"https:\/\/stream.zeno.fm\/kdb0thbqzztuv\"},\n        {img:\"https:\/\/images.zeno.fm\/9h2aUW6xCgRI03hZx2VDUqnp225xqEmP13czQNlvzMg\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zLzIxYzRkODAzLTAzZWQtNDJmMy1iNjI3LTJiZGJhMzJlMTk2ZC9pbWFnZS8_dT0xNzM5MjMzMzM5Mzg3.webp\", stream:\"https:\/\/stream.zeno.fm\/pyro83b8mqtvv\"},\n        {img:\"https:\/\/images.zeno.fm\/XE7TSpbppXXOD-kXcbHVO_R9tIzVamXnJXRlTYuEWFM\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zLzVlNDE3YWVkLTAzNGItNDUzOS04MjBkLWUxMDRmMTI3NjhiNy9pbWFnZS8_dT0xNzM5MjMyOTEwMjQw.webp\",stream:\"https:\/\/stream.zeno.fm\/4pm78fl3guatv\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/cq4x0x1UzbtlFYimKk37EGO-xdyoEXwSPu1blCA9a_Q\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvOTc2MzUyMmEtOGVhYi00M2YyLTg1ZTItYTgyZDZhYmUxZTdjL2ltYWdlLz91PTE2OTMwMTI1MTUwMDA.webp\",stream:\"https:\/\/stream-164.zeno.fm\/7heuhyl3swvvv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/lXvyVxG6DzkHSzFbIbJOusv6EpSEsAcQN92WssGg1Z4\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRGd0cmJhOVFnTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRGc0YVRTZ2dzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyOTkwNjEwMzAwMA.webp\",stream:\"https:\/\/stream-166.zeno.fm\/evzfwmqnnnruv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/tpWX7UerL1cUIZuKxBgDD6bnNs3fEwcZ54gWg5s3N1U\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJREF3cTd2Z3dvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJREkxcDcwdmdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MTYyNzc5NzAwMA.webp\",stream:\"https:\/\/stream-153.zeno.fm\/0teuwrmgnxhvv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/hubi9PJxUpP6eySuYjPpZ3q0ABFWhLSOsFQhDuVK1yU\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvZTRmYjhjZWItZTYyMC00YzI4LWJhZGItNjdiYjEzMjM2YmRkL2ltYWdlLz91PTE3MzA1MDUyMTkwMDA.webp\",stream:\"https:\/\/stream-166.zeno.fm\/0uw5pb64tbutv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/9q-sbNX7cW4gl0VPhY42t0mclIv9dVUuMZoR-ZP6tY4\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1ExcUhsNGdvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRHduZDJwcGdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MDg1MjQ0MzAwMA.webp\",stream:\"https:\/\/stream-157.zeno.fm\/zwytkt2pgf9uv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/jxRWn-NPwDCgA819A-_fn0TqTpGdl0n0334Reg-m2Mo\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRGctTG1mMndvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRGc2TGVDNXdvTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcxNzAxMzMwMTAwMA.webp\",stream:\"https:\/\/stream-171.zeno.fm\/ms4f8zf8eeruv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/1fnTieOpPoKHgwMLJgWZPfpmO8vwDlgrLG913WX9sbk\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1E4Tld1elFzTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1FtUFBCNlFnTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2MTU0ODYyMjAwMA.webp\",stream:\"https:\/\/stream-167.zeno.fm\/671md145hwzuv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/jAE4lkVFm93X78bSTmu9qm7PtOD4sDDp1B5SJPtZQ2c\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvNDE2MGVkYjgtMWZhMy00ZDRkLThlZGUtN2YwOGVmMGMzMTBjL2ltYWdlLz91PTE2NjYzODkxNTcwMDA.webp\",stream:\"https:\/\/stream-167.zeno.fm\/e9ejgkbghpyuv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/S_rQc0WpVgt8txS-dHf0z9XHy1XPF_F0g-hMKMD580A\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvNGZmNGUxYmUtMjllYS00YTI5LTk4YTItYTZjOGE1ZDE3ZjcyL2ltYWdlLz91PTE2MTExMDM1ODIwMDA.webp\",stream:\"https:\/\/stream-172.zeno.fm\/hiiil0pwrw8tv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/AP3BQwpe12IK4kjp14QbA3Ots9C5Ud4b5YFzToDUpro\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvMmNhYjQxMDAtOWQ2Yy00M2Q4LWE5N2EtYjEyN2NjM2U1NjgyL2ltYWdlLz91PTE3MDE2MTAwMDUwMDA.webp\",stream:\"https:\/\/stream-172.zeno.fm\/ntg1xhl2j8hvv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/fPzZN4zvNtw-ieMCQDUBjYTDiGuos0Ontr-qDteWBkU\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1FyTGo0cUFvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1F6UDdGeXdzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY4NzI4ODk1OTAwMA.webp\",stream:\"https:\/\/stream-158.zeno.fm\/ryrhxgus0wzuv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/2kxy6HYdCsirUiEexhf0nnwUGKjRAmhboIzU03GbG-k\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRGg4NGVSdmdvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRGc0YVRTZ2dzTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTY2NzY3MTE1ODAwMA.webp\",stream:\"https:\/\/stream-160.zeno.fm\/w1r13grcvqzuv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/wtweicIxQ4k8Mx0hBCFTsJgIUi2Z2NKidL1GH0ujjVc\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRElyvl96elFrTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRElqdTd3N1FvTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyODk4OTAwODAwMA.webp\",stream:\"https:\/\/stream-155.zeno.fm\/bg4qy23suxhvv?zt\"},\n        {img:\"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/T8-8PdELZAbYW5hkkqLPanpdl_Vs8hO8JSvA35W5MmY\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1FuczZ6LUFrTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1FtYno1c1FnTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyOTM3ODYzMzAwMA.webp\",stream:\"https:\/\/stream.zeno.fm\/h20h3vrrm2zuv?an-uid\"},\n        {img:\"https:\/\/images.zeno.fm\/ejCU3D1tStZNXvBrotBY1D8zHxlNJb0X0s17ZAcGrQE\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zL2M3MjE2ZmI5LWY1NDMtNGI5Zi1hMjg4LWNmYzE2MWY1YjZhZC9pbWFnZS8_dT0xNzM5MjMyOTU0MDE2.webp\",stream:\"https:\/\/stream.zeno.fm\/d0n1rlp22gbtv\"},\n        {img:\"https:\/\/images.zeno.fm\/26EIb48sBYqOpnQ6fhrT3DWk5mVgS83AUsJnKevVUHg\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zLzkxYzQ4ODY1LTU5NzktNDU5OS04NzYwLTM3MzdjM2EyY2ZkOC9pbWFnZS8_dT0xNzM5MjMzMTk2NjE0.webp\",stream:\"https:\/\/stream.zeno.fm\/ljlrehvfkdotv\"},\n        {img:\"https:\/\/images.zeno.fm\/DYX9QYiHvdVCmRz-h69d7W_r51WDR55rItRdXIc_Its\/rs:fit:170:170\/g:ce:0:0\/aHR0cHM6Ly9zdHJlYW0tdG9vbHMuemVub21lZGlhLmNvbS9jb250ZW50L3N0YXRpb25zL2NiZDg0ZWVjLWJmNzgtNDJkNS04ZDYzLWE0ZmFiY2MyMDMxNS9pbWFnZS8_dT0xNzM5MjMzMjkxNDA5.webp\",stream:\"https:\/\/stream.zeno.fm\/op66pagm7tltv\"}\n    ];\n\n    const cont = document.getElementById(\"radios-live-container\");\n\n    \/\/ 1. Renderizar todas las tarjetas de radio de manera inmediata\n    radios.forEach((r, index) => {\n        const c = document.createElement(\"div\");\n        c.className = \"radio-player-card\";\n        \/\/ Asignamos un ID \u00fanico interno a cada tarjeta para identificar la primera f\u00e1cilmente\n        if(index === 0) c.id = \"first-radio-card\"; \n        \n        c.innerHTML = `\n            <img decoding=\"async\" src=\"${r.img}\" loading=\"lazy\" alt=\"Radio Logo\">\n            <button class=\"btn-radio\">\u25b6 Reproducir<\/button>\n            <div class=\"radio-status\">Estado: Pausado<\/div>\n            <audio preload=\"none\" playsinline src=\"${r.stream}\"><\/audio>\n        `;\n        \n        const a = c.querySelector(\"audio\");\n        const b = c.querySelector(\".btn-radio\");\n        const s = c.querySelector(\".radio-status\");\n\n        b.addEventListener(\"click\", () => {\n            if (currentAudio && currentAudio !== a) {\n                currentAudio.pause();\n                currentCard.classList.remove(\"playing\");\n                currentCard.querySelector(\".btn-radio\").textContent = \"\u25b6 Reproducir\";\n                currentCard.querySelector(\".radio-status\").textContent = \"Estado: Pausado\";\n            }\n            if (a.paused) {\n                a.play().catch(() => {});\n                b.textContent = \"\u23f8 Pausar\";\n                s.textContent = \"Estado: Reproduciendo\";\n                c.classList.add(\"playing\");\n                currentAudio = a;\n                currentCard = c;\n            } else {\n                a.pause();\n                b.textContent = \"\u25b6 Reproducir\";\n                s.textContent = \"Estado: Pausado\";\n                c.classList.remove(\"playing\");\n                currentAudio = null;\n                currentCard = null;\n            }\n        });\n        cont.appendChild(c);\n    });\n\n    \/\/ 2. Funci\u00f3n dedicada para arrancar la primera radio (Autoplay) de forma segura\n    function initAutoplay() {\n        const firstPlayer = document.getElementById(\"first-radio-card\");\n        if (!firstPlayer) return;\n        \n        const audio = firstPlayer.querySelector(\"audio\");\n        const button = firstPlayer.querySelector(\".btn-radio\");\n        const status = firstPlayer.querySelector(\".radio-status\");\n\n        \/\/ Intentamos reproducir de inmediato\n        audio.play().then(() => {\n            button.textContent = \"\u23f8 Pausar\";\n            status.textContent = \"Estado: Reproduciendo\";\n            firstPlayer.classList.add(\"playing\");\n            currentAudio = audio;\n            currentCard = firstPlayer;\n        }).catch(() => {\n            \/\/ Si el navegador bloque\u00f3 el autoplay directo, se reproducir\u00e1 autom\u00e1ticamente al primer clic del usuario en la web\n            const unlock = () => {\n                \/\/ Solo ejecutamos si el usuario no ha interactuado activamente con otra radio antes\n                if (!currentAudio) {\n                    audio.play().catch(() => {});\n                    button.textContent = \"\u23f8 Pausar\";\n                    status.textContent = \"Estado: Reproduciendo\";\n                    firstPlayer.classList.add(\"playing\");\n                    currentAudio = audio;\n                    currentCard = firstPlayer;\n                }\n                document.removeEventListener(\"click\", unlock);\n            };\n            document.addEventListener(\"click\", unlock, { once: true });\n        });\n    }\n\n    \/\/ Ejecuci\u00f3n segura: Si el DOM ya est\u00e1 listo, arranca; si no, espera al evento.\n    if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n        initAutoplay();\n    } else {\n        document.addEventListener(\"DOMContentLoaded\", initAutoplay);\n    }\n})();\n<\/script>\n\n\n\n<p class=\"wp-block-paragraph\">todas las radios<\/p>\n\n\n\n\u00ab`html\n<!-- =====================================================\n     RADIO + TV PLAYER COMPATIBLE CON WORDPRESS\n     Pegar completo en un bloque \"HTML personalizado\"\n===================================================== -->\n\n<link\n  href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.4\/css\/all.min.css\"\n  rel=\"stylesheet\"\n>\n\n<div id=\"rbtv-player-app\" class=\"rbtv-player-app\">\n\n  <style>\n    \/* ==================================================\n       CONTENEDOR AISLADO PARA WORDPRESS\n    ================================================== *\/\n\n    #rbtv-player-app {\n      --rbtv-primary: #ec4899;\n      --rbtv-secondary: #8b5cf6;\n      --rbtv-background: #111111;\n      --rbtv-container: #1f2937;\n      --rbtv-card: #374151;\n      --rbtv-white: #ffffff;\n      --rbtv-green: #22c55e;\n      --rbtv-error: #ef4444;\n\n      position: relative;\n      display: block;\n      width: 100%;\n      min-height: 100vh;\n      margin: 0;\n      padding: 20px;\n      overflow-x: hidden;\n      background: var(--rbtv-background);\n      color: var(--rbtv-white);\n      font-family: Arial, Helvetica, sans-serif;\n      font-size: 16px;\n      line-height: 1.5;\n    }\n\n    #rbtv-player-app *,\n    #rbtv-player-app *::before,\n    #rbtv-player-app *::after {\n      box-sizing: border-box;\n    }\n\n    #rbtv-player-app img {\n      display: block;\n      max-width: 100%;\n    }\n\n    #rbtv-player-app button {\n      font: inherit;\n    }\n\n    #rbtv-player-app button:focus-visible,\n    #rbtv-player-app [tabindex]:focus-visible {\n      outline: 3px solid rgba(236, 72, 153, 0.55);\n      outline-offset: 3px;\n    }\n\n    \/* ==================================================\n       CONTENEDOR PRINCIPAL\n    ================================================== *\/\n\n    #rbtv-player-app .rbtv-container {\n      width: 100%;\n      max-width: 480px;\n      margin: 0 auto;\n      padding: 20px;\n      overflow: hidden;\n      border-radius: 20px;\n      background: var(--rbtv-container);\n      box-shadow: 0 20px 45px rgba(0, 0, 0, 0.35);\n    }\n\n    \/* ==================================================\n       CABECERA\n    ================================================== *\/\n\n    #rbtv-player-app .rbtv-radio-header {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 15px;\n      margin-bottom: 20px;\n    }\n\n    #rbtv-player-app .rbtv-radio-header h1 {\n      margin: 0;\n      padding: 0;\n      color: var(--rbtv-primary);\n      font-family: Arial, Helvetica, sans-serif;\n      font-size: clamp(22px, 6vw, 30px);\n      font-weight: 700;\n      line-height: 1.2;\n    }\n\n    #rbtv-player-app .rbtv-live {\n      display: flex;\n      flex: 0 0 auto;\n      align-items: center;\n      gap: 8px;\n      color: var(--rbtv-white);\n      font-size: 12px;\n      font-weight: 700;\n      line-height: 1;\n      white-space: nowrap;\n    }\n\n    #rbtv-player-app .rbtv-live-dot {\n      width: 12px;\n      height: 12px;\n      border-radius: 50%;\n      background: var(--rbtv-green);\n      box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.16);\n      animation: rbtvPulse 1.5s infinite;\n    }\n\n    @keyframes rbtvPulse {\n      0%,\n      100% {\n        opacity: 1;\n        transform: scale(1);\n      }\n\n      50% {\n        opacity: 0.55;\n        transform: scale(0.8);\n      }\n    }\n\n    \/* ==================================================\n       INFORMACI\u00d3N DE LA EMISORA\n    ================================================== *\/\n\n    #rbtv-player-app .rbtv-station-banner {\n      margin-bottom: 20px;\n      text-align: center;\n    }\n\n    #rbtv-player-app .rbtv-logo-wrapper {\n      position: relative;\n      width: 160px;\n      height: 160px;\n      margin: 0 auto;\n      overflow: hidden;\n      border: 3px solid rgba(236, 72, 153, 0.35);\n      border-radius: 20px;\n      background: #111827;\n      box-shadow: 0 12px 30px rgba(0, 0, 0, 0.3);\n    }\n\n    #rbtv-player-app .rbtv-station-logo {\n      width: 100%;\n      height: 100%;\n      margin: 0;\n      border: 0;\n      border-radius: 0;\n      object-fit: cover;\n    }\n\n    #rbtv-player-app .rbtv-station-info h2 {\n      margin: 12px 0 4px;\n      padding: 0;\n      color: var(--rbtv-white);\n      font-family: Arial, Helvetica, sans-serif;\n      font-size: 23px;\n      font-weight: 700;\n      line-height: 1.25;\n      text-transform: none;\n    }\n\n    #rbtv-player-app .rbtv-station-info p {\n      margin: 0;\n      padding: 0;\n      color: #d1d5db;\n      font-size: 14px;\n      line-height: 1.4;\n    }\n\n    #rbtv-player-app .rbtv-status {\n      min-height: 20px;\n      margin: 8px 0 0;\n      color: #9ca3af;\n      font-size: 12px;\n      line-height: 1.4;\n    }\n\n    #rbtv-player-app .rbtv-status.rbtv-status-error {\n      color: #fca5a5;\n    }\n\n    #rbtv-player-app .rbtv-status.rbtv-status-playing {\n      color: #86efac;\n    }\n\n    \/* ==================================================\n       CONTROLES DE AUDIO\n    ================================================== *\/\n\n    #rbtv-player-app .rbtv-controls {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 20px;\n      margin: 20px 0;\n    }\n\n    #rbtv-player-app .rbtv-btn {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      width: 60px;\n      height: 60px;\n      padding: 0;\n      border: 0;\n      border-radius: 50%;\n      background: var(--rbtv-card);\n      color: var(--rbtv-white);\n      font-size: 22px;\n      line-height: 1;\n      cursor: pointer;\n      box-shadow: none;\n      transition:\n        background-color 0.2s ease,\n        transform 0.2s ease,\n        box-shadow 0.2s ease;\n    }\n\n    #rbtv-player-app .rbtv-btn:hover {\n      background: #4b5563;\n      color: var(--rbtv-white);\n      transform: scale(1.06);\n    }\n\n    #rbtv-player-app .rbtv-btn.rbtv-play {\n      width: 75px;\n      height: 75px;\n      background: var(--rbtv-primary);\n      font-size: 27px;\n      box-shadow: 0 10px 25px rgba(236, 72, 153, 0.35);\n    }\n\n    #rbtv-player-app .rbtv-btn.rbtv-play:hover {\n      background: #db2777;\n      transform: scale(1.07);\n    }\n\n    #rbtv-player-app .rbtv-btn:disabled {\n      cursor: not-allowed;\n      opacity: 0.55;\n      transform: none;\n    }\n\n    \/* ==================================================\n       BOT\u00d3N DE TELEVISI\u00d3N\n    ================================================== *\/\n\n    #rbtv-player-app .rbtv-video-btn {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      width: 100%;\n      min-height: 48px;\n      margin: 0;\n      padding: 12px 18px;\n      border: 0;\n      border-radius: 12px;\n      background: var(--rbtv-secondary);\n      color: var(--rbtv-white);\n      font-size: 16px;\n      font-weight: 700;\n      line-height: 1.2;\n      cursor: pointer;\n      box-shadow: 0 9px 24px rgba(139, 92, 246, 0.25);\n      transition:\n        background-color 0.2s ease,\n        transform 0.2s ease;\n    }\n\n    #rbtv-player-app .rbtv-video-btn:hover {\n      background: #7c3aed;\n      color: var(--rbtv-white);\n      transform: translateY(-2px);\n    }\n\n    #rbtv-player-app .rbtv-video-btn:disabled {\n      cursor: not-allowed;\n      opacity: 0.6;\n      transform: none;\n    }\n\n    \/* ==================================================\n       LISTA DE EMISORAS\n    ================================================== *\/\n\n    #rbtv-player-app .rbtv-playlist {\n      margin-top: 20px;\n    }\n\n    #rbtv-player-app .rbtv-station-list {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 10px;\n      width: 100%;\n    }\n\n    #rbtv-player-app .rbtv-station-item {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      min-width: 0;\n      padding: 10px;\n      border: 1px solid transparent;\n      border-radius: 12px;\n      background: var(--rbtv-card);\n      color: var(--rbtv-white);\n      text-align: center;\n      cursor: pointer;\n      transition:\n        background-color 0.2s ease,\n        border-color 0.2s ease,\n        transform 0.2s ease;\n    }\n\n    #rbtv-player-app .rbtv-station-item:hover {\n      border-color: rgba(236, 72, 153, 0.5);\n      background: #4b5563;\n      transform: translateY(-2px);\n    }\n\n    #rbtv-player-app .rbtv-station-item.rbtv-active {\n      border-color: var(--rbtv-primary);\n      background: var(--rbtv-primary);\n      box-shadow: 0 8px 20px rgba(236, 72, 153, 0.25);\n    }\n\n    #rbtv-player-app .rbtv-station-item img {\n      width: 70px;\n      height: 70px;\n      margin: 0 0 10px;\n      border: 0;\n      border-radius: 12px;\n      background: #111827;\n      object-fit: cover;\n    }\n\n    #rbtv-player-app .rbtv-station-item strong {\n      display: block;\n      width: 100%;\n      overflow: hidden;\n      color: inherit;\n      font-size: 14px;\n      line-height: 1.3;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n\n    #rbtv-player-app .rbtv-station-item small {\n      display: block;\n      width: 100%;\n      overflow: hidden;\n      margin-top: 4px;\n      color: #d1d5db;\n      font-size: 11px;\n      line-height: 1.3;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n\n    #rbtv-player-app .rbtv-station-item.rbtv-active small {\n      color: #ffffff;\n    }\n\n    \/* ==================================================\n       MODAL DE VIDEO\n    ================================================== *\/\n\n    #rbtv-player-app .rbtv-modal-video {\n      position: fixed;\n      z-index: 2147483000;\n      inset: 0;\n      display: none;\n      align-items: center;\n      justify-content: center;\n      padding: 20px;\n      background: rgba(0, 0, 0, 0.94);\n      backdrop-filter: blur(5px);\n    }\n\n    #rbtv-player-app .rbtv-modal-video.rbtv-show {\n      display: flex;\n    }\n\n    #rbtv-player-app .rbtv-modal-video-content {\n      position: relative;\n      width: 100%;\n      max-width: 900px;\n      overflow: hidden;\n      aspect-ratio: 16 \/ 9;\n      border-radius: 12px;\n      background: #000000;\n      box-shadow: 0 25px 70px rgba(0, 0, 0, 0.65);\n    }\n\n    #rbtv-player-app .rbtv-video-player {\n      display: block;\n      width: 100%;\n      height: 100%;\n      margin: 0;\n      border: 0;\n      background: #000000;\n      object-fit: contain;\n    }\n\n    #rbtv-player-app .rbtv-close-video {\n      position: absolute;\n      z-index: 20;\n      top: 10px;\n      right: 10px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      width: 42px;\n      height: 42px;\n      padding: 0;\n      border: 0;\n      border-radius: 50%;\n      background: var(--rbtv-primary);\n      color: var(--rbtv-white);\n      font-size: 28px;\n      font-weight: 400;\n      line-height: 1;\n      cursor: pointer;\n      box-shadow: 0 7px 20px rgba(0, 0, 0, 0.4);\n      transition:\n        background-color 0.2s ease,\n        transform 0.2s ease;\n    }\n\n    #rbtv-player-app .rbtv-close-video:hover {\n      background: #db2777;\n      color: var(--rbtv-white);\n      transform: scale(1.08);\n    }\n\n    #rbtv-player-app .rbtv-video-message {\n      position: absolute;\n      z-index: 8;\n      top: 50%;\n      left: 50%;\n      width: calc(100% - 100px);\n      margin: 0;\n      color: #ffffff;\n      font-size: 14px;\n      line-height: 1.5;\n      text-align: center;\n      transform: translate(-50%, -50%);\n      pointer-events: none;\n    }\n\n    #rbtv-player-app .rbtv-video-message.rbtv-hidden {\n      display: none;\n    }\n\n    \/* ==================================================\n       RESPONSIVE\n    ================================================== *\/\n\n    @media (max-width: 520px) {\n      #rbtv-player-app {\n        min-height: auto;\n        padding: 10px;\n      }\n\n      #rbtv-player-app .rbtv-container {\n        padding: 16px;\n        border-radius: 16px;\n      }\n\n      #rbtv-player-app .rbtv-radio-header {\n        align-items: flex-start;\n      }\n\n      #rbtv-player-app .rbtv-radio-header h1 {\n        font-size: 22px;\n      }\n\n      #rbtv-player-app .rbtv-logo-wrapper {\n        width: 145px;\n        height: 145px;\n      }\n\n      #rbtv-player-app .rbtv-controls {\n        gap: 15px;\n      }\n\n      #rbtv-player-app .rbtv-btn {\n        width: 54px;\n        height: 54px;\n        font-size: 19px;\n      }\n\n      #rbtv-player-app .rbtv-btn.rbtv-play {\n        width: 68px;\n        height: 68px;\n      }\n\n      #rbtv-player-app .rbtv-modal-video {\n        padding: 10px;\n      }\n    }\n\n    @media (max-width: 350px) {\n      #rbtv-player-app .rbtv-station-list {\n        grid-template-columns: 1fr;\n      }\n    }\n  <\/style>\n\n  <div class=\"rbtv-container\">\n\n    <header class=\"rbtv-radio-header\">\n      <h1>Radio + TV Player<\/h1>\n\n      <div class=\"rbtv-live\" aria-label=\"Transmisi\u00f3n en vivo\">\n        <span class=\"rbtv-live-dot\" aria-hidden=\"true\"><\/span>\n        <span>EN VIVO<\/span>\n      <\/div>\n    <\/header>\n\n    <div class=\"rbtv-station-banner\">\n\n      <div class=\"rbtv-logo-wrapper\">\n        <img decoding=\"async\"\n          id=\"rbtv-station-logo\"\n          class=\"rbtv-station-logo\"\n          src=\"\"\n          alt=\"Logo de la emisora\"\n        >\n      <\/div>\n\n      <div class=\"rbtv-station-info\">\n        <h2 id=\"rbtv-station-name\"><\/h2>\n        <p id=\"rbtv-station-freq\"><\/p>\n\n        <div\n          id=\"rbtv-audio-status\"\n          class=\"rbtv-status\"\n          aria-live=\"polite\"\n        >\n          Selecciona una emisora y presiona reproducir\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <div\n      class=\"rbtv-controls\"\n      role=\"group\"\n      aria-label=\"Controles de emisora\"\n    >\n\n      <button\n        type=\"button\"\n        class=\"rbtv-btn\"\n        id=\"rbtv-prev-button\"\n        aria-label=\"Emisora anterior\"\n      >\n        <i class=\"fas fa-backward\" aria-hidden=\"true\"><\/i>\n      <\/button>\n\n      <button\n        type=\"button\"\n        class=\"rbtv-btn rbtv-play\"\n        id=\"rbtv-play-button\"\n        aria-label=\"Reproducir emisora\"\n      >\n        <i\n          id=\"rbtv-play-icon\"\n          class=\"fas fa-play\"\n          aria-hidden=\"true\"\n        ><\/i>\n      <\/button>\n\n      <button\n        type=\"button\"\n        class=\"rbtv-btn\"\n        id=\"rbtv-next-button\"\n        aria-label=\"Siguiente emisora\"\n      >\n        <i class=\"fas fa-forward\" aria-hidden=\"true\"><\/i>\n      <\/button>\n\n    <\/div>\n\n    <button\n      type=\"button\"\n      id=\"rbtv-video-button\"\n      class=\"rbtv-video-btn\"\n    >\n      \u25b6 VER CANAL TV\n    <\/button>\n\n    <div class=\"rbtv-playlist\">\n      <div\n        id=\"rbtv-station-list\"\n        class=\"rbtv-station-list\"\n        role=\"list\"\n        aria-label=\"Lista de emisoras\"\n      ><\/div>\n    <\/div>\n\n  <\/div>\n\n  <audio\n    id=\"rbtv-audio\"\n    preload=\"none\"\n    aria-label=\"Reproductor de radio\"\n  ><\/audio>\n\n  <!-- MODAL DE TELEVISI\u00d3N -->\n  <div\n    id=\"rbtv-modal-video\"\n    class=\"rbtv-modal-video\"\n    role=\"dialog\"\n    aria-modal=\"true\"\n    aria-label=\"Canal de televisi\u00f3n\"\n    aria-hidden=\"true\"\n  >\n\n    <div class=\"rbtv-modal-video-content\">\n\n      <button\n        type=\"button\"\n        id=\"rbtv-close-video\"\n        class=\"rbtv-close-video\"\n        aria-label=\"Cerrar canal de televisi\u00f3n\"\n      >\n        \u00d7\n      <\/button>\n\n      <p\n        id=\"rbtv-video-message\"\n        class=\"rbtv-video-message\"\n        aria-live=\"polite\"\n      >\n        Cargando se\u00f1al de televisi\u00f3n&#8230;\n      <\/p>\n\n      <video\n        id=\"rbtv-video-player\"\n        class=\"rbtv-video-player\"\n        controls\n        playsinline\n        preload=\"metadata\"\n      ><\/video>\n\n    <\/div>\n\n  <\/div>\n\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/hls.js@latest\"><\/script>\n\n  <script>\n    (function () {\n      \"use strict\";\n\n      function iniciarRadioTVPlayer() {\n        const app = document.getElementById(\"rbtv-player-app\");\n\n        if (!app || app.dataset.initialized === \"true\") {\n          return;\n        }\n\n        app.dataset.initialized = \"true\";\n\n        \/* ==================================================\n           CONTENIDO ORIGINAL DE LAS EMISORAS\n        ================================================== *\/\n\n        const stations = [\n          {\n            name: \"LA VOZ PERU\",\n            freq: \"TV EN LINEA\",\n            url: \"https:\/\/stream.zeno.fm\/jqmfghcszwlvv\",\n            logo: \"https:\/\/i.postimg.cc\/85z90095\/radio-la-voz-peru-la-firme.png\",\n            tv: \"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/ucchullo\/playlist.m3u8\"\n          },\n          {\n            name: \"latin\",\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: \"VISION HD\",\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: \"VOCES PERUANAS\",\n            freq: \"UVA TV\",\n            url: \"https:\/\/stream.zeno.fm\/zhiunct47shtv\",\n            logo: \"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.png\",\n            tv: \"https:\/\/live20.bozztv.com\/akamaissh101\/ssh101\/uvatvdh\/playlist.m3u8\"\n          },\n          {\n            name: \"voves peruanas\",\n            freq: \"latina\",\n            url: \"https:\/\/stream.zeno.fm\/zhiunct47shtv\",\n            logo: \"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.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: \"poder wanca\",\n            freq: \"latina\",\n            url: \"https:\/\/i.postimg.cc\/mr0cY4Gs\/VOCES-P-RUANAS.png\",\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:\/\/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: \"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:\/\/183.bozztv.com\/ssh101\/ssh101\/elmagotv2\/chunks.m3u8\",\n            logo: \"https:\/\/zeno.fm\/_ipx\/s_144x144\/https:\/\/images.zeno.fm\/jxRWn-NPwDCgA819A-_fn0TqTpGdl0n0334Reg-m2Mo\/rs:fill:288:288\/g:ce:0:0\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJRGctTG1mMndvTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJRGc2TGVDNXdvTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcxNzAxMzMwMTAwMA.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\/aHR0cHM6Ly9wcm94eS56ZW5vLmZtL2NvbnRlbnQvc3RhdGlvbnMvYWd4emZucGxibTh0YzNSaGRITnlNZ3NTQ2tGMWRHaERiR2xsYm5RWWdJQ1FuczZ6LUFrTUN4SU9VM1JoZEdsdmJsQnliMlpwYkdVWWdJQ1FtYno1c1FnTW9nRUVlbVZ1YncvaW1hZ2UvP3U9MTcyOTM3ODYzMzAwMA.webp\",\n            tv: \"https:\/\/183.bozztv.com\/ssh101\/ssh101\/lavoztuc\/chunks.m3u8\"\n          },\n          {\n            name: \"onda azul\",\n            freq: \"martin tv\",\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:\/\/183.bozztv.com\/ssh101\/ssh101\/lllmartinlll\/chunks.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\n        let currentStation = 0;\n        let hlsInstance = null;\n        let audioShouldContinue = false;\n\n        const elements = {\n          audio: app.querySelector(\"#rbtv-audio\"),\n          stationName: app.querySelector(\"#rbtv-station-name\"),\n          stationFreq: app.querySelector(\"#rbtv-station-freq\"),\n          stationLogo: app.querySelector(\"#rbtv-station-logo\"),\n          stationList: app.querySelector(\"#rbtv-station-list\"),\n          playButton: app.querySelector(\"#rbtv-play-button\"),\n          playIcon: app.querySelector(\"#rbtv-play-icon\"),\n          previousButton: app.querySelector(\"#rbtv-prev-button\"),\n          nextButton: app.querySelector(\"#rbtv-next-button\"),\n          videoButton: app.querySelector(\"#rbtv-video-button\"),\n          modalVideo: app.querySelector(\"#rbtv-modal-video\"),\n          closeVideo: app.querySelector(\"#rbtv-close-video\"),\n          video: app.querySelector(\"#rbtv-video-player\"),\n          videoMessage: app.querySelector(\"#rbtv-video-message\"),\n          audioStatus: app.querySelector(\"#rbtv-audio-status\")\n        };\n\n        function setAudioStatus(message, type) {\n          elements.audioStatus.textContent = message;\n\n          elements.audioStatus.classList.remove(\n            \"rbtv-status-error\",\n            \"rbtv-status-playing\"\n          );\n\n          if (type === \"error\") {\n            elements.audioStatus.classList.add(\"rbtv-status-error\");\n          }\n\n          if (type === \"playing\") {\n            elements.audioStatus.classList.add(\"rbtv-status-playing\");\n          }\n        }\n\n        function setVideoMessage(message, visible) {\n          elements.videoMessage.textContent = message;\n\n          elements.videoMessage.classList.toggle(\n            \"rbtv-hidden\",\n            !visible\n          );\n        }\n\n        function updatePlayInterface(playing) {\n          elements.playIcon.className = playing\n            ? \"fas fa-pause\"\n            : \"fas fa-play\";\n\n          elements.playButton.setAttribute(\n            \"aria-label\",\n            playing ? \"Pausar emisora\" : \"Reproducir emisora\"\n          );\n        }\n\n        function highlightStation() {\n          const stationItems =\n            elements.stationList.querySelectorAll(\n              \".rbtv-station-item\"\n            );\n\n          stationItems.forEach(function (item, index) {\n            const active = index === currentStation;\n\n            item.classList.toggle(\"rbtv-active\", active);\n            item.setAttribute(\n              \"aria-current\",\n              active ? \"true\" : \"false\"\n            );\n          });\n        }\n\n        function reproduceCurrentAudio() {\n          setAudioStatus(\"Conectando con la emisora...\");\n\n          elements.audio.play()\n            .then(function () {\n              audioShouldContinue = true;\n            })\n            .catch(function (error) {\n              audioShouldContinue = false;\n              updatePlayInterface(false);\n\n              setAudioStatus(\n                \"No se pudo reproducir esta emisora. Verifica su enlace.\",\n                \"error\"\n              );\n\n              console.warn(\n                \"No se pudo reproducir la emisora:\",\n                error\n              );\n            });\n        }\n\n        function loadStation(index, maintainPlayback) {\n          if (\n            !Number.isInteger(index) ||\n            index < 0 ||\n            index >= stations.length\n          ) {\n            return;\n          }\n\n          currentStation = index;\n\n          const station = stations[currentStation];\n          const wasPlaying =\n            typeof maintainPlayback === \"boolean\"\n              ? maintainPlayback\n              : !elements.audio.paused;\n\n          elements.stationName.textContent = station.name;\n          elements.stationFreq.textContent = station.freq;\n          elements.stationLogo.src = station.logo;\n          elements.stationLogo.alt = \"Logo de \" + station.name;\n\n          elements.videoButton.dataset.video = station.tv || \"\";\n          elements.videoButton.disabled = !station.tv;\n\n          elements.audio.pause();\n          elements.audio.removeAttribute(\"src\");\n          elements.audio.load();\n\n          elements.audio.src = station.url;\n          elements.audio.load();\n\n          updatePlayInterface(false);\n          setAudioStatus(\"Presiona reproducir para escuchar\");\n\n          highlightStation();\n\n          if (wasPlaying || audioShouldContinue) {\n            reproduceCurrentAudio();\n          }\n        }\n\n        function playPause() {\n          if (!elements.audio.getAttribute(\"src\")) {\n            loadStation(currentStation, false);\n          }\n\n          if (elements.audio.paused) {\n            reproduceCurrentAudio();\n          } else {\n            audioShouldContinue = false;\n            elements.audio.pause();\n          }\n        }\n\n        function nextStation() {\n          const nextIndex =\n            (currentStation + 1) % stations.length;\n\n          loadStation(nextIndex, audioShouldContinue);\n        }\n\n        function previousStation() {\n          const previousIndex =\n            currentStation === 0\n              ? stations.length - 1\n              : currentStation - 1;\n\n          loadStation(previousIndex, audioShouldContinue);\n        }\n\n        function createStationList() {\n          const fragment = document.createDocumentFragment();\n\n          stations.forEach(function (station, index) {\n            const item = document.createElement(\"div\");\n            const image = document.createElement(\"img\");\n            const title = document.createElement(\"strong\");\n            const frequency = document.createElement(\"small\");\n\n            item.className = \"rbtv-station-item\";\n            item.setAttribute(\"role\", \"listitem\");\n            item.setAttribute(\"tabindex\", \"0\");\n            item.setAttribute(\n              \"aria-label\",\n              \"Seleccionar \" + station.name\n            );\n\n            image.src = station.logo;\n            image.alt = \"Logo de \" + station.name;\n            image.loading = \"lazy\";\n\n            title.textContent = station.name;\n            frequency.textContent = station.freq;\n\n            item.appendChild(image);\n            item.appendChild(title);\n            item.appendChild(frequency);\n\n            item.addEventListener(\"click\", function () {\n              loadStation(index, audioShouldContinue);\n            });\n\n            item.addEventListener(\"keydown\", function (event) {\n              if (\n                event.key === \"Enter\" ||\n                event.key === \" \"\n              ) {\n                event.preventDefault();\n                loadStation(index, audioShouldContinue);\n              }\n            });\n\n            fragment.appendChild(item);\n          });\n\n          elements.stationList.appendChild(fragment);\n        }\n\n        function destroyHls() {\n          if (hlsInstance) {\n            hlsInstance.destroy();\n            hlsInstance = null;\n          }\n        }\n\n        function openVideo() {\n          const url = elements.videoButton.dataset.video;\n\n          if (!url) {\n            setAudioStatus(\n              \"Esta emisora no tiene una se\u00f1al de televisi\u00f3n configurada.\",\n              \"error\"\n            );\n            return;\n          }\n\n          elements.modalVideo.classList.add(\"rbtv-show\");\n          elements.modalVideo.setAttribute(\"aria-hidden\", \"false\");\n\n          setVideoMessage(\n            \"Cargando se\u00f1al de televisi\u00f3n...\",\n            true\n          );\n\n          destroyHls();\n\n          elements.video.pause();\n          elements.video.removeAttribute(\"src\");\n          elements.video.load();\n\n          if (\n            window.Hls &&\n            window.Hls.isSupported()\n          ) {\n            hlsInstance = new window.Hls({\n              enableWorker: true,\n              lowLatencyMode: true,\n              backBufferLength: 30\n            });\n\n            hlsInstance.loadSource(url);\n            hlsInstance.attachMedia(elements.video);\n\n            hlsInstance.on(\n              window.Hls.Events.MANIFEST_PARSED,\n              function () {\n                setVideoMessage(\"\", false);\n\n                elements.video.play().catch(function (error) {\n                  setVideoMessage(\n                    \"Presiona el bot\u00f3n de reproducci\u00f3n del video.\",\n                    true\n                  );\n\n                  console.warn(\n                    \"El navegador bloque\u00f3 el inicio autom\u00e1tico del video:\",\n                    error\n                  );\n                });\n              }\n            );\n\n            hlsInstance.on(\n              window.Hls.Events.ERROR,\n              function (event, data) {\n                if (!data || !data.fatal) {\n                  return;\n                }\n\n                if (\n                  data.type ===\n                  window.Hls.ErrorTypes.NETWORK_ERROR\n                ) {\n                  setVideoMessage(\n                    \"Problema de conexi\u00f3n. Intentando recuperar la se\u00f1al...\",\n                    true\n                  );\n\n                  hlsInstance.startLoad();\n                  return;\n                }\n\n                if (\n                  data.type ===\n                  window.Hls.ErrorTypes.MEDIA_ERROR\n                ) {\n                  setVideoMessage(\n                    \"Recuperando la reproducci\u00f3n del video...\",\n                    true\n                  );\n\n                  hlsInstance.recoverMediaError();\n                  return;\n                }\n\n                setVideoMessage(\n                  \"La se\u00f1al de televisi\u00f3n no est\u00e1 disponible en este momento.\",\n                  true\n                );\n\n                destroyHls();\n              }\n            );\n\n            return;\n          }\n\n          if (\n            elements.video.canPlayType(\n              \"application\/vnd.apple.mpegurl\"\n            )\n          ) {\n            elements.video.src = url;\n\n            elements.video.addEventListener(\n              \"loadedmetadata\",\n              function () {\n                setVideoMessage(\"\", false);\n\n                elements.video.play().catch(function (error) {\n                  setVideoMessage(\n                    \"Presiona el bot\u00f3n de reproducci\u00f3n del video.\",\n                    true\n                  );\n\n                  console.warn(\n                    \"No se pudo iniciar autom\u00e1ticamente el video:\",\n                    error\n                  );\n                });\n              },\n              { once: true }\n            );\n\n            return;\n          }\n\n          setVideoMessage(\n            \"Este navegador no es compatible con la se\u00f1al HLS.\",\n            true\n          );\n        }\n\n        function closeVideoPlayer() {\n          elements.modalVideo.classList.remove(\"rbtv-show\");\n          elements.modalVideo.setAttribute(\"aria-hidden\", \"true\");\n\n          elements.video.pause();\n          elements.video.removeAttribute(\"src\");\n          elements.video.load();\n\n          destroyHls();\n\n          setVideoMessage(\n            \"Cargando se\u00f1al de televisi\u00f3n...\",\n            true\n          );\n        }\n\n        elements.playButton.addEventListener(\n          \"click\",\n          playPause\n        );\n\n        elements.nextButton.addEventListener(\n          \"click\",\n          nextStation\n        );\n\n        elements.previousButton.addEventListener(\n          \"click\",\n          previousStation\n        );\n\n        elements.videoButton.addEventListener(\n          \"click\",\n          openVideo\n        );\n\n        elements.closeVideo.addEventListener(\n          \"click\",\n          closeVideoPlayer\n        );\n\n        elements.modalVideo.addEventListener(\n          \"click\",\n          function (event) {\n            if (event.target === elements.modalVideo) {\n              closeVideoPlayer();\n            }\n          }\n        );\n\n        document.addEventListener(\n          \"keydown\",\n          function (event) {\n            if (\n              event.key === \"Escape\" &&\n              elements.modalVideo.classList.contains(\n                \"rbtv-show\"\n              )\n            ) {\n              closeVideoPlayer();\n            }\n          }\n        );\n\n        elements.audio.addEventListener(\n          \"play\",\n          function () {\n            audioShouldContinue = true;\n            updatePlayInterface(true);\n            setAudioStatus(\"Reproduciendo en vivo\", \"playing\");\n          }\n        );\n\n        elements.audio.addEventListener(\n          \"pause\",\n          function () {\n            updatePlayInterface(false);\n\n            if (!elements.audio.ended) {\n              setAudioStatus(\"Reproducci\u00f3n pausada\");\n            }\n          }\n        );\n\n        elements.audio.addEventListener(\n          \"waiting\",\n          function () {\n            setAudioStatus(\"Cargando se\u00f1al de audio...\");\n          }\n        );\n\n        elements.audio.addEventListener(\n          \"playing\",\n          function () {\n            setAudioStatus(\"Reproduciendo en vivo\", \"playing\");\n          }\n        );\n\n        elements.audio.addEventListener(\n          \"error\",\n          function () {\n            audioShouldContinue = false;\n            updatePlayInterface(false);\n\n            setAudioStatus(\n              \"Radio no disponible o enlace de audio incorrecto.\",\n              \"error\"\n            );\n          }\n        );\n\n        elements.video.addEventListener(\n          \"playing\",\n          function () {\n            setVideoMessage(\"\", false);\n          }\n        );\n\n        elements.video.addEventListener(\n          \"error\",\n          function () {\n            setVideoMessage(\n              \"No se pudo reproducir la se\u00f1al de televisi\u00f3n.\",\n              true\n            );\n          }\n        );\n\n        createStationList();\n        loadStation(0, false);\n      }\n\n      if (document.readyState === \"loading\") {\n        document.addEventListener(\n          \"DOMContentLoaded\",\n          iniciarRadioTVPlayer\n        );\n      } else {\n        iniciarRadioTVPlayer();\n      }\n    })();\n  <\/script>\n\n<\/div>\n\u00ab`\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>varias radio y canales del peru exploralos<\/p>\n","protected":false},"author":1,"featured_media":864,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[37],"class_list":["post-1","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entretenimiento","tag-radios-peru"],"_links":{"self":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"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=1"}],"version-history":[{"count":5,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":1151,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions\/1151"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=\/wp\/v2\/media\/864"}],"wp:attachment":[{"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/googlecumbia.metricavisual.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}