JSON-RPC (JSON Remote Procedure Call) interface protocol in development for XBMC

  Thread Rating:
  • 7 Votes - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Post Reply
narcan Offline
Registered Member
Posts: 57
Joined: Nov 2007
Post: #71
Hey,

Great to see an overhaul being made of the Web API. I'm a little late to the party it seems, but the progress made on the JSON interface looks nice and clean!

I spent about 30 minutes with it on the iPhone remote, just starting down the path of implementing a few basic calls and in that time came across some things I found / had thoughts on:

URL
- Found the URL has to be /jsonrpc rather than /jsonrpc/ . Though when accessing either from the web browser as a GET it gives a 'File not found' error. Be nice we could access from either both paths or /jsonrpc gave an error to suggest it's the correct one to hit but requires POST data to submit. Just took me a couple of mins to figure out why I was getting no response,

System.GetInfo
- Is this intended to be synonymous with the HTTP API GetSystemInfo ?
- Wondering if there is any way to get the info we used to be able to get from the GetSystemInfo command (maybe with a seperate command), such as the XBMC version and shuffle state (though see next point).

Playlist.XXX
- Can we get some methods to get the playlist state ? Such as Shuffle and Repeat status.

MusicLibrary.GetGenres
- Can this be implemented ?

MusicLibrary.GetArtists
- Crashing when passing genreid (if assuming I'm doing the correct thing)


Code:
{"jsonrpc":"2.0","params":{"genreid":"6"},"id":"1","method":"MusicLibrary.GetArtists"}

Code:
Thread 5 Crashed:
0   libSystem.B.dylib                 0x97cfa732 __kill + 10
1   libSystem.B.dylib                 0x97cfa724 kill$UNIX2003 + 32
2   libSystem.B.dylib                 0x97d8d98d raise + 26
3   libSystem.B.dylib                 0x97da39d9 __abort + 124
4   libSystem.B.dylib                 0x97da3a55 abort_report_np + 0
5   libstdc++.6.dylib                 0x94001fda __gnu_cxx::__verbose_terminate_handler() + 433
6   libstdc++.6.dylib                 0x9400017a __cxxabiv1::__terminate(void (*)()) + 10
7   libstdc++.6.dylib                 0x940001ba __cxxabiv1::__unexpected(void (*)()) + 0
8   libstdc++.6.dylib                 0x940002b8 __gxx_exception_cleanup(_Unwind_Reason_Code, _Unwind_Exception*) + 0
9   com.teamxbmc.xbmc                 0x0087286f Json::Value::asInt() const + 271
10  com.teamxbmc.xbmc                 0x00884a2a JSONRPC::CMusicLibrary::GetArtists(CStdStr<char> const&, JSONRPC::ITransportLayer*, JSONRPC::IClient*, Json::Value const&, Json::Value&) + 186

Cheers,
Dave Fumberger.
find quote
topfs2 Offline
Team-XBMC Developer
Posts: 3,825
Joined: Dec 2007
Reputation: 8
Post: #72
narcan Wrote:Hey,

Great to see an overhaul being made of the Web API. I'm a little late to the party it seems, but the progress made on the JSON interface looks nice and clean!

Thanks for the compliments.
narcan Wrote:I spent about 30 minutes with it on the iPhone remote, just starting down the path of implementing a few basic calls and in that time came across some things I found / had thoughts on:

URL
- Found the URL has to be /jsonrpc rather than /jsonrpc/ . Though when accessing either from the web browser as a GET it gives a 'File not found' error. Be nice we could access from either both paths or /jsonrpc gave an error to suggest it's the correct one to hit but requires POST data to submit. Just took me a couple of mins to figure out why I was getting no response,

Well tbh I don't think there is any convention to what url to post, Problems with allowing both is more that it could get confusing Smile

Anyways on the topic of GET, I doubt its in specification to handle it but I like the idea very much, I'll make it so on a GET of the correct URL will return an introspect or something usefull atleast.

narcan Wrote:System.GetInfo
- Is this intended to be synonymous with the HTTP API GetSystemInfo ?
- Wondering if there is any way to get the info we used to be able to get from the GetSystemInfo command (maybe with a seperate command), such as the XBMC version and shuffle state (though see next point).

Well the system is really against system underneath xbmc, i.e. osx and such. its abit confusing and perhaps the whole namespace should get revamped, however adding version and such I'll for sure do in XBMC.Foo

narcan Wrote:Playlist.XXX
- Can we get some methods to get the playlist state ? Such as Shuffle and Repeat status.

Sure, I'm planning on doing a big revamp on the playlist handling soon so consider it subject to change (mostly thinking of splitting out active and nonactive playlists to seperate namespaces, i.e. VideoPlaylist.Shuffle and then have Playlist.GetItems(id ="/foo/bar.m3u") )

narcan Wrote:MusicLibrary.GetGenres
- Can this be implemented ?

I really want it in, there is some problems with xbmc core regarding genre IDs I need to overcome, will look at it asap!

narcan Wrote:MusicLibrary.GetArtists
- Crashing when passing genreid (if assuming I'm doing the correct thing)


Code:
{"jsonrpc":"2.0","params":{"genreid":"6"},"id":"1","method":"MusicLibrary.GetArtists"}

Code:
Thread 5 Crashed:
0   libSystem.B.dylib                 0x97cfa732 __kill + 10
1   libSystem.B.dylib                 0x97cfa724 kill$UNIX2003 + 32
2   libSystem.B.dylib                 0x97d8d98d raise + 26
3   libSystem.B.dylib                 0x97da39d9 __abort + 124
4   libSystem.B.dylib                 0x97da3a55 abort_report_np + 0
5   libstdc++.6.dylib                 0x94001fda __gnu_cxx::__verbose_terminate_handler() + 433
6   libstdc++.6.dylib                 0x9400017a __cxxabiv1::__terminate(void (*)()) + 10
7   libstdc++.6.dylib                 0x940001ba __cxxabiv1::__unexpected(void (*)()) + 0
8   libstdc++.6.dylib                 0x940002b8 __gxx_exception_cleanup(_Unwind_Reason_Code, _Unwind_Exception*) + 0
9   com.teamxbmc.xbmc                 0x0087286f Json::Value::asInt() const + 271
10  com.teamxbmc.xbmc                 0x00884a2a JSONRPC::CMusicLibrary::GetArtists(CStdStr<char> const&, JSONRPC::ITransportLayer*, JSONRPC::IClient*, Json::Value const&, Json::Value&) + 186

Cheers,
Dave Fumberger.

Well tbh the whole genre stuff in jsonrpc is just there as a placeholder, I really should remove or fix so it works Smile genreid needs to be an int but IIRC it doesn't even work if you specify the correct ID.

Thank you for the valuable ideas.

Cheers,
Tobias

If you have problems please read this before posting

Always read the XBMC online-manual, FAQ and search the forum before posting.
Do not e-mail XBMC-Team members directly asking for support. Read/follow the forum rules.
For troubleshooting and bug reporting please make sure you read this first.


[Image: badge.gif]

"Well Im gonna download the code and look at it a bit but I'm certainly not a really good C/C++ programer but I'd help as much as I can, I mostly write in C#."
find quote
topfs2 Offline
Team-XBMC Developer
Posts: 3,825
Joined: Dec 2007
Reputation: 8
Post: #73
Ok, I've had a serious redo of many of the jsonrpc calls in r29062 -> r29085.

Here are a number of the highlights.

MusicPlayer -> AudioPlayer.

NowPlaying playlist are now managed in AudioPlaylist and VideoPlaylist, essentially just switch Playlist(id = "video") to VideoPlaylist and it will work the same.

Playlist can now handle playlists from disk and virtual ones (this is still in the works so the api is subject to change big time).

Python can access jsonrpc with xbmc.executeJSONRPC.

Players and playlists will have add and such that can take more than just a file, for instance webinterface now uses AudioPlaylist.Play("albumid" = X) to add and autoplay an album from musiclibrary (It might get moved to AudioPlayer.Play instead, not decided but the idea will exist somewere). Also you can use this in AudioPlaylist.Add and it will be possible to use in Playlists and such aswell. So AudioPlaylist.Add("playlist-virtual" = "foo") works.

[Music|Video]Library.ScanForContent is added.

I've made so you can get the /jsonrpc in http to check if json is available (if its compiled in).

Cheers,
Tobias

If you have problems please read this before posting

Always read the XBMC online-manual, FAQ and search the forum before posting.
Do not e-mail XBMC-Team members directly asking for support. Read/follow the forum rules.
For troubleshooting and bug reporting please make sure you read this first.


[Image: badge.gif]

"Well Im gonna download the code and look at it a bit but I'm certainly not a really good C/C++ programer but I'd help as much as I can, I mostly write in C#."
find quote
Clou42 Offline
Junior Member
Posts: 10
Joined: Mar 2010
Reputation: 0
Post: #74
Hi,

I just did a little addition to your ScanForContent method to allow an optional "path" parameter. I have four hard-drives in my HTPC and a normal Update will spin up all drives so I always use the version when adding something to the library.

As it is a quite trivial patch I didn't know if opening a trac ticket is appropiate, so I pasted the diff here.

I'd be glad if you could include it in the next version. Maybe for the Audio-Library as well.

Keep up the great work
Demian
find quote
sWORDs Offline
Member+
Posts: 37
Joined: Apr 2010
Reputation: 3
Location: The Netherlands
Post: #75
edit running 29135 solved my problems.
(This post was last modified: 2010-04-09 18:26 by sWORDs.)
find quote
Bram77 Offline
Skilled Python Coder
Posts: 1,319
Joined: Feb 2008
Reputation: 27
Location: Netherlands
Post: #76
The JSON RPC Api hasn't been added to XBMC for XBOX yet, has it?

[Image: widget]

Please add to my reputation if you find my posts usefull (+/- button below posts)
Ubuntu 12.10 minimal XBMC auto-install script :: XBMControl :: Xbmc XBOX Skins :: XBMControl for Android :: Owner of Sudo Systems
find quote
topfs2 Offline
Team-XBMC Developer
Posts: 3,825
Joined: Dec 2007
Reputation: 8
Post: #77
Bram77 Wrote:The JSON RPC Api hasn't been added to XBMC for XBOX yet, has it?

Nope, I doubt it will tbh. Should be "fairly" simple to add it and use it with the old webserver though since its seperated well in core now. However I think we need to see some clients before anyone gets the energy to port it Smile

If you have problems please read this before posting

Always read the XBMC online-manual, FAQ and search the forum before posting.
Do not e-mail XBMC-Team members directly asking for support. Read/follow the forum rules.
For troubleshooting and bug reporting please make sure you read this first.


[Image: badge.gif]

"Well Im gonna download the code and look at it a bit but I'm certainly not a really good C/C++ programer but I'd help as much as I can, I mostly write in C#."
find quote
sWORDs Offline
Member+
Posts: 37
Joined: Apr 2010
Reputation: 3
Location: The Netherlands
Post: #78
topfs2, would that mean that it wouldn't be hard to run JSON-RPC on live 9.11? Then I wouldn't have to run nightly builds or SVN.
find quote
topfs2 Offline
Team-XBMC Developer
Posts: 3,825
Joined: Dec 2007
Reputation: 8
Post: #79
sWORDs Wrote:topfs2, would that mean that it wouldn't be hard to run JSON-RPC on live 9.11? Then I wouldn't have to run nightly builds or SVN.

Live is linux so just build latest svn over a live build and you'll have it (might exist ppa aswell, haven't checked tbh).

If you have problems please read this before posting

Always read the XBMC online-manual, FAQ and search the forum before posting.
Do not e-mail XBMC-Team members directly asking for support. Read/follow the forum rules.
For troubleshooting and bug reporting please make sure you read this first.


[Image: badge.gif]

"Well Im gonna download the code and look at it a bit but I'm certainly not a really good C/C++ programer but I'd help as much as I can, I mostly write in C#."
find quote
stokedfish Offline
Senior Member
Posts: 280
Joined: Jul 2008
Reputation: 0
Post: #80
hey guys, just leaving a reference to this:

http://forum.xbmc.org/showthread.php?tid=70273

so it won't get forgotten...
find quote
Post Reply