1

Тема: Создание m3u-плейлиста из подкаста

Обработка, которую можно запускать по расписанию для создания плейлиста m3u (например, если в ссылках на вещание есть временные токены). 
Файл плейлиста будет сохранён туда, где указано в данной обработке.
Чтобы изменить значения пути, куда сохранять, нужно открыть код обработки и поменять первые три верхних значения:

string gsPlaylistName = "DomRu";            // Название плейлиста
string gsPlaylistFile = "D:\\domru.m3u";    // Путь и имя файла m3u-плейлиста, который будет создан
string gsPodcastPath  = "https://movix.ru"; // Значение поля "Ссылка" подкаста, из которого будет создан плейлист

Данная обработка сделана для подкаста movix.ru (ДомРу Телевидение), но может быть настроена для любого подобного подкаста. 

Что эта обработка делает?

  • Находит подкаст, у которого значение "Ссылка" совпадает с указанной в обработке (в примере это https://movix.ru).
  • Обходит все папки в подкасте и получает значение MediaResourceLink (реальное значение ссылки на поток, получаемый скриптом, а не значением ссылки) для каждого видео, имя папки используется как имя группы;
  • Добавляет все найденные ссылки в содержимое плейлиста;
  • Сохраняет содержимое плейлиста в файл, указанный в коде обработки (переменная gsPlaylistFile).

+ Код обработки

string gsPlaylistName = "DomRu";            // Название плейлиста
string gsPlaylistFile = "D:\\domru.m3u";    // Путь и имя файла m3u-плейлиста, который будет создан
string gsPodcastPath  = "https://movix.ru"; // Значение поля "Ссылка" подкаста, по которому будет создан плейлист
string gsContent      = "";

///////////////////////////////////////////////////////////////////////////////
// Добавление ссылок из указанной папки в содержимое плейлиста
void AddLinksFromFolder(THmsScriptMediaItem Folder, string sGrp="") {
  for (int i=0; i < Folder.ChildCount; i++) {
    THmsScriptMediaItem Item = Folder.ChildItems[i];
    if (Item.IsFolder) {
      AddLinksFromFolder(Item, Item[mpiTitle]);
    } else {
      gsContent += Format('#EXTINF:-1 logo=%s group-title="%s" ,%s\r\n', [Item[mpiThumbnail], sGrp, Item[mpiTitle]]);
      gsContent += Item[mpiMediaResourceSource]+'\r\n';
    }
  }
}

///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я   П Р О Ц Е Д У Р А                     //
{
  THmsScriptMediaItem Podcast = HmsFindMediaFolder(mfVideoPodcastsFolderItemID, gsPodcastPath);
  
  if (Podcast != nil) {
    HmsLogMessage(1, 'Начало обнолвения плейлиста '+gsPlaylistFile+' ...');
    gsContent = '#EXTM3U\r\n';
    gsContent += '#PLAYLIST: '+gsPlaylistName+' '+DateTimeToStr(Now)+'\r\n';
    AddLinksFromFolder(Podcast);
    HmsStringToFile(gsContent, gsPlaylistFile);
    HmsLogMessage(1, 'Плейлист '+gsPlaylistFile+' обновлён.');
    
  } else {
    HmsLogMessage(2, 'Подкаст со ссылкой "'+gsPodcastPath+'" не найден!');

  }
}

Как добавить обработку в HMS

Расписание запуска обработки настраивается здесь:

+ открыть спойлер

https://hms.lostcut.net/misc.php?action=pun_attachment&amp;item=4331

Прикреплённые файлы сообщения

РасписаниеДляОбработки.png 37.73 kb, скачивалось 117 раз, начиная с 2020.06.08

Создать плейлист.cfg 3.42 kb, скачивалось 437 раз, начиная с 2020.06.08

Sony Bravia KDL-32CX523
Спасибо сказали: smsbox31

2

Re: Создание m3u-плейлиста из подкаста

Я может не понимаю чего-то, но что мешает этой обработке отдавать плейлист сразу на устройство? По такому принципу работают самообновляемые плей листы. Мы на сервер ставим, что файлы с расширением m3u есть рабочие файлы php и при вызове например 1.m3u отрабатывается скрипт и выдает результат на плеер плейлист, так как будто этот 1.m3u обычный файл, а не результат работы скрипта.  Плейлист вообще можно не хранить.

3 (2020.06.09 18:33:17 отредактировано WendyH)

Re: Создание m3u-плейлиста из подкаста

smsbox3 пишет:

что мешает этой обработке отдавать плейлист сразу на устройство?

Да ничего, если подобный скрипт засунуть в срабатывание отдачи плейлиста, какой-нибудь ссылки.
Только он заставит срабатывать каждый раз при запросе, а он отрабатывает далеко не моментально, .т.к. делает запросы для получения ссылки для каждого канала (в случае с movix).
А так, да, можно придумать применение ещё для чего-нибудь подобного скрипта. Я с плейлистами не очень, они мне незачем, по просьбе сделал.

Sony Bravia KDL-32CX523

Re: Создание m3u-плейлиста из подкаста

Для смены кодировки сохраняемого плейлиста на UTF-8 (в исходном варианте сохраняет в Windows-1251) достаточно будет добавить команду "gsContent = HmsUtf8Encode(gsContent);" ?

Re: Создание m3u-плейлиста из подкаста

Добрый день! В последнее время "обработка" работает с ошибками. Созданный файл содержит одну - две корректные ссылки. Далее следуют строки, содержащие только название каналов, а строки с ссылками отсутствуют. При этом во время работы "обработки" в журнале сервера выводятся  строки со следующим содержанием:

[Info] 2: Не удалось выполнить действие. Пожалуйста, попробуйте позднее. При повторном возникновении проблемы обратитесь по номеру бесплатной технической поддержки 8 800 333 70 00.

Также было замечено, что если перед запуском "обработки" произвести обновление подкаста "Дом.ру", то "обработка" срабатывает без ошибок.
Скажите, можно ли добавить в код "обработки" вызов обновления подкаста? Если можно - подскажите как это сделать?
Либо может есть другие способы устранения ошибки?