OTT Navigator

OTC playlist format (JSON)

OTC (since 1.6.9.3) is the app’s own channel list format in JSON, an alternative to M3U: no quoting problems, and values may be base64-encoded. A marker like (since 1.7.1.3) is the first app version that reads a field.

Give the file an address ending in .otc or otc.json.

Structure

{
  "provider": { "epg": "http://example.com/epg.xml.gz", "archive_type": "flussonic", "archive_days": 3 },
  "categories": {
    "news": { "name": "News", "name:es": "Noticias", "type": "news" }
  },
  "channels": [
    { "category": "news", "name": "News One", "number": 1, "epg_id": "news1", "icon": "http://example.com/news1.png", "url": "http://example.com/news1/index.m3u8" }
  ]
}

General rules:

OTC playlist format provider properties

OTC playlist format category properties

The key of the category in categories is its id.

OTC playlist format channel properties

Required: name and url.

There is no channel-level adult flag in OTC: use an adult category.

Simple OTC playlist sample

sample_file_otc.json:

{
  "provider": {
    "epg": "http://example.com/epg.xml.gz",
    "archive_type": "shift",
    "archive_days": 3
  },
  "categories": {
    "main": {
      "name": "General channels",
      "name:es": "Generales"
    },
    "adult": {
      "name": "Adult",
      "adult": true
    }
  },
  "channels": [
    {
      "category": "main",
      "name": "Sample Channel 1",
      "name:es": "Canal de ejemplo 1",
      "number": 1,
      "epg_id": "sample1",
      "icon": "http://example.com/logo/sample1.png",
      "url": "http://example.com/live/sample1/index.m3u8"
    },
    {
      "category": "main",
      "name": "Sample Channel 2",
      "number": 2,
      "headers": { "Referer": "http://example.com/" },
      "drm_type": "clearkey",
      "drm_key": "0123456789abcdef0123456789abcdef:fedcba9876543210fedcba9876543210",
      "url": "http://example.com/live/sample2/manifest.mpd"
    }
  ]
}