1

Тема: Можно ли в HMS добавить URL плейлиста?

WendyH пишет:
sblack пишет:

Уважаемые, подскажите пожалуйста. Можно ли в HMS добавить URL плейлиста? Именно ссылку, а не файл на диске. Для этого нужно подкаст писать или как-то по аналогии с коллкециями фильмов можно сделать. Если такое невозможно, то есть ли подкаст для самого HMS? у прова он установлен, в нем и телевидение и медиатека вся

В принципе, вот этот подкаст может загружать любые плейлисты.

Спасибо. Оно работает!!! Но есть проблемы
1. плейлист в формате #EXTINF:-1 tvg-shift=0 group-title="Общественные", ТВ Центр
поэтому максимум чего я смог добиться от названия канала это "Общественные", ТВ Центр так как replaceWhat вроде как не понимает регекспы. было бы здорово еслиб подкаст понимал group-title. но самая проблема номер два
2. подкаст в HMS открывается и список каналов показывает, ссулки на ресурсы правильные. но при попытке открыть содержимое подкаста с андроида получаю статус 408 browse: request time out. после этого ни одно содержимое HMS недоступно. т.е. одно обращение к TTV Autoplaylist приведит к неработоспособности HMS. помогает перезапуск

2

Re: Можно ли в HMS добавить URL плейлиста?

поторопился с сообщением. проблему 2 победил отключив скрипт получения ссылки на ресурс. экспериментирую дальше. о результатах отпишусь

3 (2015.02.13 11:29:27 отредактировано sblack)

Re: Можно ли в HMS добавить URL плейлиста?

немного подправил оригинальный подкаст, и вот что получилось.

подкаст берет ссылку на m3u файл. удаляет tvg-shift=0 штатными средствами. создает группы из group-title. отдает устройствам оригинальные ссылки с МИМЕ типом video/mpeg.
работает с m3u без group-title тоже.

спасибо разработчику оригинального подкаста - было от чего оттолкнуться
PS: cyberhouse - это название моего прова. не пугайтесь

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

cyberhouse.hdf 14.56 kb, скачивалось 670 раз, начиная с 2015.02.13

4

Re: Можно ли в HMS добавить URL плейлиста?

mlk555 пишет:

можно ли при помощи HMS (или подкаста) передавать экран ПК на Тв?

Нет

sblack пишет:

немного подправил оригинальный подкаст, и вот что получилось.
подкаст берет ссылку на m3u файл. удаляет tvg-shift=0 штатными средствами. создает группы из group-title. отдает устройствам оригинальные ссылки с МИМЕ типом video/mpeg.
работает с m3u без group-title тоже.

Если вставить поддержку в параметрах регекспов с доп ключем для поля title, то вполне будет универсальный подкаст для любых плейлистов. Идея хорошая.

Sony Bravia KDL-32CX523

5

Re: Можно ли в HMS добавить URL плейлиста?

небольшая рекомендация для иконок из http://wonky.lostcut.net/TVimg/
если иконки нет, то добавив .htaccess со следующим содержимым

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^TVimg/.*\.(jpg|jpeg|gif|png)$ /TVimg/noimg.png [NC,L]

сервер будет отдавать иконку noimg.png для всех несуществующих каналов

6

Re: Можно ли в HMS добавить URL плейлиста?

sblack, спасибо за подсказку с иконками. Так и сделал.
И вы бы свой подкаст для загрузки плейлистов бы выложили в раздел "Подкасты", чтобы другие его легче находили. Вдруг кому ещё понадобится.

Sony Bravia KDL-32CX523

7

Re: Можно ли в HMS добавить URL плейлиста?

Я бы с радостью. Но в моем подкасте всего две строчки лишнего кода ))) вот если бы к нему сделать подгузку программы из url-tvg в #EXTM3U url-tvg="http://www.teleguide.info/download/new3/jtv.zip" плюс добавить иконок каналов на wonky.lostcut.net/TVimg/ (у меня 90% пустые) тогда бы это был универсальный парсер m3u плейлистов, а уж с транскодированием бы каждый сам во что горазд разбирался. я даже не знаю что там за язык программирования такой. сделал по наитию. вот еслиб можно было на Перле подкасты писать, я б помог.

8

Re: Можно ли в HMS добавить URL плейлиста?

sblack, да там не сложно всё. Так вообще пришла идея подкаст плейлистов сделать такой, который бы и формат XMLTV файлов понимал, там и ссылки на картинки каналов есть сразу и проч.

Но я телевизионными каналами не увлечен. Пусть, кто-нибудь другой делает. Не я ж один это умею. Советом всегда помогу.

Sony Bravia KDL-32CX523

9 (2015.03.07 07:41:44 отредактировано Рома35)

Re: Можно ли в HMS добавить URL плейлиста?

Когда нажимаешь : Настройки -События, в окошке "После начала воспроизведения медиа ресурса" можно выбрать некоторые действия, меня интересует, могу ли я, выбрав какое-нибудь действие, подменить его своим скриптом, имя файла проигрываемого медиа ресурса нужно выцарапать и передать в другую программу(батник).

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

https://hms.lostcut.net/misc.php?action=pun_attachment&item=148

Или, скажем, внедрить такую функцию, в скрипт "Устройство воспроизведения медиа устройства", выбираешь, к примеру:

Телевизор Samsung 2009 (DLNA, 16:9, 1920x1080)

Находишь соотвествующий файл samsung_2012_dlna_16x9_720x406.cfg, и правишь его, но не разбираюсь я в этом xml, это вообще реально, или не стоит копаться? Можно использовать транскод.

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

1.JPG 111.36 kb, скачивалось 272 раза, начиная с 2015.03.07

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

10 (2015.09.12 16:32:41 отредактировано Рома35)

Re: Можно ли в HMS добавить URL плейлиста?

Рома35 пишет:

имя файла проигрываемого медиа ресурса нужно выцарапать и передать в другую программу(батник)

Удалось,
for /f "tokens=1-2 delims=    " %%a in (' sed  -ne "/REQUEST HEAD/s/.*\/\([^/\.]*\)\....?infokey.*/\1/p" "%hms.log%"') do set file=%%a

даст нам код файла, под которым HMS его держит  а
sed -ne "/item id..%file%.*parentID/{n;p;}"  "%hms.log%"
даст имя файла

Лог HMS должен быть отладочным. Таким образом, получаем интерактивное взаимодействие с компом.

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

11

Re: Можно ли в HMS добавить URL плейлиста?

Рома35 пишет:

имя файла проигрываемого медиа ресурса нужно выцарапать и передать в другую программу(батник)

Опа, а я походу пропустил ваш вопрос.
Пусть поздно, но отвечу: конечно можно.

01. Настройки -> слева "Медиа-ресурсы"
02. Справа "Обработка"
03. "Добавить"

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

https://hms.lostcut.net/misc.php?action=pun_attachment&item=323

04. Выбрать язык скрипта
05. Задать имя скрипта
06. Написать скрипт
07. Сохранить его

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

https://hms.lostcut.net/misc.php?action=pun_attachment&item=324

08. Настройки -> слева "События"
09. Справа от "После начала воспроизведения медиа-ресурса" нажать выбор обработок
10. Выбрать нами созданную ранее обработку.
11. Ок. Конец.

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

https://hms.lostcut.net/misc.php?action=pun_attachment&item=325

Сам скрипт для примера. В переменную sFileName получаем имя файла. Можно запустить батник или любую программу и указать в качестве параметра:

{
  Variant objShell, objStdOut, objWshScriptExec; string sFileName;

  sFileName = ExtractFileName(CurrentMediaItem[mpiFilePath]);
  HmsLogMessage(1, 'File Name: '+sFileName);
  HmsLogMessage(1, 'File Path: '+CurrentMediaItem[mpiFilePath]);

  try {objShell = CreateOleObject('WScript.Shell');} except {}
  if (VarType(objShell)!=varDispatch) {
    HmsLogMessage(1, 'Не могу создать ActiveXObject WScript.Shell');
    return;
  }

  objShell.Run('Calc.exe ' + sFileName);
}

А за пример анализа log файла hms на батнике - спасибо. Люблю такие штуки.

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

create_obrab.png 84.02 kb, скачивалось 252 раза, начиная с 2015.09.12

open_obrab.png 71.43 kb, скачивалось 319 раз, начиная с 2015.09.12

select_obrab.png 59.61 kb, скачивалось 241 раз, начиная с 2015.09.12

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

12 (2015.09.24 16:02:11 отредактировано Рома35)

Re: Можно ли в HMS добавить URL плейлиста?

Спасибо, работает. А вот такую штуку можно сделать? :

1 Проигрываем файл, он запускает батник с именем файла, через несколько секунд батник нам вернёт два параметра: полный путь к локальному файлу медиаресурса(на самом деле это будет смонтированный, как локальный, фильм фтп ресурса провайдера), и размер этого фильма. Вернёт, предположим, через буфер обмена. Так вот, чтоб при повторном проигрывании этого файла, проигрался не он, а вот этот новый фильм. Конечно, хотелось чтоб сразу проигрался, без повторного проигрывания, но это как получится.

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

13

Re: Можно ли в HMS добавить URL плейлиста?

{
  Variant objShell, objStdOut, objWshScriptExec; string sFileName;

  sFileName = ExtractFileName(CurrentMediaItem[mpiFilePath]);
  HmsLogMessage(1, 'File Name: '+sFileName);
  HmsLogMessage(1, 'File Path: '+CurrentMediaItem[mpiFilePath]);

  try {objShell = CreateOleObject('WScript.Shell');} except {}
  if (VarType(objShell)!=varDispatch) {
    HmsLogMessage(1, 'Не могу создать ActiveXObject WScript.Shell');
    return;
  }

  objShell.Run('Calc.exe ' + sFileName);
}

А как передать полный путь к файлу, а не только имя?

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

14

Re: Можно ли в HMS добавить URL плейлиста?

Вот эта вот строчка:

sFileName = ExtractFileName(CurrentMediaItem[mpiFilePath]);

с помощью функции ExtractFileName получает имя файла из полного пути.

Значит, если вам нужен полный путь файла, то он хранится здесь:

CurrentMediaItem[mpiFilePath]

CurrentMediaItem - объект текущего элемента базы данных программы (текущего видео файла)
mpiFilePath - идентификатор свойства элемента, где хранится ссылка на файл.

Можете добавить команду:

sLink = CurrentMediaItem[mpiFilePath];

в свой код, только не забудьте переменную sLink объявить заранее, в начале - там, где

string sFileName;

сделать

string sFileName, sLink;

P.S.: И помните, полный путь файла может содержать пробелы, поэтому, если будете указывать его как параметр к запуску, не забывайте заключать его весь в кавычки.

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

15

Re: Можно ли в HMS добавить URL плейлиста?

Всё работает, но если один и тот же файл запускать и прекращать через каждые 20 секунд, то срабатывает только один раз в одну , две минуты(а должно при каждом запуске файла). Это никак не обойти?

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

16

Re: Можно ли в HMS добавить URL плейлиста?

Рома35 пишет:

Всё работает, но если один и тот же файл запускать и прекращать через каждые 20 секунд, то срабатывает только один раз в одну , две минуты(а должно при каждом запуске файла). Это никак не обойти?

Без понятия. Странно. Может быть это заложено в саму программу (ограничение на частоту обращения и срабатывания скрипта). Потому как тут на некоторых моделях вообще было замечено обращение к папкам и их сканирование без участия человека самим устройством без спросу. Поэтому не удивлюсь, если таковое ограничение есть.

Чтобы исключить особенность работы нашего или вызываемого скрипта, для проверки, можно сделать тестовую обработку с единственной выполняемой строкой:

{ HmsLogMessage(1, 'Сработал скрипт после начала воспроизведения файла!'); }

И на телеке включать/прерывать файл. Посмотреть в окно журнала программы и засечь время появления этой надписи. Если она также появляется раз в 1-2 минуты только, то... не знаю что делать и как это обойти. Но будет ясно, что это не из-за содержимого скрипта.

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

17 (2016.07.04 09:30:29 отредактировано Рома35)

Re: Можно ли в HMS добавить URL плейлиста?

{
  Variant objShell, objStdOut, objWshScriptExec; string sFileName, sLink;
  sLink = CurrentMediaItem[mpiFilePath];
  sFileName = ExtractFileName(CurrentMediaItem[mpiFilePath]);
  HmsLogMessage(1, 'File Name: '+sLink);
  HmsLogMessage(1, 'File Name: '+sFileName);
  HmsLogMessage(1, 'File Path: '+CurrentMediaItem[mpiFilePath]);

  try {objShell = CreateOleObject('WScript.Shell');} except {}
  if (VarType(objShell)!=varDispatch) {
    HmsLogMessage(1, 'Не могу создать ActiveXObject WScript.Shell');
    return;
  }
 
      if (sFileName != 'zz0.mp4')
    objShell.Run('P:\\films\\Bat\\hms\\2.bat ' + sLink);
}

Как правильно язык называется, C++? Есть ли возможность перед запуском проверить имя файла не на несоответствие имени :
if (sFileName != 'zz0.mp4')

а что- то вроде:
if (sFileName == '.*(.*).avi')
где
.*  -это любые символы
Примеры имени файла, на которые скрипт должен срабатывать:
1212 ро12(йцйц78).avi
121(2 ро)12(йцйц78).avi
То есть обязательны хотя бы одна пара круглых скобок.
И чтоб файл P:\\films\\Bat\\hms\\2.bat запускался свёрнутым.

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

18

Re: Можно ли в HMS добавить URL плейлиста?

Рома35 пишет:

Как правильно язык называется, C++? Есть ли возможность перед запуском проверить имя файла не на несоответствие имени :
if (sFileName != 'zz0.mp4')

а что- то вроде:
if (sFileName == '.*(.*).avi')
где
.*  -это любые символы
Примеры имени файла, на которые скрипт должен срабатывать:
1212 ро12(йцйц78).avi
121(2 ро)12(йцйц78).avi
То есть обязательны хотя бы одна пара круглых скобок.
И чтоб файл P:\\films\\Bat\\hms\\2.bat запускался свёрнутым.

Язык скрипта в примере - "C++Script", да.
Проверить проще всего регуляркой. Для этого можно использовать специальные функции, для работы с регулярными выражениями: HmsRegExMatch()
Примеры:

  // В регулярных выражениях в языке C++Script слеш ставится двойной - т.к. он экранирует символы. В PascalScript слеш ставится одинарный.
  if (HmsRegExMatch('\\.avi$', sFile, '') {
    // Имя файла кончается на .avi
    
  }

Если проверить нужно только расширение файла, то есть спец функция для его получения: ExtractFileExt

  if (ExtractFileExt(sFile)=='.avi') {
    // Имя файла кончается на .avi
    
  }

Если нужна помощь по составлению более сложных шаблонов регулярных выражений, спрашивайте - помогу.
Например:

  if (HmsRegExMatch('aaz.*\\.avi$', sFile, '') {
    // Сработает на всех файлах, имеющих символы aaz и кончающихся на .avi
    
  }

В регулярках символы:
. - любой символ
* - сколько угодно символов
? - ноль или больше символов, если стоит после * - то это значит будет искаться следующее ближайшее совпадение.
^ - начало строки
$ - конец строки
и проч.

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

19

Re: Можно ли в HMS добавить URL плейлиста?

Встроенная регулярка - это прекрасно.

  if (HmsRegExMatch('\\(.*\\).*\\.avi$', sFileName, '')) {
    objShell.Run('P:\\films\\Bat\\hms\\2.bat ' + sLink);
  }

Работает.

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

20

Re: Можно ли в HMS добавить URL плейлиста?

Как сделать обработку более сложную?
P:\films\Bat\hms\123(4).avi       нужен результат "4" :
if (HmsRegExMatch.............) {
    objShell.Run('P:\\films\\Bat\\hms\\2.bat ' +
4);
  }


P:\films\Bat\hms\5678(9).mp4       нужен результат "Bat    9" и чтобы они разделялись не пробелом , а tab -ом.
if (HmsRegExMatch.............) {
    objShell.Run('P:\\films\\Bat\\hms\\2.bat ' +
Bat 9);
  }

Если седом, то это так выглядит:
sed -ne "s/.*(\(.*\)).avi/\1/p"  -ne "s/.*\(Bat\).*(\(.*\)).mp4/\1\t\2/p"

То есть выше вы мне показали, как запускать с именем файла(полным путём) при совпадении регулярного выражения  в имени файла, а теперь  с результатом замены надо.

Samsung UE32EH4000 WI-FI                  Samsung UE22C4000 WI-FI
Транскод невозможен!

21

Re: Можно ли в HMS добавить URL плейлиста?

Рома35 пишет:

То есть выше вы мне показали, как запускать с именем файла(полным путём) при совпадении регулярного выражения  в имени файла, а теперь  с результатом замены надо.

Как минимум, можно использовать несколько вложенных if с регулярками и выцеплением нужных группировок (то, что в скобках).
Но есть ещё пара функций, аналогичной HmsRegExMatch:
HmsRegExMatch2(sRegexPattern, sInputText, sVar1, sVar2)
HmsRegExMatch3(sRegexPattern, sInputText, sVar1, sVar2, sVar3)
Это такие-же функции, только выдёргивают группировки в две и три переменные.
Т.е. можно сделать такую конструкцию:

string s1, s2, s3;

  if (HmsRegExMatch2('\\\\(Bat)\\\\.*\\((\\d+)\\).avi$', sFileName, s1, s2)) {
    objShell.Run('P:\\films\\Bat\\hms\\2.bat ' + s1 + '\t' + s2);
  }

Тут пример на C++Script и немного двойные слеши путают.
Вот пример на PascalScript:

  if (HmsRegExMatch2('\\(Bat)\\.*\((\d+)\)\.\w+)$', sFileName, s1, s2)) {
    objShell.Run('P:\films\Bat\hms\2.bat ' + s1 + chr(9) + s2);
  }

Тут, если регулярка выцепляет, то в переменных будут:
s1 - первая группировка (в примере 'Bat');
s2 - вторая группировка, то, что в скобках до точки.
Потом из них формируем то, что нужно.

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