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に貼りつけて作業する中でポイントとなる部分を下図のようにメモした。
上記試行錯誤を踏まえてようやくできた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}}}
おまけの図
使えそうなドキュメント
- Video.Fields.Movie
http://kodi.wiki/view/JSON-RPC_API/v6#Video.Fields.Movie
- List.Filter.Operators
http://kodi.wiki/view/JSON-RPC_API/v6#List.Filter.Operators
コメント
コメントを投稿