Чтобы понять как работает HMS и чего мы хотим добиться, давайте представим примерно такой диалог (утрировано и неправда):
Телек, крича в сеть: "Есть кто?"
HMS: "Есть. Я. Я сервер. Могу видео, фотку и музыку"
Телек: "Есть чё?"
HMS: "Да, вот список папок" (это мы зашли с телека в HMS)
Телек: "А в этой папке че?" (это мы заходим в наш подкаст)
HMS: "Вот список видео файлов" (это сервер предоставил список видео - на самом деле это список наших созданных ссылок в подкасте, только у них ссылка-то не на видео файл, а на страницу фильма)
Телек: "Запрашиваю вот это вот видео" (это мы выбрали и включаем фильм)
HMS: "Щас, погоди 5 сек... Вот. Передаю видео файл (поток), лови".
Так вот тут в этом диалоге, в двух последних фразах происходит много делов. Если запрашиваемый элемент - это элемент подкаста и там включена соответствующая настройка , то срабатывает "Скрипт получения ссылки на медиа-ресурс". Где мы стараемся получить реальный видео файл или поток.
Если в подкасте или в настройках указано "Транскодирование" и выбран соответствующий профиль, то HMS на себя берёт "переработку" исходного формата (скачивает из интернета) файла в тот формат, который телек поддерживает и передаёт ему.
Саму "переработку" делает "Транскодер" - это отдельная программа.
Профили транскодирования для этого и предназначены - в них указано какую программу для "переработки" использовать (какой "Транскодер") и с какими параметрами (выставляются в зависимости от настроек устройства, высота там, ширина и проч).
Вот. Это краткая суть в случае использования подкастов и профилей транскодирования. Тут всё просто.
Так вот вернёмся именно к нашему подкасту. Мы составили список видео, у которых ссылка - это ссылка на страницу фильма в интернете. Её телеку не передашь - не поймёт. Нам бы ссылку на видео файл найти. Но у нас на странице - ссылка на торрент-файл только.
Хмм..
Но тут есть выход. Использовать в качестве "Транскодера" наш AceStream плеер - он умеет "проигрывать" такие файлы.
Т.е. в качестве входных параметров можно указать торрент-файл и он будет по торрент протоколу скачивать да показывать. Ок.
Но также мы ему (также как и VLC плееру, ибо он на его основе сделан) можем указать параметрах запуска не показывать нам видео, а перенаправлять (например в именованный PIPE канал, который HMS специально для этого дела создаст и перенаправит телеку).
Вот такую нам замуту и нужно сделать. На самом деле всё не так страшно. В "Скрипте получения ссылки на медиа-ресурс", по окончании его выполнения, в переменной MediaResourceLink можно указать как ссылку на видео, так и параметры для транскодирования. И даже указать какую программу запускать для транскодирования.
Вот этим и займёмся. Итого перед нами, как мне видится, стоят такие задачи:
1) Загрузить страницу сайта выбранного фильма
2) Найти там ссылку на torrent файл
3) Скачать его во временную папку
4) В переменную MediaResourceLink занести параметры, где бы мы указали запуск AceStream и в качестве параметра путь до нашего скачанного торрент-файла.
После того как сработает данный скрипт, HMS запустит AceStream с указанными параметрами, тот начнёт закачку самого видео файла и HMS весть поток изображения будет отдавать телеку. А тот показывать, ничего не подозревая откуда и каким трудом достался. Единственное условие телека - "Не люблю долго ждать видео файла, жду максимум 30 сек."
Типа того.
Сразу скажу, что если занести в переменную такую волшебную строку:
MediaResourceLink := 'cmd://"{1}" --no-crashdump --play-and-exit --language en -Idummy --demuxdump-file="<OUTPUT FILE>" vlc://pause:4 --access=p2p_access "{2}" :demux=dump'
Где вместо {1} подставить путь до AceStream плеера, а вместо {2} подставить путь до нашего torrent файла,
то HMS это дело всё запустит и будет использовать AceStream как "Транскодер".
Но это потом, в самом конце.
Вот.
Так что начать нужно с того, чтобы написать код программы, где мы загрузим html код странички, там, с помощью регулярного выражения найдём ссылку на торрент-файл, скачаем и пол дела сделано.
Да. mch прав, никакие шаблоны не сделают всю работу. И от сайта к сайту абсолютно свои проблемы и заморочки. Так что нужно писать код руками - программировать. На самом деле, скриптинг - это просто. Зато как приятно осознавать потом, что это сделал ты и ты вообще можешь сделать себе удобно. Как именно ты хочешь.
По поводу команд - если не понятно, спрашивайте. Плюс в HMSEditor есть подсказки для всех функций и краткие описания. И отладчик в программе очень помогает.
Итак наш код:
sHtml := HmsDownloadURL(mpFilePath, "", True); // Скачиваем страницу сайта в переменную sHtml
sHtml := HmsRemoveLineBreaks(sHtml); // Убираем переносы строк - облегчает работу с регулярными выражениями, чтобы не писать дополнительные флаги. Кстати, именно тут это не обязательно.
HmsRegExMatch('(http://stereotraker.ru/engine/download.php\?id=\d+)', sHtml, sLink); // С помощью регулярного выражения ищем совпадения и всё что попадёт в скобках, занесётся в переменную sLink. Тут \d+ означает "любые цифры".
sFile := HmsTranscodingTempDirectory+"\"+PodcastItem.ItemID+".torrent"; // Формируем путь и имя файла (PodcastItem.ItemID - чтобы быть просто уникальным)
HmsDownloadURLToFile(sLink, sFile); // Скачиваем по указанной ссылке в указанный файл.
именно то и делает. Прежде чем двигаться дальше, нужно чтобы вы прекрасно понимали что происходит. И что этот код понятен.
Если трудности с регулярными выражениями - их понять или требуется подсказка для конкретной задачи - всегда подскажем.
Sony Bravia KDL-32CX523