Немного музыки, и о том, как взаимодействовать с SDM. Получение событий.
Давайте для начала напишем простой код, чтобы отправить SDM задачу воспроизвести mp3 файл. У меня всё это уже разложено по классам, но я не хочу вываливать всё добро целиком. Я просто всех запутаю. Так что будем разбираться по шагам. Да и может быть вы придумайте более красивые решения, благо МД это позволяет.
Вот пример, как поставить задачу играть файл в режиме медиа. В этом режиме воспроизведение начнется немедленно, не смотря на наличие очереди. Фишка только в том, что если в очереди коротких сообщений что то появилось, то громкость песни будет немного убавлена на время чтения сообщения. файл song1.mp3 должен быть указан с полным путем, или лежать в папке с SDM для примера
Код: Выделить всё
$url = 'http://10.10.3.115:8090/-music:play song1.mp3';
$ctx = stream_context_create(array('http'=>array('timeout'=>2) ) );
$ans = trim( file_get_contents($url, 0, $ctx) );
echo $ans;
В ответ мы получим следующее:
Нам нужно разбить ответ по символу : и если слева streamHandle, то значит справа хендл нашей задачи. Хендл так и будет с минусом. Его нам нужно запомнить. Например можно записать в какое нибудь свойство. Теперь мы знаем, что SDM воспроизводит музыку в данный момент.
Если мы хотим остановить трек, то нужно отправить команду -music:stop указав ещё и хендл задачи
$url = '
http://10.10.3.115:8090/-streamhandle:-9999999999 -music:stop';
Далее нам хотелось бы узнать, когда трек закончится. Идем в sdm.ini файл и находим там строку
reportServer="
http://localhost:83/objects/?script=sdmReceiver"
правим на свой адрес сервера, порт (если есть), и указываем имя сценария. в моем случае это sdmReceiver. Сохраняем ini и перезапускаем SDM.
Создадим в МД новый сценарий с таким именем, и напишем в нем код для проверки
Когда SDM закончит играть трек, то вызовет этот сценарий и передаст ему параметры. Мы должны увидеть это:
a:4:{s:6:"script";s:9:"sdmReceiv";s:5:"class";s:5:"music";s:12:"streamhandle";s:11:"-2147483646";s:5:"event";s:12:"song_is_over";}
нам нужно посмотреть, что streamhandle равняется нашему хендлу задачи, а event равен song_is_over. Так мы поймем, что SDM закончил играть трек.
Далее мы можем отправить например другой трек из хранилища вашей медиа библиотеки.
Ещё раз уточню, SDM не навороченный медиа плеер с крутым плей листом. И не логический узел для принятия решений. Это просто инструмент. Всем рулит Алиса. Удачных экспериментов. Далее покажу что можно ещё получить, и как парсить ответы.