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, скачивалось 125 раз, начиная с 2020.06.08

Создать плейлист.cfg 3.42 kb, скачивалось 472 раза, начиная с 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.

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

6 (2025.01.19 13:54:50 отредактировано lidars)

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

У меня тоже появился вопрос по этой обработке.

Можно ли изменить обработку так,
чтобы при вызове шел запрос либо на имя подкаста,
либо на путь подкаста,
иначе при наличии нескольких подкастов нужно иметь такое же количество обработок,
что явно нелогично ...

Еще лучше сделать так, что
обработка должна быть одна, и она может сама определять имя подкаста,
из которого обработку запустили,
для создания плейлиста ...