Редактор темы

Реклама
Реклама

Вопрос? Как воспроизвести m3u8?

ABSOLUTE0302

Посетитель
Регистрация
3 Авг 2022
Сообщения
75
Рейтинг реакций
-1
Баллы
8
1/3
Автор темы
Доброго дня! Уважаемые подскажите пожалуйста как воспроизвести в аудиоплеере m3u8 на DLE 15.0?

В общем у меня сайт с радиостанциями и почему то плеер не воспроизводит ссылки на подобие
Код:
https://hls-01-dfm.hostingradio.ru/dfm/96/playlist.m3u8

Буду благодарен за помощь!
 
Доброго дня! Уважаемые подскажите пожалуйста как воспроизвести в аудиоплеере m3u8 на DLE 15.0?

В общем у меня сайт с радиостанциями и почему то плеер не воспроизводит ссылки на подобие
Код:
https://hls-01-dfm.hostingradio.ru/dfm/96/playlist.m3u8

Буду благодарен за помощь!
PlayerJS - Build Your Own HTML5 Player например для проигрывания m3u8 плейлистов, ставишь его на сайт и всё будет работать
 
Автор темы
ABSOLUTE0302 судя по всему, лучше найти человека, кто сделает платно, потому что с вашей стороны конкретики нет: что вы делали и что у вас не получилось, а без этого помочь сложно
 
Автор темы
Нашел подобный код и очень странно, на одном музыкальном шаблоне работает отлично если его подключить в main.tpl а на другом шаблоне не работает


Код:
(function () {
  var HLS_CDN = 'https://cdn.jsdelivr.net/npm/[email protected]/dist/hls.min.js';
  var hls = null;

  function isM3U8(u) {
    return typeof u === 'string' && /\.m3u8(\?|#|$)/i.test(u);
  }

  function ensureHls(cb) {
    if (window.Hls) { cb(); return; }
    var s = document.createElement('script');
    s.src = HLS_CDN;
    s.onload = cb;
    document.head.appendChild(s);
  }

  function attachHlsIfNeeded() {
    var wrap = document.querySelector('.wplayer');
    if (!wrap) return;

    var audio = wrap.querySelector('audio');
    if (!audio) return;

    // исходный src из <source> (до инициализации hls)
    var srcEl = audio.querySelector('source');
    var src = (srcEl && srcEl.getAttribute('src')) || audio.currentSrc || '';

    if (!isM3U8(src)) {
      // если предыдущий трек был HLS — подчистим инстанс
      if (hls) { try { hls.destroy(); } catch(e){} hls = null; }
      return;
    }

    // Safari / iOS — нативно
    if (audio.canPlayType('application/vnd.apple.mpegurl') || audio.canPlayType('application/x-mpegURL')) {
      // гарантированно прописываем m3u8 напрямую
      audio.src = src;
      return;
    }

    // Chrome/Firefox/Edge — через MSE (hls.js)
    ensureHls(function () {
      if (!window.Hls || !window.Hls.isSupported()) return;

      if (hls) { try { hls.destroy(); } catch(e){} }
      hls = new window.Hls({
        enableWorker: true,
        lowLatencyMode: true,
        liveDurationInfinity: true
      });

      hls.attachMedia(audio);
      hls.on(window.Hls.Events.MEDIA_ATTACHED, function () {
        hls.loadSource(src);
      });

      // если клик «Слушать» уже произошёл — гарантируем старт после парсинга манифеста
      hls.on(window.Hls.Events.MANIFEST_PARSED, function () {
        audio.play().catch(function(){ /* autoplay policies */ });
      });

      // базовое восстановление при фатальных ошибках сети/медиа
      hls.on(window.Hls.Events.ERROR, function (event, data) {
        if (!data || !data.fatal) return;
        try {
          switch (data.type) {
            case window.Hls.ErrorTypes.NETWORK_ERROR:
              hls.startLoad(); break;
            case window.Hls.ErrorTypes.MEDIA_ERROR:
              hls.recoverMediaError(); break;
            default:
              hls.destroy(); hls = null;
          }
        } catch(e){}
      });
    });
  }

  // Оборачиваем вашу apBuilding, чтобы после построения плеера подвесить HLS
  function wrapApBuilding() {
    if (!window.apBuilding || window.apBuilding.__wrapped) return;
    var orig = window.apBuilding;
    function patched(a, b, c) {
      orig(a, b, c);
      // dom уже отрисован .audioPlayer(), можно цепляться
      setTimeout(attachHlsIfNeeded, 0);
    }
    patched.__wrapped = true;
    window.apBuilding = patched;
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', wrapApBuilding);
  } else {
    wrapApBuilding();
  }

  // Переинициализация при AJAX/SPA событиях (ваши шаблоны их уже триггерят)
  ['spa:navigate','wajax:after','wajax:load','content:loaded'].forEach(function (ev) {
    document.addEventListener(ev, function () { wrapApBuilding(); setTimeout(attachHlsIfNeeded, 0); });
  });
})();
 
ABSOLUTE0302 ну если где-то работает, а где-то нет, значит там есть ошибки или конфликты, смотрите их и исправляйте
 

Похожие темы Последние темы Популярные темы

Назад
Сверху