NEWS
Управление Kodi/Xbmc
-
Криво работает skipprevious и previous? во первых для разных player разные команды, во вторых не переключает на предыдущий трек а включает текущий сначала, надо тоже покурить)
2858_w3.txt
2858_w5.txt -
Вот так в списке отображает названия, но на главной все равно не хочет. Расширение .PLS
UPD: То же самое что и m3u, короче если из потока коди может выдернуть meta info то отображает исполнителя иначе имя файла. Другого не дано.
[playlist] Title1=Here enter name of the station File1=http://stream.radiosibir.ru:8090/HQ Length1=-1 File2=G:\Music\DJ Bazil--Live at Fakel (26.08.2006).mp3 Title2=absolute path on Windows NumberOfEntries=2 Version=2
-
Проиграть видео с Youtube
{"jsonrpc": "2.0", "method": "Player.Open", "params":{"item": {"file" : "plugin://plugin.video.youtube/?action=play_video&videoid=LDZX4ooRsWs" }}, "id" : "1"}
-
Вот так в списке отображает названия, но на главной все равно не хочет. Расширение .PLS
UPD: То же самое что и m3u, короче если из потока коди может выдернуть meta info то отображает исполнителя иначе имя файла. Другого не дано.
[playlist] Title1=Here enter name of the station File1=http://stream.radiosibir.ru:8090/HQ Length1=-1 File2=G:\Music\DJ Bazil--Live at Fakel (26.08.2006).mp3 Title2=absolute path on Windows NumberOfEntries=2 Version=2 ```` `
Подправил, в списке отображает. Теперь как бы активировать текущий плейлист
3443_lacrosse-ws.png -
Мой вариант скрипта из первого поста (на данный момент )
on({id: 'javascript.0.kodi.ExecuteAction', change: 'any'}, function (obj) { if(obj.newState.val !== '' || typeof obj.newState.val !== "undefined"){ if (obj.newState.val == 'next' || obj.newState.val == 'previous'){sendCommandPlayer(obj.newState.val);} else {sendCommand(obj.newState.val);} }else{ log('Не задана команда.'); } }); // Функция отправки команды на медиацентр(kodi) function sendCommand(name){ log('Отправлена команда Kodi: '+name); var options = { url: url+'/jsonrpc', json: true, body: { "jsonrpc":"2.0", "method": "Input.ExecuteAction", "params": { "action": name}, "id":1 }, }; // Отправка данных методом POST. request.post(options, function (error, response, body) { log('Ответ от Kodi: '+JSON.stringify(body)); }); } /////////////////////////////////////////////////////////////////////////////////////// function sendCommandPlayer(name){ log('Отправлена команда Kodi: '+name); var options = { url: url+'/jsonrpc', //{"jsonrpc":"2.0","method":"Player.GetActivePlayers","id":1} json: true, body: { "jsonrpc":"2.0", "method": "Player.GetActivePlayers", "id":1 }, }; // Отправка данных методом POST. request.post(options, function (error, response, body) { log('ТЕЛО - '+body); log('Ответ от Kodi: '+JSON.stringify(body)); // log('Запущен плеер - '+body.result[0].type); //{"id":1,"jsonrpc":"2.0","result":[{"playerid":0,"type":"audio"}]} Activ_Player = body.result[0].playerid; Type_Player = body.result[0].type; if (Activ_Player == '1' && Type_Player == 'video'){ setState('javascript.0.kodi.ExecuteAction', 'fullscreen'); } var options = { url: url+'/jsonrpc', json: true, body: { "jsonrpc":"2.0", "method": "Player.GoTo", "params": { "playerid":Activ_Player,"to":name}, "id":1 }, }; // Отправка данных методом POST. setTimeout(function() { request.post(options, function (error, response, body) { log('Ответ от Kodi: '+JSON.stringify(body)); });}, 500); }); }
Если включен IPTV плеер возвращает - 1 и тип видео, если IPTV включен не на полный экран то переключение не работает, в коде сделал проверку если плеер = 1 и тип = видео - Включаем сначала на полный экран, потом уже next.
****ДОБАВЛЕНО:
Для переключения каналов оказывается есть channelup для метода Input.ExecuteAction****
-
Еще одна непонятка:
{"jsonrpc":"2.0","id":1,"method":"Playlist.GetItems","params":{"playlistid":0,"properties":["title"]}}]
Для плейлиста - 0 (музыка) Данные отдает нормально.
{"jsonrpc":"2.0","id":1,"method":"Playlist.GetItems","params":{"playlistid":1,"properties":["title"]}}]
При включенном IPTV отдает:
{"id":1,"jsonrpc":"2.0","result":{"limits":{"end":0,"start":0,"total":0}}}
Как бы получить список каналов из плелиста.
-
В этом посте буду выкладывать JSON запросы:
- Получаем инфо о текущем канале PVR(На видео пока не проверял)
{jsonrpc:2.0,id:3,method:Player.GetItem,params:{playerid:1,properties:[album,albumartist,artist,director,episode,fanart,file,genre,plot,rating,season,showtitle,studio,imdbnumber,tagline,thumbnail,title,track,writer,year,streamdetails,originaltitle,cast,playcount]}}
- Получаем инфо о воспроизводимом файле
{"jsonrpc":"2.0","id":2,"method":"Player.GetProperties","params":{"playerid":1,"properties":["audiostreams","canseek","currentaudiostream","currentsubtitle","partymode","playlistid","position","repeat","shuffled","speed","subtitleenabled","subtitles","time","totaltime","type"]}}
- узнаем уровень громкости
{"jsonrpc":"2.0","id":1,"method":"Application.GetProperties","params":{"properties":["volume","muted"]}}
- Получить список видеофайлов из библиотеки
{"jsonrpc":"2.0","id":1,"method":"VideoLibrary.GetMovieSets","params":{"properties":["thumbnail","title","fanart","playcount"],"limits":{"start":0,"end":500}}}
- Получить полную инфу из видеобиблиотеки
{"jsonrpc":"2.0","id":1,"method":"VideoLibrary.GetMovies","params":{"properties":["director","genre","plot","rating","runtime","sorttitle","studio","title","trailer","playcount","originaltitle","tagline","imdbnumber","year","set","setid","dateadded","top250","file","thumbnail","resume","streamdetails","country","tag","mpaa","fanart","cast","votes","writer"],"limits":{"start":0,"end":500}}}
- Получить список каналов IPTV
{"jsonrpc":"2.0","id":1,"method":"PVR.GetChannels","params":{"channelgroupid":"alltv","properties":["channel","channeltype","hidden","lastplayed","locked","thumbnail","broadcastnow"]}}
- Получить список радиоканалов IPTV
{"jsonrpc":"2.0","id":1,"method":"PVR.GetChannels","params":{"channelgroupid":"allradio","properties":["channel","channeltype","hidden","lastplayed","locked","thumbnail","broadcastnow"]}}
- Инфа о текущем воспроизведении
{"jsonrpc":"2.0","id":2,"method":"Player.GetProperties","params":{"playerid":0,"properties":["audiostreams","canseek","currentaudiostream","currentsubtitle","partymode","playlistid","position","repeat","shuffled","speed","subtitleenabled","subtitles","time","totaltime","type"]}}
- Получить текущий плейлист АУДИО
{"jsonrpc":"2.0","id":1,"method":"Playlist.GetItems","params":{"playlistid":0,"properties":["title","thumbnail","fanart","rating","genre","artist","track","season","episode","year","duration","album","showtitle","playcount","file"],"limits":{"start":0,"end":750}}}
- воспроизведение в случайном порядке
{"jsonrpc":"2.0","id":1,"method":"Player.SetShuffle","params":{"playerid":0,"shuffle":true}}
- повтор воспроизведения
{"jsonrpc":"2.0","id":1,"method":"Player.SetRepeat","params":{"playerid":0,"repeat":"all"}}
{"jsonrpc":"2.0","id":1,"method":"Player.SetRepeat","params":{"playerid":0,"repeat":"off"}}
{"jsonrpc":"2.0","id":1,"method":"Player.SetRepeat","params":{"playerid":0,"repeat":"one"}}
- рейтинг
{"jsonrpc":"2.0","id":1,"method":"AudioLibrary.SetSongDetails","params":{"songid":-1,"rating":5}}
- PLAY\PAUSE
{"jsonrpc":"2.0","id":1,"method":"Player.PlayPause","params":{"playerid":0}}
Гибернация (Проверял на винде)
{"jsonrpc":"2.0","id":1,"method":"System.Hibernate"}
-
Набросал маленький скриптик для отображения сообщений на экране телевизора.
createState('kodi.Message', ''); var url = 'http://192.168.1.205'; var request = require('request'); on({id: 'javascript.0.kodi.Message', change: 'any'}, function (obj) { //В формате Заголовок#Сообщение if(obj.newState.val !== '' || typeof obj.newState.val !== "undefined"){ sendMessage(obj.newState.val); }else{ log('Не задана команда.'); } }); // Функция отправки сообщения(kodi) function sendMessage(msg){ var title = msg.match(/(.*)\#/g).toString().replace(/[#]+/g, ''); var message = msg.match(/#(.*)/g).toString().replace(/[#]+/g, ''); log('Отправлена сообщение Kodi: '+title+' - '+message); var options = { url: url+'/jsonrpc', json: true, body: { "jsonrpc":"2.0", "method": "GUI.ShowNotification", "params": {"title":title,"message":message}, "id":1 }, }; // Отправка данных методом POST. request.post(options, function (error, response, body) { if (!error && response.statusCode == 200) { log('Ответ от Kodi: '+JSON.stringify(body)); } }); }
И код для отправки сообщения из скриптов:
setState('javascript.0.kodi.Message', 'Внимание#Походу отключили горячую воду');
Вообще запрос поддерживает еще и вывод изображения. (Поддерживает локальные и удаленные) + есть уровень важности "image": "info", "warning", "error". При уровне warning Kodi будет издавать сигнал при появлении сообщения.
Так же можно задать задержку (время отображения) сообщения.
Сам запрос имеет вид:
{“jsonrpc":"2.0″,"method":"GUI.ShowNotification","params":{“title":"Sample Title","message":"Sample Message","image":"","displaytime":5000},"id":1}
-
Оставлю тут, мож кому пригодится
-
Оставлю тут, мож кому пригодится
https://github.com/tillbaks/node-xbmc `
Это что то старое.Я форкнул https://github.com/instalator/kodi-ws
Все хочу сесть за драйвер, но даже не знаю стоит ли начинать, опыта мало.
Хотя можно активизировать тему в плане хотелок по kodi драйверу чтобы определится с функционалом драйвера.