Vlc как написать плагин
Тема lua. Тут можно просить помощи. Или делиться скриптами для VLC.
2 Ответ от WendyH 2017.12.13 19:16:45
Пример написания LUA-скрипта для VLC.
Общие положения об использовании lua в VLC для обработки ссылок на поток или плейлистов
1. Все скрипты для обработки плейлистов или ссылок находятся здесь: "<ПутьДоУстановленногоVLC>\VideoLAN\VLC\lua\playlist".
2. Там уже есть скрипты для разных сайтов (например для youtube), но они скомпилированы и их не прочитать. А их исходники можно и полезно посмотреть здесь. Кидать в папку VLC скрипты не обязательно скомпилированные. Можно как есть, с расширением .lua
3. Общее описание структуры скрипта для плейлистов тут. Оно простое, поэтому опишу в пару слов на русском:
В скрипте должны быть две функции - probe() и parse(). Сначала вызывается probe(), если она возвращает true - то будет вызвана parse(). Поэтому в probe() вставляем код для проверки, относится ли обрабатываемая ссылка к нашему случаю, а в parse() пишем код преобразования ссылки или вообще делаем что хотим.
Если кто-то умеет программировать, но не знаком с LUA - то не пугайтесь, язык простой, но умеет многое. Ссылка на краткое описание его синтаксиса: на англ. и тут кто-то перевёл.
Функция parse() должна возвращать массив объектов, в свойствах которых должны быть значения элемента плейлиста (path - обязательно, остальные нет). Если элемент один, то плеер считает что это и есть ссылка, а не плейлист (или плейлист содержит единственный элемент).
А вот пример посложнее.
Поэтому я выкрутился так. Отдаю на выходе parse() ссылку на PHP скрипт, где в options указываю ключи для VLC со значениями Referer и User-agent. Т.к. ссылка такого PHP скрипта расположена на другом домене, то в функции probe() я проверяю на соответствие ссылке уже двум доменам. Один для страницы сайта, второй для обработки этого PHP скрипта.
А в parse() тоже сначала проверяю, какую ссылку мы обрабатываем. Если это PHP скрипт, то достаём оттуда ссылку на поток. Если это ссылка на страницу сайта, достаём оттуда ссылку на PHP скрипт, который потом будет обработан снова нашим же скриптом (по второму кругу).
Прикрепил файлы скриптов, который можно кинуть в \lua\playlist папки, где установлен VLC.
В данной статье я расскажу о том, как написать плагин на языке C для медиаплеера VLC. Я написал свой плагин для упрощения просмотра сериалов и фильмов на английском языке. Идея создания этого плагина описывается в разделах Идея и Поиск решения. Технические детали реализации плагина приведены в разделах Hello World плагин и Реализация. О том, что получилось в итоге и как этим пользоваться можно прочитать в последнем разделе, Результат.
Исходный код проекта доступен на GitHub.
Идея изучать иностранный язык за просмотром любимого сериала не нова, но вот с ее воплощением в жизнь лично у меня всегда возникали проблемы. Очень сложно смотреть сериал или фильм, когда не понимаешь половину того, что там говорят. Конечно, можно включить субтитры, но если в речи встретится незнакомое слово или выражение, то от того, что оно будет продублировано текстом, яснее не станет. А смотреть сериал с русскими субтитрами мне совсем не понравилось — мозг переключается на родной язык и перестает воспринимать иностранную речь. Я где-то читал, что сначала нужно смотреть серию на русском языке, а потом уже в оригинале. Но меня такой подход тоже не устроил. Во-первых, где взять столько времени, чтобы по нескольку раз смотреть одно и то же, а во-вторых, смотреть второй раз уже не так интересно — теряется мотивация.
Несмотря на все сложности с просмотром иностранных сериалов, я довольно неплохо могу читать техническую документацию, статьи и книги на английском. Книги мне нравится читать на электронной читалке Kindle, так как там классно реализована функция работы со словарями — можно одним касанием экрана найти перевод незнакомого слова. Англоязычные статьи и сайты удобно читать, установив в браузере специальное расширение для перевода, — я пользуюсь расширением Яндекс.Перевод. Такой подход позволяет читать и понимать английские тексты, не сильно отвлекаясь на поиск незнакомых слов.
Я подумал, почему бы не применить тот же подход для просмотра сериалов — включаем серию на английском, как только встречается непонятная фраза, переключаемся на русскую аудиодорожку и отматываем немного назад. Далее продолжаем смотреть серию на английском.
На самом деле, вся необходимая мне функциональность уже доступна во многих популярных медиаплеерах. Единственное, мне бы хотелось переключать аудиодорожку и отматывать видео на несколько секунд назад нажатием одной кнопки. Также было бы здорово, если бы после перевода непонятного фрагмента медиаплеер сам переключал аудиодорожку обратно на английскую. Ну и еще неплохо было бы иметь возможность повторять переведенный ранее фрагмент с английской дорожкой.
То есть, мне нужен медиаплеер, под который можно писать плагины. Желательно еще, чтобы он был кроссплатформенным, так как я пользуюсь ПК под Windows и ноутбуком под Linux. Мой выбор сразу же пал на VLC. На хабре я даже нашел статью, в которой @Idunno рассказывает, как написать расширение VLC на LUA. Кстати, это расширение он тоже написал для изучения английского) К сожалению, данное расширение не работает в последних версиях VLC (старше 2.0.5). Из-за нестабильной работы из LUA API убрали возможность добавления callback-функций, через которые в LUA-расширении можно было обрабатывать события клавиатуры. В README к своему расширению на GitHub @Idunno приводит ссылку на mailing list разработчиков VLC с обсуждением данной проблемы.
Таким образом, для реализации моей идеи расширение на LUA не подойдет, нужно писать плагин на C. И хоть я и писал что-либо на C последний раз лет 7 назад, еще в университете, решил попробовать.
Стоит отметить, что у медиаплеера VLC достаточно хорошая документация. Из нее я узнал, что при разработке медиаплеера используется модульный подход. VLC состоит из нескольких независимых модулей, реализующих определенную функциональность, и ядра (libVLCCore), которое управляет этими модулями. При этом модули бывают двух типов: внутренние (in-tree) и внешние (out-of-tree). Исходный код внутренних модулей хранится в одном репозитории с кодом ядра. Внешние модули разрабатываются и собираются независимо от медиаплеера VLC. Собственно, последние и есть то, что называют плагинами.
Отлично, осталось только собрать плагин и протестировать его работу. По сборке внешнего плагина тоже есть инструкция. Тут стоит обратить внимание на раздел Internationalization, в котором описывается, как работает локализация в VLC. Если коротко, то для внешних плагинов требуется определять макросы N_() , _() :
Для сборки предлагается использовать старый добрый Makefile либо Autotools. Я решил пойти простым путем и выбрал Makefile. В Makefile нужно не забыть определить переменную MODULE_STRING — это идентификатор нашего плагина. Также я немного подправил работу с директориями — теперь они определяются через pkg-config. В итоге получились следующие файлы:
Проще всего собрать плагин под Linux. Для этого потребуется установить, собственно, сам медиаплеер VLC, а также необходимые для сборки плагина файлы и инструменты. В Debian/Ubuntu это можно сделать с помощью следующей команды:
Собственно, все готово, собираем и устанавливаем наш плагин с помощью команды:
Для проверки работы плагина запускаем VLC также из консоли:
К сожалению, никакого «Hello world» мы не увидели. Все дело в том, что плагин нужно сначала включить. Для этого открываем настройки (Tools > Preferences), переключаемся на расширенный вид (выбираем All в группе Show settings) и находим в дереве на панели слева Interface > Control interfaces — ставим галочку напротив нашего плагина Hello interface.
Сохраняем настройки и перезапускаем VLC.
Копируем содержимое архива в какую-нибудь папку, например, в С:\Projects. Кроме sdk архив содержит и сам медиаплеер, который можно использовать для тестирования и отладки плагина.
Для сборки под Windows нам также потребуется установить компилятор и другие утилиты. Все необходимое ПО можно получить, установив среду MSYS2. На сайте проекта есть подробная инструкция по установке. Если коротко, то сразу после установки нужно открыть консоль (C:\msys64\msys2.exe) и обновить пакеты MSYS2 с помощью команды:
Далее нужно закрыть окно терминала MSYS2, затем открыть его еще раз и выполнить команду
После обновления всех пакетов нужно установить тулчейн:
Теперь, когда все необходимые пакеты установлены, можно приступать к сборке плагина. Я немного доработал Makefile, чтобы он мог собирать плагин как под Linux так и под Windows. Кроме того, пришлось убрать некоторые неподдерживаемые MinGW параметры сборки, в итоге Makefile стал выглядеть так:
Так как MSYS2 ничего не знает о нашем sdk для VLC, то перед сборкой нужно добавить в переменную окружения PKG_CONFIG_PATH путь до папки pkgconfig из этого sdk. Открываем консоль MinGW (C:\msys64\mingw64.exec) и выполняем команды:
Для проверки работы плагина запускаем VLC также из консоли:
Как и в случае с Linux, идем в настройки и включаем наш плагин. Сохраняем настройки и перезапускаем VLC.
Для реализации моего плагина мне необходимо было понять, как управлять медиаплеером (менять аудиодорожку, перематывать назад) и как обрабатывать события нажатия клавиш клавиатуры. Чтобы разобраться во всем этом, я обратился к документации. Также в Интернете я нашел пару интересных статей, проливающих свет на архитектуру медиаплеера: The architecture of VLC media framework и VLC media player API Documentation.
VLC состоит из большого количества независимых модулей (400+). Каждый модуль должен предоставлять информацию о типе реализуемой им функциональности, а также функции инициализации/финализации. Данная информация описывается в блоке vlc_module_begin() — vlc_module_end() с помощью макросов set_capability() и set_callbacks(). Функции инициализации/финализации модуля (обычно они называются Open и Close) имеют следующую сигнатуру:
vlc_object_t — это базовый тип для представления данных в VLC, от которого наследуются все остальные (см. статью Object_Management). Указатель на vlc_object_t нужно приводить к конкретному типу данных в соответствии с той функциональностью, которую реализует модуль. Для управления медиаплеером я указал в макросе set_capability() значение interface. Соответственно, в функциях Open и Close мне нужно привести vlc_object_t к intf_thread_t.
Взаимодействие между модулями построено на основе шаблона проектирования observer. VLC предоставляет механизм «object variables» (см. статью Variables), с помощью которого в экземпляры типа vlc_object_t (и его производные) можно добавлять переменные. Через эти переменные модули могут обмениваться данными. Также на переменную можно навесить callback-функцию, которая будет вызываться при изменении значения этой переменной.
В качестве примера можно рассмотреть модуль Hotkeys (modules/control/hotkeys.c), который отвечает за обработку событий нажатия горячих клавиш. В функции Open на переменную key-action навешивается callback-функция ActionEvent:
В функцию var_AddCallback передается указатель на vlc_object_t, имя переменной, callback-функция и указатель на void для передачи произвольных данных, которые потом пробрасываются в указанную callback-функцию. Сигнатура callback-функции приведена ниже.
В качестве параметров в callback-функцию передается указатель на vlc_object_t, имя переменной, старое и новое значение этой переменной (в данном случае, идентификатор соответствующего нажатой комбинации горячих клавиш действия), а также заданный при добавлении callback-функции указатель на какие-либо дополнительные данные.
Непосредственно обработка событий горячих клавиш выполняется в функции PutAction, которая вызывается внутри callback-функции ActionEvent. Функция PutAction принимает на вход идентификатор события нажатия комбинации горячих клавиш (i_action) и с помощью оператора switch выполняет соответствующие действия.
Например, событию перемотки назад соответствует значение ACTIONID_JUMP_BACKWARD_SHORT . Для выполнения соответствующего действия из настроек VLC берется интервал перемотки (из переменной short-jump-size):
Чтобы перемотать проигрываемый файл, достаточно присвоить переменной time-offset значение, соответствующее времени (в микросекундах), на которое нужно сместить воспроизведение:
Для перемотки вперед нужно указать положительное значение, для перемотки назад — отрицательное. Константа CLOCK_FREQ используется для конвертации секунд в микросекунды.
Аналогичным образом происходит смена аудиодорожки (событие ACTIONID_AUDIO_TRACK ). Только отвечающая за аудиодорожку переменная audio-es может принимать ограниченный набор значений (в соответствии с имеющимися в проигрываемом файле аудиодорожками). Получить список возможных значений переменной можно с помощью функции var_Change():
Помимо списка значений эта функция также позволяет получить список описаний этих значений (в данном случае название аудиодорожек). Теперь мы можем поменять аудиодорожку с помощью функции var_Set():
Как управлять медиаплеером разобрались, осталось научиться обрабатывать события клавиатуры. К сожалению, добавить новую горячую клавишу у меня не получилось. Все горячие клавиши жестко зашиты в коде ядра VLC (src/misc/actions.c). Поэтому я добавил обработчик более низкоуровневых событий нажатия клавиш клавиатуры, повесив свою callback-функцию на изменение переменной key-pressed:
Комбинация клавиш | Значение |
---|---|
Ctrl + 1 | 00000100 00000000 00000000 001100012 |
Alt + 1 | 00000001 00000000 00000000 001100012 |
Ctrl + Alt + 1 | 00000101 00000000 00000000 001100012 |
Shift + 1 | 00000010 00000000 00000000 001000012 |
Обратите внимание на значение при нажатии комбинации «Shift + 1». Так как в этом случае будет выведен символ "!", то и значение первого байта будет соответствовать коду этого символа в Unicode (0x00000021).
Я назвал свой плагин TIP — акроним от фразы «translate it, please», также tip можно перевести как «подсказка». Исходный код плагина опубликован на GitHub, там же можно скачать готовые сборки плагина под Windows и Linux.
Для установки плагина нужно скопировать файл libtip_plugin.dll (libtip_plugin.so для Linux) в папку <path-to-vlc>/plugins. В Windows VLC обычно устанавливается в папку C:\Program Files\VideoLAN\VLC. В Linux найти папку установки можно с помощью команды:
В Ubuntu, например, VLC ставится в /usr/lib/x86_64-linux-gnu/vlc.
Далее потребуется перезапустить VLC, затем в главном меню открыть Tools > Preferences, переключиться на расширенный вид (выбрать All в группе Show settings), на панели слева перейти в раздел Interface > Control и поставить галочку напротив пункта TIP (translate it, please). После чего снова потребуется перезапуск VLC.
В настройках плагина можно указать номера основной и вспомогательной (для перевода) аудиодорожек, а также время (в секундах), на которое плагин будет отматывать назад для повтора со вспомогательной аудиодорожкой.
Для управления плагином я добавил следующие горячие клавиши:
- "/" для перевода
- «Shift + /» для повтора переведенного ранее фрагмента видео с основной аудиодорожкой
По своему опыту использования плагина могу сказать, что, в целом, я доволен результатом. Главное, правильно подобрать контент, если будет понятна хотя бы половина используемой там иностранной речи, плагин поможет перевести остальное. В противном случае плагин, наверное, будет бесполезен.
UPD
Добавил в плагин поддержку субтитров. Теперь можно выбрать аудиодорожку и субтитры для перевода. Также можно выбрать субтитры для повтора переведенного ранее фрагмента видео. Переключение аудиодорожки и субтитров можно отключить, указав в настройках значение -1.
Настройки выбора аудиодорожки и субтитров автоматически сбрасываются на те, что были до нажатия клавиш перевода/повтора.
В статье «Воспроизведение видео в Delphi» была упомянута возможность написания проигрывателя для видео с использованием VLC SDK. В том числе с использованием набора компонентов PasLibVlc.
Эти компоненты значительно упрощают работу с VLC SDK, так как весь низкоуровневый функционал (включая импорт функций VLC API) в них уже реализован и разработчику при написании программ предоставляется достаточно простой удобный интерфейс.
Рассмотрим работу с ними на примере простейшего проигрывателя, который обладает следующими возможностями:
- Воспроизведение видео;
- Постановка воспроизведения на паузу;
- Остановка воспроизведения видео;
- Регулировка громкости воспроизведения.
Безусловно, перечисленный набор функций более чем скромный, но для изучения основ работы с PasLibVlc и самостоятельного написания не очень сложных программ для воспроизведения видео этого вполне достаточно.
Набор PasLibVlc включает всего 2 компонента:
- TPasLibVlcPlayer – собственно он и отвечает за воспроизведение;
- TPasLibVlcMediaList – список воспроизведения.
Для реализации вышеуказанного функционала будет вполне достаточно TPasLibVlcPlayer.
После установки PasLibVlc в панели компонентов появится соответствующая группа.
Подготовка прототипа программы
Поместим компонент TPasLibVlcPlayer на форму. На эту же форму поместим 5 компонентов TButton, с помощью которых будет осуществляться воспроизведение, постановку на паузу, остановку воспроизведения и регулирование громкости. В результате получаем вот такую форму:
У компонента TPasLibVlcPlayer есть свойство AudioOutput. Оно предназначено указания технологии, которая будет использоваться для воспроизведения звука из видеофайла. Доступно 3 варианта:
- aoDefault – то, что используется в системе по умолчанию;
- aoDirectX – для воспроизведения звука используется DirectX;
- aoWaveOut – для воспроизведения звука используются стандартные средства операционной системы.
К сожалению, регулирование громкости в VLC SDK корректно работает, только если свойство AudioOutput имеет значение aoWaveOut (по крайней мере, в Windows 7 x64). Поэтому, сразу устанавливаем для него это значение.
На этом подготовительный этап завершён. Перед следующими этапами необходимо сохранить и скомпилировать проект (зачем это нужно будет пояснено ниже).
Подключение VLC SDK
VLC SDK представляет собой набор библиотек, в которых реализованы средства для воспроизведения аудио и видео файлов. Какие именно файлы и папки входят в его состав показано на скриншоте ниже.
Если не получилось скачать VLC SDK «в чистом виде», то можно также скачать zip или 7z архив с portable версией проигрывателя VideoLAN и извлечь всё это оттуда.
Для удобства поместим файлы VLC SDK в отдельную папку (назовём её, например, «VLC»). А, саму папку скопируем в ту папку, где находится ранее скомпилированный файл. Собственно для этого на предыдущем этапе и выполнялась компиляция.
Теперь можно приступить непосредственно к подключению VLC SDK к программе. Подключение будет выполняться при запуске программы. Поэтому, создадим для формы проигрывателя обработчик события OnCreate и в нём пропишем путь к папке с VLC SDK. Так как папка с VLC SDK находится в той же папке, что и программа, реализация будет предельно простой.
В этой заметке продолжу рассказ об одном из самых популярных видеоплееров VLC Media Player.
Расскажу о возможностях программы, о которых не упомянул в предыдущей статье, а также о настройках, которыми пользуюсь сам.
Пульт управления из телефона
У большинства из нас дома есть Wi-Fi роутер, через который интернет раздается на все устройства — компьютеры, ноутбуки, планшеты и телефоны. Это означает, что если компьютер подключен к этому роутеру, скажем, кабелем, а телефон по беспроводной сети, то оба эти устройства находятся в одной локальной сети, а значит мы можем без проблем подключиться с одного устройства к другому.
Далее переходим в раздел Интерфейс -> Основные интерфейсы и включаем Web.
Затем нам нужно узнать IP-адрес компьютера, на котором запущен видеоплеер. В Windows для этого подойдет командная строка и команда ipconfig.
Ну а далее берем телефон, подключенный к этой же Wi-Fi сети, открываем браузер и вводим IP-адрес компьютера, добавив через двоеточие порт 8080. Теперь через телефон можем управлять воспроизведением.
Добавляем элементы управления плеером
Далее поговорим о внешнем виде плеера.
В предыдущей заметке я затронул тему оформления, а точнее рассказал, как можно скомпоновать панель управления плеером по своему желанию. При этом я не стал детально рассматривать все доступные в программе элементы управления, а некоторые из них могут быть вполне полезными.
Так мы можем вынести на панель управления кнопки, позволяющие покадрового листать видео. Это может быть удобно при выборе подходящего кадра для его последующего сохранения в виде изображения. Поэтому на панели управления с помощью элемента «промежуток» можно выделить две кнопки — покадрового листания и снимка.
Также, с моей точки зрения, полезными могут быть инструменты, позволяющие листать видео с шагом в 10 секунд.
А еще можно скомпоновать отдельный раздел на панели управления, в который вынесем кнопки ускорения и замедления видео, а также индикатор скорости воспроизведения.
Я этим пользуюсь и довольно часто. Обучающие и информационные видео предпочитаю смотреть на ускоренном воспроизведении, а фильмы, само собой, с обычной скоростью.
Темы оформления
Еще больше изменить внешний вид можно с помощью так называемых скинов. «Skin» с английского переводится как кожа и этот термин широко используется в компьютерном жаргоне, обозначая тему оформления какой-либо программы.
У VLC Media Player очень большое сообщество пользователей и сами пользователи программы расширяют ее функционал за счет создания тем оформления и плагинов.
Подобрать тему оформления можно на официальном сайте плеера.
На сайте представлено более сотни готовых скинов. Файлы скинов имеют расширение .vlt. Для установки темы достаточно скачать файл с сайта и затем переместить его в папку с установленным плеером — C:\Program Files\VideoLAN\VLC\skins
Затем в настройках выбираем нужную тему оформления и перезапускаем программу.
Быстро сменить скин можно через контекстное меню, вызванное в любой области окна плеера Интерфейс -> Выбрать оболочку
Если же захотим вернуть стандартную тему оформления, то вновь заходим в настройки и выбираем «Стандартный стиль». После этого потребуется перезапустить плеер.
Расширения
Ну и раз уж затронули тему скинов, то нельзя не упомянуть и о расширениях, которые доступны для плеера. Чаще всего пользователи (и я в том числе) ограничиваются только стандартным функционалом плеера, однако у плеера есть несколько десятков дополнений, которые позволяют расширить его функциональность.
Сказать по правде, я никогда не пользовался расширениями VLC плеера и перед подготовкой данной заметки была идея подобрать несколько интересных плагинов, которые были бы полезны большому количеству пользователей. Но ничего особо примечательного я так и не нашел.
Расширения, плагины и скины доступны на официальном сайте. Так как большинство из них разрабатывались самыми обычными пользователями, то многие уже утратили актуальность, ведь код плеера со временем менялся, а расширения разработчиком не поддерживались. Добрая половина расширений работает с субтитрами, но есть и довольно интересные решения вроде Intro and Credits Skipper. Это расширение позволяет убирать из сериалов заставку и титры, то есть ту часть, которую обычно зрители проматывают. Но, судя по комментариям, приложение перестало работать с VLC Media Player, начиная с версии 3.0.
Актуальные расширения можно найти в инструментах самого плеера (модули и расширения). Здесь представлено только пять расширений и ничего особо примечательного в них нет.
Поэтому, подводя итог — расширения у плеера есть, но их полезность сомнительна. Если вам известны какие-то действительно полезные расширения, то буду рад, если поделитесь ими в комментариях.
Полезные настройки
У VLC Media Player очень много настроек и далеко не все они востребованы. Я выделю лишь несколько из них, которыми пользуюсь сам.
Итак, первая настройка — это Пауза при сворачивании.
Как понятно из названия, функция позволяет автоматически ставить видео на паузу, если окно плеера сворачивается. Бывает так, что при выполнении каких-то рутинных задач на компьютере я фоном в небольшом окне запускаю видео и делаю его поверх всех окон. Когда мне нужно отвлечься на что-то требующее концентрации внимания, я просто сворачиваю плеер и видео автоматически ставится на паузу.
Еще одной полезной опцией может быть быстрый переход к интересующему фрагменту видео. Сделать это можно либо через меню Воспроизведение, либо с помощью сочетания клавиш Ctrl+T. Указываем точное время и видео начнет воспроизводиться с этого момента.
Кстати, как и в большинстве программ, в VLC плеере есть огромное количество горячих клавиш, которые существенным образом облегчают взаимодействие с программой. Все они вынесены в одноименный раздел настроек.
Рекомендую его пролистать и выписать для себя комбинации клавиш для запуска наиболее часто вами используемых функций. При желании сочетание клавиш можно всегда изменить — просто щелкаем мышью на нужном действии и на клавиатуре нажимаем желаемое сочетание.
Ну а какими настройками и функциями плеера пользуетесь вы? Поделитесь в комментариях.
Тема lua. Тут можно просить помощи. Или делиться скриптами для VLC.
2 Ответ от WendyH 2017.12.13 19:16:45
Пример написания LUA-скрипта для VLC.
Общие положения об использовании lua в VLC для обработки ссылок на поток или плейлистов
1. Все скрипты для обработки плейлистов или ссылок находятся здесь: "<ПутьДоУстановленногоVLC>\VideoLAN\VLC\lua\playlist".
2. Там уже есть скрипты для разных сайтов (например для youtube), но они скомпилированы и их не прочитать. А их исходники можно и полезно посмотреть здесь. Кидать в папку VLC скрипты не обязательно скомпилированные. Можно как есть, с расширением .lua
3. Общее описание структуры скрипта для плейлистов тут. Оно простое, поэтому опишу в пару слов на русском:
В скрипте должны быть две функции - probe() и parse(). Сначала вызывается probe(), если она возвращает true - то будет вызвана parse(). Поэтому в probe() вставляем код для проверки, относится ли обрабатываемая ссылка к нашему случаю, а в parse() пишем код преобразования ссылки или вообще делаем что хотим.
Если кто-то умеет программировать, но не знаком с LUA - то не пугайтесь, язык простой, но умеет многое. Ссылка на краткое описание его синтаксиса: на англ. и тут кто-то перевёл.
Функция parse() должна возвращать массив объектов, в свойствах которых должны быть значения элемента плейлиста (path - обязательно, остальные нет). Если элемент один, то плеер считает что это и есть ссылка, а не плейлист (или плейлист содержит единственный элемент).
А вот пример посложнее.
Поэтому я выкрутился так. Отдаю на выходе parse() ссылку на PHP скрипт, где в options указываю ключи для VLC со значениями Referer и User-agent. Т.к. ссылка такого PHP скрипта расположена на другом домене, то в функции probe() я проверяю на соответствие ссылке уже двум доменам. Один для страницы сайта, второй для обработки этого PHP скрипта.
А в parse() тоже сначала проверяю, какую ссылку мы обрабатываем. Если это PHP скрипт, то достаём оттуда ссылку на поток. Если это ссылка на страницу сайта, достаём оттуда ссылку на PHP скрипт, который потом будет обработан снова нашим же скриптом (по второму кругу).
Прикрепил файлы скриптов, который можно кинуть в \lua\playlist папки, где установлен VLC.
Читайте также: