Я использую libjson (https://github.com/cinemast/libjson-rpc-cpp) и API Kodi (ранее назывался XBMC для воспроизведения / паузы и остановки моего компьютера Kodi. Однако после того, как я остановил его, я не могу перезапустить его с помощью Play / Pause снова. Метод, который я использую:
создайте файл json, который может обрабатывать jsonrpcstub, для воспроизведения / паузы следующим образом:
[
{
"name" : "Player.PlayPause",
"description": "Pauses or unpause playback and returns the new state",
"params": [
{
"$ref": "Player.Id",
"name": "playerid",
"required": true
},
{
"$ref": "Global.Toggle",
"default": "toggle",
"name": "play"}
],
"returns": {
"$ref": "Player.Speed"},
"type": "method"}
]
И тогда я использую:
#include "xbmcremoteclient.h"#include <jsonrpccpp/client/connectors/httpclient.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#ifndef WIN32
#include <termios.h>
#else
#include <conio.h>
#endif
#include <unistd.h>
#include <time.h>
#include <iostream>
using namespace jsonrpc;
using namespace std;
int main(int argc, char** argv) {
try {
HttpClient httpclient("http://user:[email protected]:8080/jsonrpc");
XbmcRemoteClient stub(httpclient);
stub.Player_PlayPause(0);
}
catch(JsonRpcException& e) {
cerr << e.what() << endl;
}
return 0;
}
сделать простой исполняемый файл для запуска этой команды.
Это работает, однако, когда я пытаюсь реализовать функцию goTo: http://kodi.wiki/view/JSON-RPC_API/v6#Player.GoTo
Я не могу справиться с этим. Я изменил файл JSON до этого:
[
{"jsonrpc": "2.0", "method": "Player.PlayPause", "params": { "playerid": 0 }, "id": 1},
{
"name": "Player.GoTo":,
"params": [
{
"name": "playerid",
"required": true
},
{
"name": "to",
"required": true,
"type": [
{
"enums": [
"previous",
"next"],
"type": "string"},
{
"description": "position in playlist"}
]
}
],
"returns": {
"type": "string"}
}
]
но я продолжаю получать синтаксическую ошибку при попытке запустить его через jsonrpcstub:
Exception -32700 : JSON_PARSE_ERROR: The JSON-Object is not JSON-Valid: specification file contains syntax errors
Предпочтительно, чтобы я просто запускал файл json, который получаю при просмотре Http: //myKodiMachine.xy: 8080 / jsonrpc через jsonrpcstub, но это уже создает синтаксические ошибки. Кажется, что его файл начинается так:
{
"description": "JSON-RPC API of XBMC",
"id": "http://xbmc.org/jsonrpc/ServiceDescription.json",
"methods": {
"Addons.ExecuteAddon": {
"description": "Executes the given addon with the given parameters (if possible)",
"params": [
{
"name": "addonid",
"required": true,
"type": "string"},
{
"default": "",
"name": "params",
"type": [
{
"additionalProperties": {
"default": "",
"type": "string"},
"type": "object"},
{
"items": {
"type": "string"},
"type": "array"},
{
"description": "URL path (must start with / or ?",
"type": "string"}
]
},
{
"default": false,
"name": "wait",
"type": "boolean"}
],
"returns": {
"type": "string"},
"type": "method"},
"Addons.GetAddonDetails": {
"description": "Gets the details of a specific addon",
"params": [
{
"name": "addonid",
"required": true,
"type": "string"},
{
"$ref": "Addon.Fields",
не является допустимым JSON по какой-то странной причине. Любые указатели в направлении возможности остановки и перезапуска списка воспроизведения в коди из Linux (как этот или любой другой способ) будут считаться полезными. Мне это нужно, особенно потому, что я играю много потоков, и если я остановлю их, они будут помещены в буфер (что не очень удобно), поэтому я предпочитаю останавливать / перезапускать их.
Все еще не очень доволен тем, что код json, предоставляемый kodi, довольно бесполезен для библиотеки jsonrpc c ++, но мне удалось заставить его работать, файл json будет нуждаться в этой строке:
{"jsonrpc": "2.0", "method": "Input.ExecuteAction", "params": { "action": "play"}, "id": 1}
а затем сделать:
stub.Input_ExecuteAction("play");
в файле cpp, и это будет работать :).