o
Kylone

Kylone Headend · for integrators

Hospitality Integration Guide

For integrators building a hospitality TV application, an HTML5 middleware or a set-top-box line-up on top of a Kylone headend. Everything here is served by the headend as installed; nothing needs custom work on the headend side.

Version: September 2026 (MicroCMS v4). Replace headend in the examples with the headend's host name or address.


1. What the headend gives you

A Kylone headend takes DVB, IP, SRT, HLS or file sources and publishes every channel in a fixed set of forms. You pick the ones your devices can play.

Delivery Who uses it Where to find the URL
Multicast SPTS (UDP, one service per group:port) Hospitality TVs and set-top boxes on the property LAN feeds/channels-mcast.m3u, and announced on SAP
HTTP-TS unicast (MPEG-TS over HTTP, one connection per viewer) Players that take a TS URL; test tools feeds/channels.m3u
HLS (H.264/AAC, one playlist per channel) HTML5 apps, Smart TV browsers, mobile feeds/channels-hls.m3u
RTSP and SRT Contribution, monitoring, third-party recorders Output URLs page in the web UI

Every channel keeps one stable identity: its channel number, its service name and its service id do not change when the headend switches the channel to a protection source (see section 7). Your line-up is built once.

2. Discover what is published

Start at the manifest. It says which lists exist, how many entries each has, when they were generated, and where the guide is.

GET https://headend/feeds/index.json
                                                    
{
  "generator": "Kylone MicroCMS",
  "base": "https://headend/feeds",
  "generated": "2026-09-10T15:02:11Z",
  "channels": [
    { "file": "channels.m3u",       "transport": "http-ts",       "entries": 38, "url": "https://headend/feeds/channels.m3u" },
    { "file": "channels-mcast.m3u", "transport": "udp-multicast", "entries": 38, "url": "https://headend/feeds/channels-mcast.m3u" },
    { "file": "channels-hls.m3u",   "transport": "hls",           "entries": 12, "url": "https://headend/feeds/channels-hls.m3u" }
  ],
  "logos":       { "path": "logo/", "entries": 13, "url": "https://headend/feeds/logo/" },
  "channel_map": { "file": "channels.json", "url": "https://headend/feeds/channels.json", "entries": 38 },
  "guide":       { "file": "guide.xml", "url": "https://headend/feeds/guide.xml", "gz": "https://headend/feeds/guide.xml.gz", "window_days": 7 }
}
                                                    

The feeds tree is rewritten atomically whenever the operator commits a line-up change, so a list is never half-written when you fetch it. Poll generated_epoch to detect changes; once a minute is plenty.

3. Channel lists (M3U)

Three lists, one per transport, same channels, same attributes. Each .m3u has an identical .m3u8 twin for players that insist on the extension.

#EXTM3U
#EXTINF:0 tvg-id="harbournews" tvg-name="Harbour News HD" tvg-chno="27" tvg-logo="https://headend/feeds/logo/harbournews.png" group-title="News",Harbour News HD
udp://@239.47.31.91:8027
                                                    
Attribute Meaning
tvg-id The channel's stable identifier. Same value in every list and in the guide. Build your database on it.
tvg-name Display name as the operator wrote it.
tvg-chno Channel number (the DVB logical channel number the set-top boxes use). Lists are in this order.
tvg-logo Plain PNG or JPEG, no authentication. Absent when the operator uploaded no logo.
group-title The operator's category (News, Sports, …), or TV / Radio when the channel has none.

The multicast list contains only channels that have a multicast output. Multicast channels are also announced with SAP/SDP on 224.2.127.254:9875 every few seconds (session name, group, port, and the category as a=cat), for devices that discover channels that way.

channels.json is the same line-up as a JSON array (id, name, number, kind), for applications that prefer not to parse M3U.

4. Programme guide (XMLTV)

GET https://headend/feeds/guide.xml
GET https://headend/feeds/guide.xml.gz
                                                    

Standard XMLTV. <channel id> equals the channel's tvg-id. The window is seven days, taken from the EIT the sources carry, refreshed every five minutes and immediately after a line-up commit. Titles and descriptions are UTF-8 with the source's language tag. Channels whose source carries no EIT simply have no <programme> entries.

5. Unicast URL forms

For the record, the URL forms the lists contain:

Transport Form
HTTP-TS http://headend:4750/<port>/0/base/stream.ts
HLS http://headend/hls/modn/list/<port>/playlist.m3u8
RTSP rtsp://headend/<stream> (when enabled)
SRT srt://headend:<port>/?streamid=<stream> (when enabled)

Use the lists rather than composing URLs: the port numbers are the headend's internal tiers and the operator may move a channel between them.

6. HLS details

Each channel with an HLS output has one master playlist. By default it carries one H.264/AAC variant; the operator can enable up to six encoding profiles on the output, and each becomes an EXT-X-STREAM-INF variant with its own BANDWIDTH and RESOLUTION, so a player on weak Wi-Fi or mobile switches to a lighter variant on its own. Audio and subtitle renditions are shared across variants. What your player sees:

  • Segments: 3 s by default, 10 in the live window (a 30 s DVR span); the operator can set 2 s and longer. Every segment starts with an IDR frame and carries PAT/PMT/SDT, and the master carries EXT-X-INDEPENDENT-SEGMENTS.
  • Codecs: CODECS="avc1.640029,mp4a.40.2" for the hospitality template (H.264 High, level 4, AAC-LC 48 kHz). BANDWIDTH is within 10 % of the measured rate.
  • Audio: all of a channel's audio tracks are muxed into the variant by default (native TV players); the operator can instead publish one rendition per language (EXT-X-MEDIA TYPE=AUDIO with LANGUAGE), or a mix of both.
  • Subtitles: WebVTT renditions (EXT-X-MEDIA TYPE=SUBTITLES) with LANGUAGE and NAME per track, when the operator enables them (section 8). Every WebVTT segment carries X-TIMESTAMP-MAP, so cues align with the video on every conformant player.
  • HTTP: segments are video/mp2t with Cache-Control: public, max-age=3600; playlists no-cache, max-age=1; Access-Control-Allow-Origin: *. Also served over HTTPS with the operator's certificate.

7. What a TV sees during a protection switch

Channels can be protected by a stand-in source (a backup feed, a scheduled filler, a no-signal card). When the headend switches:

  • the multicast group, port, service id, service name and channel number stay the same;
  • the HLS media sequence continues without an EXT-X-DISCONTINUITY, the encoder is not restarted, and audio/video alignment stays within 20 ms;
  • no re-scan, no re-tune, no player reload is needed.

Your application does not have to know a switch happened. If you want to show it, the headend's status feeds expose it; ask the operator.

8. Subtitles and captions

The headend can put text on a channel in several ways. On multicast the text travels as a teletext subtitle page (the form every hospitality TV and set-top box decodes); on HLS the same page becomes a WebVTT rendition.

Source of the text Multicast HLS
Broadcaster's teletext subtitles passed through WebVTT rendition per page (first page, a chosen page, or all pages)
Broadcaster's closed captions (EIA-608/708) passed through WebVTT rendition
Broadcaster's DVB bitmap subtitles passed through, or burnt into the picture burnt in, or read into text (next row)
DVB bitmap subtitles read into text (headend OCR) teletext page, e.g. 888 WebVTT rendition
Speech captions (headend speech recognition, native language and/or English) teletext page, e.g. 888 and 889 WebVTT rendition per page

The generated pages are announced in the service's PMT with their language, so a TV's subtitle menu lists them like any broadcaster page. Speech captions are assistive captions: they follow the dialogue with a short delay and are not a substitute for editorial subtitles.

9. Security and networking notes

  • HTTPS: available on the main virtual host with the operator's certificate; the built-in DNS can name the headend on the property network.
  • API keys: when the operator enables key mode, feed requests need the key the operator hands out; without it the feeds are open on the property network.
  • Multicast: IGMP snooping must be on in the access switches; the headend joins nothing, it only sends.
  • Time: the guide uses UTC with offsets; align devices with the property's NTP.

10. Integration checklist

  1. Fetch feeds/index.json; note generated_epoch.
  2. Load the list for your transport; key channels by tvg-id, order by tvg-chno.
  3. Fetch logos lazily from tvg-logo.
  4. Load guide.xml.gz; join on channel id = tvg-id.
  5. For HLS clients, play playlist.m3u8 as-is; let the player choose audio and subtitle renditions from the master.
  6. Poll the manifest for changes; reload lists when generated_epoch moves.
  7. Nothing else: protection switches are invisible to you.