NEWS
Управление Kodi/Xbmc
-
Расскажи что наделал. Там же еще как то канал включить нужно… `
просто playpvr стартует iptv.проблемка с переключением, пока организовал переключение: следующий (next), предыдущий (previous).
Еще не знаю как узнать что в данный момент запущен pvr, так как на запрос {"jsonrpc":"2.0","method":"Player.GetActivePlayers","id":1}
он отдает id 1 для видео и pvr.
function sendCommandPlayer(name){ log('Отправлена команда Kodi: '+name); var options = { url: url+'/jsonrpc', json: true, body: { "jsonrpc":"2.0", "method": "Player.GoTo", "params": { "playerid":1,"to":name}, "id":1 }, }; // Отправка данных методом POST. request.post(options, function (err, status, body) { log('Ответ от Kodi: '+JSON.stringify(body)); }); }Вообще нужен драйвер, иначе придется в скрипт заносить все методы и команды.
Я думаю надо разбить по категориям все переменные и методы, т.е. на каждый метод своя переменная.
Может попробовать c playerid поиграться. Например для видео это 1, а для pvr это 2.
Дак он отдает в обоих случаях 1. Или как то можно изменить? -
Я маг и волшебник :D
Научился каналы включать
http://192.168.0.105/jsonrpc?request={"jsonrpc":"2.0","id":1,"method":"Player.Open","params":{"item":{"channelid":1}}}Вместе мы можем на многое ;) `
У меня получилось спарсить свой плейлист, сохранить его в файл m3u и отдать Коди. Но вот он зараза так и не показывает названия треков (берет их из ссылки). Курю дальше
2858_alexa1.png
2858_alexa2.png
2858_alexa3.png
2858_alexa4.png
2858_alexa5.png -
Еще можно сообщение показывать(как вариант показывать title):
{"jsonrpc": "2.0", "method": "GUI.ShowNotification", "params":{"title":"Switch to Channel 1","message":"1 Live TV Channel"},"id": "0"} ```` `Найди лучше как показать плейлист на экране текущий.
http://192.168.0.105/jsonrpc?request={"}}}
допустим отправил файл а как его в плейлисте увидеть?
аналогично {"jsonrpc":"2.0","id":1,"method":"Playlist.Add","params":{"playlistid":0,"item":{"directory":"C:\temp2\test\test.m3u","recursive":true}}}
В углу показывает кол-во треков в плейлисте а как список вывести хз.
-
Может у тебя m3u формат файла не верный? Покажи как у тебя выглядит файл `
! #EXTM3U
! #EXTINF:1, R.E.M. - Losing My Religion [1991]
! http://cs4-1v4.vk-cdn.net/p6/689ce9bfeb … wvbfYlOHgs
и тдВот так выглядит Коди при воспроизведении.

-
У меня локально вот такой плей лист открыл
#EXTM3U #EXTINF:306,Amethystium - Arcus E:\music\Amethystium\Evermind\Amethystium-Arcus.mp3 #EXTINF:254,Amethystium - Barefoot E:\music\Amethystium\Evermind\Amethystium-Barefoot.mp3 #EXTINF:262,Amethystium - Break of Dawn E:\music\Amethystium\Evermind\Amethystium-Break_of_Dawn.mp3 -
У меня локально вот такой плей лист открыл
#EXTM3U #EXTINF:306,Amethystium - Arcus E:\music\Amethystium\Evermind\Amethystium-Arcus.mp3 #EXTINF:254,Amethystium - Barefoot E:\music\Amethystium\Evermind\Amethystium-Barefoot.mp3 #EXTINF:262,Amethystium - Break of Dawn E:\music\Amethystium\Evermind\Amethystium-Break_of_Dawn.mp3 ```` `Открыть то открыл, а треки показывает? имя берет из плейлиста или из имени файла?
-
А вот так он показывает только Avtoradio
#EXTM3U #EXTINF:306,Amethystium - Arcus http://cast.radiogroup.com.ua:8000/avtoradio #EXTINF:254,Amethystium - Barefoot http://cast.radiogroup.com.ua:8000/avtoradio #EXTINF:262,Amethystium - Break of Dawn http://cast.radiogroup.com.ua:8000/avtoradioМожет он еще ID tag читает из mp3 файла
-
Криво работает 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 -
Вот так в списке отображает названия, но на главной все равно не хочет. Расширение .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}
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login