2015-01-09 12 views
0

libjson (https://github.com/cinemast/libjson-rpc-cpp)과 kodi의 API (이전에 XBMC를 재생/일시 중지하고 중지하기 위해 사용하고 있습니다. . 는 다음과 같이 일시 정지/jsonrpcstub가 플레이, 처리 할 수있는 JSON 파일을 만들 : 플레이를 다시 시작할 수 없습니다/다시 일시 정지하는 방법은 내가 사용재생 목록의 첫 번째 항목을 다시 시작하기 위해 Kodi (XBMC)가있는 JSON RPC

[ 
{ 
    "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 파일을 실행됩니다 jsonrpcstub를 통해 http://myKodiMachine.xy:8080/jsonrpc으로 탐색하지만, 이미 구문 오류가 생성됩니다. 그의 파일은 다음과 같이 시작됩니다 :

{ 
    "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이 아닙니다. kodi에서 재생 목록을 중지하거나 다시 시작할 수있는 방향 (예 : 다른 방법)의 포인터는 도움이 될 것입니다. 특히 많은 스트림을 재생할 때부터이 기능이 필요합니다. 일시 정지하면 버퍼링 (매우 편리하지는 않습니다)되므로 중지하거나 다시 시작하는 것이 좋습니다.

+1

''name ":"Player.GoTo ":,'유효하지 않습니다. JSON –

+0

사실 json 오류가 발생했지만 여전히 왜 내가 할 수 없는지 이해하지 못합니다. kodi jsonrpc 서버가 처음에 나에게 반환하는 모든 기능을 구문 분석합니다 ... – tomzooi

답변

1
KODI가 제공하는 JSON 코드가 JSONRPC C++ 라이브러리 오히려 쓸모가 없지만, 나는 그것이 JSON 파일이 라인이 필요합니다, 일하러 가야 관리한다는 사실 아직도 매우 행복하지

:

{"jsonrpc": "2.0", "method": "Input.ExecuteAction", "params": { "action": "play"}, "id": 1} 

다음을 수행하십시오 :

stub.Input_ExecuteAction("play"); 

cpp 파일에서, 그리고 그것은 작동합니다 :).