KODI の API V6(JSON-RPC)を使用して KODI をリモートコントロールする


KODI は JSON-RPC でリモートコントロールできるAPIを実装している。MovieJukeBox からこのAPIを利用してKODIをコントロール(再生、シャットダウン、スリープのみ)できるようにしている。
好きなシーンをボタン1クリックで再生できないか?という自分の要求があったので、改めてAPIについて調べてみる。
公式ドキュメントは下記。英語のみ。.NET用のライブラリとか見つけられないので自分で実装するしかない。
JSON-RPC API/v6 - Kodi
http://kodi.wiki/view/JSON-RPC_API/v6
今回使用するメソッド

パスが"smb://MEDIASV/MOVIE06/MOVIE06/" かつ ファイル名が"sample.mov"の情報を取得する
movieID取得
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","method":"VideoLibrary.GetMovies","params":{"filter":{ "and":[{ "field":"path","operator":"is","value":"smb://MEDIASV/MOVIE06/MOVIE06/" },{"field":"filename","operator":"is","value":"sample.mov"}]},"limits":{"start":0,"end":0},"properties":["file"]},"id":1}

検索結果はJSONで返却されsample.movのmovieidが335であることがわかる
検索結果(JSON)
{"id":"libMovies","jsonrpc":"2.0","result":{"limits":{"end":1,"start":0,"total":1},"movies":[{"file":"smb://MEDIASV/MOVIE06/MOVIE06/sample.mov","label":"sample","movieid":335}]}}

movieidが335を再生する
movieid指定再生
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","method":"Player.Open","id":1,"params":{"item":{"movieid":335}}}

JSON-RPCへ送信するJSONの生成
公式サイトにsampleがほとんどないので、私のような凡人にとってはかなりきつい。
JSONをオンラインで編集できるJSON Editor Onlineを使用し、試行錯誤してようやくできた。パラメータの設置とか、Nullを"Null"のようにダブルクォーテーションで括ってしまい、なかなかうまくいかなかった。
公式ページのドキュメントにあるJSONパラメータをJSON Editor Onlineに貼りつけて作業する中でポイントとなる部分を下図のようにメモした。
KODI_JSON1
上記試行錯誤を踏まえてようやくできたJSON。試行錯誤してしまうのはJSONを理解していないから。
movieidが335を開始時間を1時間から再生する
開始時間指定再生
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"movieid":335},"options":{"shuffled":null,"repeat":"off","resume":{"hours":1,"milliseconds":0,"seconds":0,"minutes":0}}},"id":1}

movieidが335を前回停止位置から再生する
レジューム再生
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"movieid":335},"options":{"shuffled":null,"repeat":"off","resume":true}},"id":1}

ファイルのパスを直接指定して再生
ファイルパスを指定して再生
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"smb://mediasv/movie06/MOVIE06/sample.move"}},"id":1}

ファイルのパスを直接指定して1時間の位置に頭出しして再生
ファイルパスを指定して頭出し再生
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"smb://mediasv/movie06/MOVIE06/sample.move"},"options":{"shuffled":null,"repeat":"off","resume":{"hours":1,"milliseconds":0,"seconds":0,"minutes":0}}},"id":1}

JSONの生成方法が分かれば、後はSQLServerのストアドプロシージャかVB.NETで関数作って動的にJSONを生成すればいいだけ。


おまけ:現在再生中のものを1時間10分に頭出しする
再生中のものを1時間10分に頭出し
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","id":1,"method":"Player.Seek","params":{"playerid":1,"value":{"hours":1}}}

おまけ:KODIでライブラリとして登録されていない場合はパスを指定して再生する。
現在再生中のものを1時間10分の位置に頭出しする
再生中のものを1時間10分に頭出し
http://192.168.11.5:8080/jsonrpc?request={"jsonrpc":"2.0","id":1,"method":"Player.Seek","params":{"playerid":1,"value":{"hours":1,"milliseconds":0,"seconds":0,"minutes":10}}}

おまけの図
KODI_JSON2

使えそうなドキュメント

コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける