Кастомный загрузчик HLS


Наши аудиодорожки находятся в формате HLS master.m3u8. Отсортировать их на сервере невозможно. Не могли бы вы добавить возможность сортировки аудиодорожек по алфавиту, по языковому коду, а не по названию?

Можно написать свой загрузчик манифестов, который отсортирует аудиодорожки в нужном порядке. Написать его можно с помощью нейросетей по запросу "напиши кастомный загрузчик манифеста HLS с сортировкой аудидорожек по параметру language".

class CustomLoader extends Hls.DefaultConfig.loader {
   load(context, config, callbacks) {
      var onSuccess = callbacks.onSuccess;
      callbacks.onSuccess = function (response, stats, ctx, details) {
         if (context.type === 'manifest' && typeof response.data === 'string') {
            response = { data: reorderAudioByLang(response.data), url: response.url };
         }
         onSuccess(response, stats, ctx, details);
      };
      super.load(context, config, callbacks);
   }
}
function reorderAudioByLang(m3u8) {
   var lines = m3u8.split(/\r?\n/);
   var media = [], other = [];
   for (var i=0;i<lines.length;i++) {
      var L = lines[i];
      if (/^#EXT-X-MEDIA:TYPE=AUDIO/.test(L)) media.push(L); else other.push(L);
   }
   media.sort(function(a,b){
      function g(s){ var m = s.match(/LANGUAGE="([^"]*)"/i); return (m?m[1]:"").toLowerCase(); }
      var la=g(a), lb=g(b); return la>lb?1:la<lb?-1:0;
   });
   var out=[], mi=0;
   for (var i=0;i<lines.length;i++) {
      if (/^#EXT-X-MEDIA:TYPE=AUDIO/.test(lines[i])) {
         if (mi===0) for (var k=0;k<media.length;k++) out.push(media[k]);
         mi++;
      } else {
         out.push(lines[i]);
      }
   }
   return out.join("\n");
}

Класс CustomLoader должен быть объявлен до инициализации плеера. Добавьте его название в код подключение плеера параметром hlsconfig

let player = new Playerjs({id: "player", file:m3u8, hlsconfig:{loader: CustomLoader}}

Демонстрация


21.0.16
2025 © PlayerJS

Регистрация

Создать аккаунт
Регистрируясь, вы принимаете Пользовательское соглашение
Войдите, если уже есть аккаунт

Восстановить пароль

Восстановить
Если вы забыли свой email, напишите нам