TS IPTV

Danh sách phát JSON

TS IPTV đọc được hai dạng danh sách kênh JSON: JSON chung (dạng riêng của TS IPTV, rất linh hoạt) và dạng streams.json của iptv-org. Trang này mô tả cả hai.

TS IPTV không có sẵn kênh nào. Ứng dụng chỉ phát các danh sách phát do bạn thêm vào. Trang này chỉ mô tả định dạng, không giới thiệu danh sách nào.

Hai dạng JSON

JSON không có một chuẩn chung cho danh sách kênh; mỗi ứng dụng dùng một dạng riêng. TS IPTV đọc hai dạng:

TS IPTV tự nhận ra dạng: nếu tệp bắt đầu bằng [ và phần tử đầu tiên có channel, url, title mà không có name, đó là dạng iptv-org; mọi tệp khác bắt đầu bằng { hoặc [ là JSON chung.

Cú pháp

JSON chung

Các dạng cấp cao nhất được chấp nhận:

  1. một đối tượng { "name", "epgUrl", "channels": [ … ], "groups": [ … ] } (cũng chấp nhận channel và group);
  2. một đối tượng chỉ có channels, hoặc chỉ có groups;
  3. một mảng các đối tượng kênh: [ { … }, { … } ];
  4. một mảng các đối tượng nhóm.
Trường của danh sáchBắt buộcNghĩa
namekhôngTên danh sách phát.
epgUrlkhôngĐường dẫn lịch phát sóng XMLTV.
channels (hoặc channel)khôngMảng kênh không thuộc nhóm nào, hoặc tự khai báo nhóm.
groups (hoặc group)khôngMảng nhóm: { "id"?, "name", "channels": [ … ] }.
Trường của kênhBắt buộcTên khác được chấp nhậnNghĩa
idcóMã duy nhất, là chuỗi.
namecóTên hiển thị.
urlcó (hoặc remote_data.url)remote_data: { "url": "…" }Đường dẫn luồng.
logoUrlkhônglogo, image: { "url": "…" }Logo.
groupTitlekhônggroupTên nhóm (khi kênh không nằm trong một groups).
groupIdkhôngMã nhóm; tự tạo từ tên nếu thiếu.
epgIdkhôngepgMã kênh trong lịch XMLTV (giống tvg-id của M3U).
descriptionkhôngMô tả.
attributeskhôngTập cặp khoá–giá trị (chuỗi), cùng khoá với thuộc tính M3U. "user-agent" và "referrer" trở thành header HTTP.

Trường không có trong bảng sẽ bị bỏ qua.

Dạng streams.json của iptv-org

Một mảng; mỗi phần tử là một luồng:

TrườngKiểuNghĩa
channelchuỗi hoặc nullMã kênh, ví dụ ExampleNews.us.
feedchuỗi hoặc nullMã bản phát (feed), ví dụ HD. Mã luồng đầy đủ là channel@feed, ví dụ ExampleNews.us@HD.
titlechuỗiTên luồng.
urlchuỗiĐường dẫn luồng.
referrerchuỗi hoặc nullHeader Referer.
user_agentchuỗi hoặc nullHeader User-Agent.
qualitychuỗi hoặc nullChất lượng tối đa, ví dụ 720p.
labelsmảngNhãn như Geo-blocked, Not 24/7.

Ví dụ đầy đủ

JSON chung

Kênh đầu tiên là luồng thử nghiệm công khai của Mux (Big Buck Bunny © Blender Foundation, CC BY 3.0); các kênh khác dùng đường dẫn giả example.com.

{
  "name": "TS IPTV example playlist",
  "epgUrl": "https://tsiptv-8bdd6.web.app/examples/guide.xml",
  "channels": [
    {
      "id": "HlsTest.example",
      "name": "HLS Test Channel",
      "url": "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8",
      "group": "Test",
      "epgId": "HlsTest.example"
    },
    {
      "id": "ExampleRadio.us",
      "name": "Example Radio",
      "url": "https://cdn.example.com/radio/stream.aac",
      "group": "Radio"
    }
  ],
  "groups": [
    {
      "name": "News",
      "channels": [
        {
          "id": "ExampleNews.us",
          "name": "Example News",
          "url": "https://cdn.example.com/news/index.m3u8",
          "logo": "https://example.com/logos/news.png",
          "epgId": "ExampleNews.us",
          "attributes": {
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
            "referrer": "https://example.com/"
          }
        }
      ]
    }
  ]
}
  1. name và epgUrl: tên danh sách và lịch phát sóng ví dụ.
  2. channels: hai kênh tự khai báo nhóm bằng group (“Test” và “Radio”).
  3. groups: nhóm “News” chứa một kênh có logo, epgId và hai header trong attributes.

Dạng ngắn nhất là một mảng: [{"id":"a","name":"A","url":"https://cdn.example.com/a.m3u8"}].

Dạng iptv-org

[
  {
    "channel": "HlsTest.example",
    "feed": null,
    "title": "HLS Test Channel",
    "url": "https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8",
    "referrer": null,
    "user_agent": null,
    "quality": null,
    "labels": []
  },
  {
    "channel": "ExampleNews.us",
    "feed": "HD",
    "title": "Example News HD",
    "url": "https://cdn.example.com/news/index.m3u8",
    "referrer": "https://example.com/",
    "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
    "quality": "1080p",
    "labels": ["Not 24/7"]
  }
]

Phần tử thứ nhất là luồng thử nghiệm của Mux, không có header. Phần tử thứ hai là một đường dẫn giả, có feed, referrer và user_agent; mã luồng của nó là ExampleNews.us@HD.

Tự viết một tệp

  1. Mở một trình soạn thảo văn bản thuần. VS Code tốt nhất vì nó báo lỗi cú pháp JSON ngay khi gõ.
  2. Chép một trong hai ví dụ ở trên và sửa các kênh.
  3. Dùng nháy kép thẳng " cho mọi khoá và chuỗi; id luôn là chuỗi ("7", không phải 7).
  4. Không để dấu phẩy sau phần tử cuối cùng và không viết chú thích //.
  5. Lưu với mã hoá UTF-8 (không BOM), đuôi .json.

Cần header cho từng kênh, DRM hay thông tin xem lại? Hãy dùng M3U hoặc TS IPTV Source. Cần phim lẻ, phim bộ có mùa và tập, nhiều luồng cho mỗi mục, hoặc bố cục trang chủ và màu sắc riêng? Hãy dùng TS IPTV Source, cũng là một định dạng JSON.

Đưa tệp lên mạng

Giống như M3U: mọi đường dẫn HTTPS trả về chính nội dung tệp đều dùng được (https://raw.githubusercontent.com/<user>/<repo>/<branch>/playlist.json, https://<user>.github.io/<repo>/playlist.json, https://www.example.com/playlist.json, Dropbox với dl=1). Trang hiển thị tệp trên GitHub (github.com/…/blob/…) là trang web, không phải tệp. Máy chủ nên gửi Content-Type: application/json, nhưng TS IPTV tự nhận dạng nội dung. HTTPS được khuyến nghị; TS IPTV không cần CORS. Chi tiết: đưa tệp M3U lên mạng.

Thêm vào TS IPTV

  1. Mở Thêm nguồn IPTV (nút Thêm IPTV).
  2. Nhập Tên nguồn, dán đường dẫn vào Liên kết nguồn rồi chọn Thêm IPTV; hoặc chọn Nhập từ tệp và chọn tệp .json.
  3. TS IPTV nhận ra dạng JSON và cho biết số kênh tìm thấy. Nếu tệp có epgUrl, lịch phát sóng được tải cùng lúc.

Lỗi thường gặp

LỗiBiểu hiệnCách sửa
Dấu phẩy sau phần tử cuối ([{…},])Không đọc được tệpXoá dấu phẩy thừa.
Chú thích // hoặc /* */Không đọc được tệpJSON không cho phép chú thích; hãy xoá chúng.
id là số ("id": 7)TS IPTV vẫn đọc được, nhưng ứng dụng khác có thể từ chốiViết thành chuỗi: "id": "7".
Nháy cong “ ”Không đọc được tệpGõ lại thành nháy thẳng ".
Thiếu name hoặc url ở một kênhKhông đọc được tệp, hoặc kênh không phátMỗi kênh cần id, name và url.
Đường dẫn là trang GitHub thay vì tệp gốc“Đường dẫn này mở một trang web”Dùng đường dẫn Raw.
Tệp iptv-org có thêm trường nameĐược đọc như JSON chung; vì JSON chung bắt buộc có id, cả tệp không đọc đượcGiữ đúng dạng iptv-org, hoặc chuyển hẳn sang JSON chung.

TS IPTV hỗ trợ những gì

Tính năngTrạng thái
Bốn dạng cấp cao nhất của JSON chung, kể cả mảngHỗ trợ trên mọi nền tảng
Nhóm lồng nhau, remote_data.url, image.urlHỗ trợ
Header từ attributes (JSON chung) và referrer/user_agent (iptv-org)Android iOS: cố gắng tối đa Máy tính: chỉ User-Agent và Referer
epgUrlHỗ trợ
labels, quality của iptv-orgĐược chấp nhận, chưa hiển thị
DRM, xem lạiKhông có trong JSON Dùng M3U.