Định dạng Kodi trong TS IPTV
Nhiều danh sách phát IPTV được viết cho Kodi. TS IPTV đọc được định dạng của chúng: các thuộc tính M3U, #KODIPROP, header, DRM, thông tin xem lại và tệp .strm. TS IPTV không chạy được tiện ích (add-on) của Kodi.
TS IPTV không có sẵn kênh nào và không giới thiệu tiện ích, kho tiện ích hay danh sách phát nào của Kodi. Mọi ví dụ dùng tên miền giả example.com, một luồng thử nghiệm công khai, hoặc tệp ví dụ của chính TS IPTV trên tsiptv-8bdd6.web.app.
Kodi và PVR IPTV Simple
Kodi là trình phát media mã nguồn mở. Tiện ích chính thức PVR IPTV Simple Client của Kodi đọc danh sách M3U và lịch XMLTV; tài liệu README của nó là bản mô tả thuộc tính M3U được trích dẫn nhiều nhất. Các thuộc tính DRM và header đến từ inputstream.adaptive, bộ phát luồng thích ứng của Kodi. TS IPTV dùng lại các định dạng dữ liệu đó, vì chúng chỉ là văn bản; nó không dùng lại mã chương trình của Kodi.
TS IPTV hiểu những gì
Phần cơ bản (thuộc tính #EXTINF, nhiều nhóm với ;, #EXTGRP, #EXTVLCOPT, header sau dấu |, x-tvg-url) có trong hướng dẫn M3U. Phần dưới đây là những gì riêng của Kodi.
#KODIPROP
Mỗi dòng #KODIPROP:khoá=giá trị nằm giữa #EXTINF và đường dẫn, và chỉ áp dụng cho kênh đó. Khoá không phân biệt hoa thường; giá trị kéo dài tới hết dòng (được phép là JSON).
| Khoá | TS IPTV làm gì |
|---|---|
inputstream, inputstreamaddon, inputstreamclass | Bỏ qua: chúng chỉ chọn bộ giải mã bên trong Kodi. |
mimetype | Gợi ý loại luồng: application/dash+xml (DASH), application/vnd.apple.mpegurl hoặc application/x-mpegurl (HLS), application/vnd.ms-sstr+xml (Smooth Streaming), video/mp2t (MPEG-TS). Hữu ích khi đường dẫn không có đuôi .mpd/.m3u8. |
inputstream.adaptive.manifest_type | mpd, hls, ism: gợi ý loại luồng như trên. |
inputstream.adaptive.common_headers, manifest_headers, stream_headers | Header dạng tên=giá-trị-mã-hoá&tên=…. Cả ba được gộp và gửi kèm mọi yêu cầu của kênh. |
inputstream.adaptive.license_type, license_key, drm_legacy, drm | Cấu hình DRM (xem bên dưới). |
| khoá khác | Được lưu lại, không có tác dụng. |
DRM
| Hệ DRM | Giá trị trong danh sách | Android | iOS | Máy tính |
|---|---|---|---|---|
| Widevine | com.widevine.alpha (hoặc widevine) | Hỗ trợ | Không hỗ trợ | Không hỗ trợ |
| PlayReady | com.microsoft.playready (hoặc playready) | Hỗ trợ | Không hỗ trợ | Không hỗ trợ |
| ClearKey | org.w3.clearkey (hoặc clearkey) | Chỉ luồng DASH | Không hỗ trợ | Không hỗ trợ |
| WisePlay | com.huawei.wiseplay | Không hỗ trợ | Không hỗ trợ | Không hỗ trợ |
Trên iOS và máy tính, kênh có DRM hiện thông báo “Thiết bị này không hỗ trợ DRM” trước khi tải luồng, và bạn vẫn chuyển sang kênh khác bình thường. Luồng HLS mã hoá AES-128 thông thường không cần khai báo DRM và phát được trên mọi nền tảng.
Kodi có ba cách viết cấu hình DRM. Khi một kênh có nhiều cách, cách mới nhất được dùng: drm, rồi drm_legacy, rồi license_type + license_key.
1. license_type + license_key (cách cũ). license_key có bốn trường nối bằng |: URL|header|thân-yêu-cầu|phản-hồi.
#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
#KODIPROP:inputstream.adaptive.license_key=https://license.example.com/widevine|Content-Type=application%2Foctet-stream|R{SSM}|R
- Trường 1: đường dẫn máy chủ giấy phép.
- Trường 2: header
tên=giá-trị&…, giá trị mã hoá URL. Để trống nếu không có. - Trường 3 chỉ được để trống hoặc là
R{SSM}; trường 4 chỉ được để trống hoặc làR. Các giá trị khác (b{SSM},B{SSM}, phản hồiJ…,{HASH}trong đường dẫn) cần xử lý đặc biệt mà TS IPTV chưa có: kênh vẫn được nhập nhưng khi phát sẽ báo “Cấu hình DRM của kênh này chưa được hỗ trợ”. - Với
license_type=clearkey,license_keycó thể là cặpkid:key, một JWKS{"keys":[…]}, một URIdata:hoặc một đường dẫn.
2. drm_legacy: hệ-DRM|đường-dẫn-hoặc-khoá|header, từ 1 tới 3 trường.
#KODIPROP:inputstream.adaptive.drm_legacy=com.widevine.alpha|https://license.example.com/widevine|User-Agent=Mozilla%2F5.0
#KODIPROP:inputstream.adaptive.drm_legacy=org.w3.clearkey|000102030405060708090a0b0c0d0e0f:00112233445566778899aabbccddeeff
3. drm (JSON). TS IPTV dùng hệ DRM đầu tiên được hỗ trợ, nếu cấu hình của nó chỉ có license.server_url, license.req_headers và license.keyids.
#KODIPROP:inputstream.adaptive.drm={"com.widevine.alpha":{"license":{"server_url":"https://license.example.com/widevine","req_headers":"X-Example=1"}}}
Khoá ClearKey: KID và key là 32 ký tự hex; dạng UUID có dấu gạch (00010203-0405-…) được chấp nhận, và giá trị không phải hex được hiểu là base64 dài 16 byte. TS IPTV không cung cấp khoá hay công cụ lấy khoá: DRM chỉ để phát nội dung bạn có quyền xem, ví dụ danh sách của nhà mạng.
Xem lại (catch-up)
TS IPTV đọc và lưu mọi thông tin xem lại dưới đây. Tính năng phát lại chương trình đã phát sẽ có trong một bản cập nhật sau; hiện chưa có nút hay biểu tượng xem lại.
catchup= | Đường dẫn xem lại được tạo thế nào |
|---|---|
default | catchup-source là toàn bộ đường dẫn. |
append | Đường dẫn kênh + catchup-source. |
shift (hoặc timeshift="N" kiểu cũ) | Đường dẫn kênh + ?utc={utc}&lutc={lutc} (hoặc &utc=… nếu đường dẫn đã có ?). |
flussonic, flussonic-hls, flussonic-ts, fs | Theo quy ước đường dẫn của máy chủ Flussonic. |
xc | Theo quy ước /timeshift/… của API kiểu Xtream Codes. |
vod | Chỉ phát catchup-source. |
Các thuộc tính đi kèm: catchup-days (hoặc tvg-rec) là số ngày lưu trữ; catchup-correction là số giờ cộng thêm. Các chỗ trống trong catchup-source: {utc} (giờ bắt đầu, giây Unix), {utcend}, {lutc} (giờ hiện tại), {Y} {m} {d} {H} {M} {S} (theo giờ địa phương của thiết bị, như Kodi), {duration}, {duration:60} (phút), {offset:X}, {catchup-id} và dạng định dạng {utc:YmdHM}.
Tệp .strm
Tệp .strm là một tệp văn bản chứa đúng một đường dẫn luồng, có thể có vài dòng #KODIPROP hoặc #EXTVLCOPT phía trước, và có thể có header sau dấu |. TS IPTV nhập nó thành một danh sách phát có một kênh, đặt tên theo tên tệp (bỏ đuôi). Tệp .strm trỏ tới plugin:// sẽ bị từ chối.
TS IPTV không chạy được những gì
- Tiện ích video của Kodi và mọi đường dẫn
plugin://…; - kho tiện ích (repository) và tệp
addons.xml; - cài đặt từ tệp zip;
- lấy luồng từ trang web bằng
#WEBPROPhoặc đường dẫn bắt đầu bằng@.
Lý do: tiện ích Kodi là chương trình Python chỉ chạy được bên trong Kodi, dựa vào các thư viện riêng của Kodi; chúng không phải dữ liệu mà một trình phát khác có thể đọc. Chạy mã tải về từ nguồn bất kỳ cũng là rủi ro bảo mật, và quy định của các kho ứng dụng không cho phép. Khi nhập, các mục như vậy bị bỏ qua và được liệt kê trong phần Chi tiết; phần còn lại của danh sách vẫn được nhập.
Ví dụ đầy đủ
Tệp M3U ví dụ của TS IPTV có hai kênh dùng tính năng kiểu Kodi: Example Sports gửi header bằng hậu tố |, và Example Protected khai báo DRM Widevine bằng #KODIPROP. Đường dẫn giấy phép là đường dẫn giả, nên kênh đó chỉ để minh hoạ.
#EXTM3U x-tvg-url="https://tsiptv-8bdd6.web.app/examples/guide.xml"
#EXTINF:-1 tvg-id="HlsTest.example" tvg-chno="1" group-title="Test",HLS Test Channel
https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8
#EXTINF:-1 tvg-id="ExampleNews.us" tvg-chno="2" tvg-logo="https://example.com/logos/news.png" group-title="News;HD",Example News
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)
#EXTVLCOPT:http-referrer=https://example.com/
https://cdn.example.com/news/index.m3u8
#EXTINF:-1 tvg-id="ExampleSports.us" tvg-chno="3" group-title="Sports",Example Sports
https://cdn.example.com/sports/index.m3u8|Referer=https%3A%2F%2Fexample.com%2F
#EXTINF:-1 tvg-id="ExampleRadio.us" tvg-chno="4" radio="true" group-title="Radio",Example Radio
https://cdn.example.com/radio/stream.aac
#EXTINF:-1 tvg-id="ExampleProtected.us" tvg-chno="5" group-title="DRM demo",Example Protected
#KODIPROP:inputstream.adaptive.license_type=com.widevine.alpha
#KODIPROP:inputstream.adaptive.license_key=https://license.example.com/widevine|Content-Type=application%2Foctet-stream|R{SSM}|R
#KODIPROP:mimetype=application/dash+xml
https://cdn.example.com/protected/manifest.mpd
#EXTINF:-1 tvg-id="ExampleArchive.us" tvg-chno="6" catchup="shift" catchup-days="3" group-title="Archive",Example Archive
https://cdn.example.com/archive/index.m3u8
license_type=com.widevine.alpha: hệ DRM là Widevine.license_key=…|Content-Type=application%2Foctet-stream|R{SSM}|R: gửi yêu cầu giấy phép tớilicense.example.comvới headerContent-Type, thân và phản hồi dạng thô.mimetype=application/dash+xml: luồng là DASH.catchup="shift" catchup-days="3"ở kênh cuối: thông tin xem lại, được lưu.
Và một tệp .strm trỏ tới luồng thử nghiệm công khai của Mux (Big Buck Bunny © Blender Foundation, CC BY 3.0):
#KODIPROP:mimetype=application/vnd.apple.mpegurl
https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8
Tự viết
- Viết danh sách M3U như trong hướng dẫn M3U.
- Thêm các dòng
#KODIPROPngay sau#EXTINFcủa kênh cần, trước dòng đường dẫn, mỗi thuộc tính một dòng. - Mã hoá URL giá trị header (
/→%2F,:→%3A). - Với
.strm: tạo một tệp văn bản chỉ có đường dẫn luồng (và các dòng#KODIPROPnếu cần), lưu UTF-8 với đuôi.strm. Tên tệp sẽ thành tên kênh.
Đưa tệp lên mạng
Danh sách M3U kiểu Kodi được lưu trữ như mọi tệp M3U: xem đưa tệp M3U lên mạng. Tệp .strm thường được nhập thẳng từ máy bằng Nhập từ tệp; nếu đưa lên mạng, máy chủ có thể gửi nó dưới dạng text/plain.
Chuyển từ Kodi sang TS IPTV
- Trong Kodi, mở cài đặt của PVR IPTV Simple Client. Ở phần chung, chép đường dẫn danh sách M3U (hoặc ghi lại đường dẫn tệp trên máy). Ở phần EPG, chép đường dẫn XMLTV.
- Trong TS IPTV, mở Thêm nguồn IPTV, dán đường dẫn danh sách vào Liên kết nguồn và chọn Thêm IPTV; hoặc chọn Nhập từ tệp cho tệp trên máy và tệp
.strm. - Nếu danh sách chưa có
x-tvg-url, thêmx-tvg-url="<đường dẫn XMLTV>"vào dòng#EXTM3U(xem hướng dẫn XMLTV). - Xem thông báo nhập: nếu có mục cần tiện ích Kodi hay lấy luồng từ trang web, chúng được đếm trong phần Chi tiết.
Lỗi thường gặp
| Trường hợp | Biểu hiện | Cách xử lý |
|---|---|---|
Header gắn bằng | vào đường dẫn manifest | Không lỗi: TS IPTV chấp nhận | Kodi khuyên dùng *_headers; TS IPTV đọc được cả hai cách. |
license_key có thân hoặc phản hồi đặc biệt (b{SSM}, J…, {HASH}) | “Cấu hình DRM của kênh này chưa được hỗ trợ” | Hỏi nhà cung cấp một cấu hình giấy phép tiêu chuẩn (R{SSM}|R). |
| ClearKey trên luồng HLS | Không phát, hiện thông báo lỗi DRM | ClearKey chỉ chạy với luồng DASH trên Android. |
WisePlay (com.huawei.wiseplay) | “Cấu hình DRM của kênh này chưa được hỗ trợ” | Không hỗ trợ. |
| Kênh DRM trên iPhone, iPad hoặc máy tính | “Thiết bị này không hỗ trợ DRM” | Xem kênh đó trên Android. |
| Máy chủ giấy phép từ chối | “Máy chủ giấy phép DRM từ chối thiết bị này” | Kiểm tra gói thuê bao của bạn còn hiệu lực. |
Mục plugin://… | Bị bỏ qua, ghi trong phần Chi tiết | Cần tiện ích Kodi; không chạy được trong TS IPTV. |
TS IPTV hỗ trợ những gì
| Tính năng | Android | iOS | Máy tính |
|---|---|---|---|
| Thuộc tính M3U của PVR IPTV Simple | Hỗ trợ | Hỗ trợ | Hỗ trợ |
mimetype, manifest_type | Hỗ trợ | Hỗ trợ | Hỗ trợ |
Header (*_headers, #EXTVLCOPT, |) | Mọi header | Cố gắng tối đa | Chỉ User-Agent và Referer |
Luồng DASH .mpd không có DRM | Hỗ trợ | Hỗ trợ qua trình phát VLC tích hợp; chỉ gửi header User-Agent và Referer | Hỗ trợ |
| Widevine, PlayReady | Chỉ Android | Không hỗ trợ | Không hỗ trợ |
| ClearKey | Chỉ DASH | Không hỗ trợ | Không hỗ trợ |
| Xem lại (catch-up) | Được lưu, phát lại sẽ có sau | ||
Tệp .strm | Hỗ trợ | Hỗ trợ | Hỗ trợ |
Tiện ích Kodi, plugin://, kho tiện ích, #WEBPROP | Không hỗ trợ | ||