• Vítejte na XBMC-Kodi.cz
  • Česko-slovenská komunita fanoušků XBMC/Kodi
Vítejte návštevníku! Přihlášení Registrace


Hodnocení tématu:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Tvheadend a web api
#1
Založil jsem toto téma především pro sběr infromací o funkcích a možnostech webového rozhraní Tvheadend serveru. Tato část není dobře zdokumentovaná (tedy já o ní alespoň nevím) a proto jistě každý uvítá jakoukoliv novou informaci. V prvním příspěvku se, kromě společného úvodu, pokusím založit styl dokumentování a prosím vás, o jeho dodržování.

Základní volání api Tvheadend serveru

http://<user>:<password>@<ip>:9981 - základní adresa, za kterou následuje další část volání/příkazu, odpovídající zvolené funkci.

Autentizace probíhá pomocí údajů některého uživatelského účtu, který je vytvořen v Tvheadend. Zadává se buď jako <user> a <password> uvedené před adresou serveru, případně podle použitého programu, kterým se dané funkce bude volat (wget, curl, atp.). U některých funkcí se autentizace může provádět pomocí ticketu, který před tím zašle server jako součást odpovědi nějaké funkci. Je použito například v playlistu.

Všechny dále uvedené funkce se zadávají do volání api jako pokračování základního volání, tedy např. funkce playlistu, které je dále uvedená jako /playlist  se zkompletuje se základním voláním, takže konečné zadání do prohlížeče nebo jiného odpovídajícího programu (wget, curl, atp.) vypadá následovně:

http://<user>:<password>@<ip>:9981/playlist


V případě že daná funkce má nebo může být nějaké parametry, budeme se snažit je v popisu uvést. U již zmíněného playlist to může být definice kódovacího profilu Tvheadend, se kterým bude playlist vygenerován:

profile=<název profilu>

S parametrem kódovacího profilu pak bude volání funkce následující:

http://<user>:<password>@<ip>:9981/playlist?profile=webtv-h264-aac-matroska

Parametry se od vlastního zadání funkce odděluje znakem ?, další parametry mezi sebou pak znakem &

V tomto prvním příspěvku uvedu několik prvních funkcí a předpokládám, že budou postupně přibývat i za přispění ostatních. Jak už jsme napsal, budu rád, když budete dodržovat zhruba podobný formát popisu funkcí.

Funkce api Tvheadend serveru

EPG export XMLTV

/xmltv/channels - XMLTV všech kanálů serveru
/xmltv/channel/<channelid> - XMLTV kanálu <channelid>
/xmltv/channelname/<channelname> - XMLTV kanálu <channelname>
/xmltv/channelnumber/<channelnumber> - XMLTV kanálu <channelnumber>
/xmltv/tagname/<tagname> - XMLTV všech kanálů se štíkem/tag <tagname>

Tvheadend server se tak může stát zdrojem EPG ve formátu XMLTV pro ostatní zařízení v domácí síti. Vhodnou kombinací štítků/tags a použití /xmltv/tagname je možné vytvořit zdroj EPG v právě definovaném rozsahu kanálů.


Playlist

/playlist - playlist všech kanálů serveru ve formátu m3u8. Identifikace kanálů v playlistu jménem, odkaz na stream přes id kanálu.

Parametry profile=<jméno streamovacího profilu Tvheadend>, viz web GUI Tvheadend, Configurace > Stream > Profily streamů
Příklad - chceme-li tedy vytvořit playlist všech kanálů Tvheadend serveru, se streamovacím profilem h.264 Matroska, zadáme:
 
http://<user>:<password>@<ip>:9981/playlist?profile=webtv-h264-aac-matroska

Streamy

/stream/channelnumber/<channelnumber> - odkaz na stream kanálu s číslem <channelnumber>
/stream/channel/<channelid> - odkaz na stream kanálu s id <channelid>

Parametry  profile=<jméno streamovacího profilu Tvheadend>

API rozhraní - čtení - vrací se informace ve formátu pro další zpracování např, v TVH klientech nebo addons. Struktura informací je podobná formě, v jaké jsou vraceny json. Viz dále uvedený příklad /api/serverinfo.

/api/serverinfo - informace o TVH serevru, příklad toho, co server po zadání vrátí:

{"sw_version": "4.0.8~wheezy","api_version": 15,"name": "Tvheadend","capabilities": ["caclient","tvadapters","satip_client","satip_server","trace"]}

/api/epg/events/grid - aktuální EPG

/api/channel/list - seznam všech TV/Radio kanálů
/api/channel/grid - detailní informace o všech kanálech, je možné použí atribut "tags" pro výběr tv/hdtv/sdtv/radio
/api/channeltag/list - seznam tags

/api/mpegts/service/grid - seznam služeb/muxů

/api/status/subscriptions - aktuální stav TVH serveru, obsahuje informace o aktuálním nahrávání
[NEW] /api/status/connections - aktuální stav TVH serveru

Pozn. Aby bylo jasno, výstup z api není ve formátu, který by bylo možné běžně použít. Je skutečně určen spíše pro tvůrce SW, který jeho prostřednictvím může získávat Z Tvheadend serveru důležité informace.


API rozhraní - zápis - ovládání funkcí tvheadend

/api/epggrab/internal/rerun?rerun=1 - spuštění interního graberu

Předpokládám, že další popisy budou následovat, sám jich mám po různých koutech uloženo ještě dost, tak jich pár také ještě přidám. Vítané jsou také odkazy na zdroje těchto informací.
 
Citovat
#2
mám pár poznatků
1. nejde použít u uživatele, který nemá povolen přístup na webové rozhraní
2. podle analýzy XHR dotazů se pro předávání parametrů u voláních "/api/..." používá metoda POST (GET bohužel nefunguje dobře)

mám malý dotaz: lze playlist nějak filtrovat, např. podle tags/štítků?

Edit: tak jsem udělal malý průzkum ve zdrojových kódech

Playlisty lze filtrovat stejným způsobem jako xmltv
Kód:
/playlist/channelid/<id> - playlist pouze s kanálem odpovídajícím danému ID
/playlist/channelnumber/<number> - playlist s kanálem se zadaným číslem kanálu, pokud je jich více vybere se první
/playlist/channelname/<name> - playlist s kanálem podle názvu
/playlist/channel/<uuid | epgid | tvh-id> - playlist s kanálem s konkrétním uuid (epgid a tvh-id je to samé, tvh-id je pojmenování z m3u playlistu, epgid je pojmenování z jiné části source kódu)
/playlist/dvrid/<id> - playlist s nahrávkou odpovídající danému ID
/playlist/tagid/<id> - playlist s kanály, které mají tag s daným ID
/playlist/tagname/<name> - playlist s kanály, které mají zadaný tag
/playlist/tag/<uuid | name> - playlist s kanály, které mají tag se zadaným uuid nebo názvem

playlisty filtrované podle tagů lze seřadit
?sort=number - řazení podle čísel kanálů
?sort=name - řazení podle názvů kanálů
?sort=services - řazení podle služeb kanálů
a mnoho dalších řazení, stejné jako v "Konfigurace -> Program/EPG -> Programy"

Příklad:
http://xxx.xxx.xxx.xxx:9981/playlist/tag/Radio?sort=name&profile=audio
Bohužel lze filtrovat podle pouze jednoho tagu

Testováno na Tvheadend 4.3-1731~gceb82fc69 (2019-01-18T21:25:10+0000)
 
Citovat
#3
Pro ty, kteří to s api Tvheadend myslí vážně, přijde určitě vhod manuál, který na Github vytvořil dave-p.

Manuál je vytvořen podle zdrojů vývojové verze 4.3, tzn. že některé funkce nebudou ještě na produkční releas, což je nyní 4.2, fungovat. Manuál najdete v https://github.com/dave-p/TVH-API-docs/wiki.
 
Citovat
  


Přejít na fórum:


Prochází: 2 host(ů)