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:
- JSON chung: một đối tượng hoặc mảng chứa các kênh (và có thể có nhóm). Tên trường có vài biến thể được chấp nhận, nên nhiều tệp JSON tự tạo đọc được ngay.
- Dạng
streams.jsoncủa iptv-org: một mảng luồng, mỗi phần tử cóchannel,title,urlvà header. Dự án iptv-org dùng dạng này cho dữ liệu công khai của họ.
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:
- một đối tượng
{ "name", "epgUrl", "channels": [ … ], "groups": [ … ] }(cũng chấp nhậnchannelvàgroup); - một đối tượng chỉ có
channels, hoặc chỉ cógroups; - một mảng các đối tượng kênh:
[ { … }, { … } ]; - một mảng các đối tượng nhóm.
| Trường của danh sách | Bắt buộc | Nghĩa |
|---|---|---|
name | không | Tên danh sách phát. |
epgUrl | không | Đường dẫn lịch phát sóng XMLTV. |
channels (hoặc channel) | không | Mảng kênh không thuộc nhóm nào, hoặc tự khai báo nhóm. |
groups (hoặc group) | không | Mảng nhóm: { "id"?, "name", "channels": [ … ] }. |
| Trường của kênh | Bắt buộc | Tên khác được chấp nhận | Nghĩa |
|---|---|---|---|
id | có | Mã duy nhất, là chuỗi. | |
name | có | Tên hiển thị. | |
url | có (hoặc remote_data.url) | remote_data: { "url": "…" } | Đường dẫn luồng. |
logoUrl | không | logo, image: { "url": "…" } | Logo. |
groupTitle | không | group | Tên nhóm (khi kênh không nằm trong một groups). |
groupId | không | Mã nhóm; tự tạo từ tên nếu thiếu. | |
epgId | không | epg | Mã kênh trong lịch XMLTV (giống tvg-id của M3U). |
description | không | Mô tả. | |
attributes | không | Tậ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ường | Kiểu | Nghĩa |
|---|---|---|
channel | chuỗi hoặc null | Mã kênh, ví dụ ExampleNews.us. |
feed | chuỗi hoặc null | Mã bản phát (feed), ví dụ HD. Mã luồng đầy đủ là channel@feed, ví dụ ExampleNews.us@HD. |
title | chuỗi | Tên luồng. |
url | chuỗi | Đường dẫn luồng. |
referrer | chuỗi hoặc null | Header Referer. |
user_agent | chuỗi hoặc null | Header User-Agent. |
quality | chuỗi hoặc null | Chất lượng tối đa, ví dụ 720p. |
labels | mảng | Nhã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/"
}
}
]
}
]
}
namevàepgUrl: tên danh sách và lịch phát sóng ví dụ.channels: hai kênh tự khai báo nhóm bằnggroup(“Test” và “Radio”).groups: nhóm “News” chứa một kênh có logo,epgIdvà hai header trongattributes.
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
- 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õ.
- Chép một trong hai ví dụ ở trên và sửa các kênh.
- Dùng nháy kép thẳng
"cho mọi khoá và chuỗi;idluôn là chuỗi ("7", không phải7). - Không để dấu phẩy sau phần tử cuối cùng và không viết chú thích
//. - 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
- Mở Thêm nguồn IPTV (nút Thêm IPTV).
- 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. - 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ỗi | Biểu hiện | Cách sửa |
|---|---|---|
Dấu phẩy sau phần tử cuối ([{…},]) | Không đọc được tệp | Xoá dấu phẩy thừa. |
Chú thích // hoặc /* */ | Không đọc được tệp | JSON 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ối | Viết thành chuỗi: "id": "7". |
Nháy cong “ ” | Không đọc được tệp | Gõ lại thành nháy thẳng ". |
Thiếu name hoặc url ở một kênh | Không đọc được tệp, hoặc kênh không phát | Mỗ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 được | Giữ đúng dạng iptv-org, hoặc chuyển hẳn sang JSON chung. |
TS IPTV hỗ trợ những gì
| Tính năng | Trạng thái |
|---|---|
| Bốn dạng cấp cao nhất của JSON chung, kể cả mảng | Hỗ trợ trên mọi nền tảng |
Nhóm lồng nhau, remote_data.url, image.url | Hỗ 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 |
epgUrl | Hỗ trợ |
labels, quality của iptv-org | Được chấp nhận, chưa hiển thị |
| DRM, xem lại | Không có trong JSON Dùng M3U. |