×

📺 IPTV

B2C · Xtream · Reseller

IPTV Quản lý người dùng

Tầng lưu trữ lưu trữ

Hệ thống lưu trữ ba tầng cho hơn 500 khách hàng đồng thời.

Bộ mã hóa

Bộ đệm ghi

Cửa sổ nóng 2h (NVMe hoặc tmpfs)

→ gương (liên tục)

ổ cứng RAID 5

50 TB, lưu giữ 14 ngày

→ tìm nạp trước theo yêu cầu

Bộ đệm phát lại

Bộ đệm ấm 1 TB, hơn 500 khách hàng

Khách hàng

Gương, không di chuyển

Các phân đoạn cũ hơn mirror_min_age_phút được SAO CHÉP sang RAID liên tục.

cấp

Mục đích

Cài đặt

Bộ đệm ghi

Nhận các phân đoạn 24/7, giữ cửa sổ nóng 2 giờ để phát lại nhanh gần đây, bảo vệ RAID khỏi IO ngẫu nhiên.

device_path (chặn thiết bị hoặc 'tmpfs'), tmpfs_size_pct (10-50% MemACó sẵn khi tmpfs), mirror_min_age_phút, evict_age_phút, tuôn ra_threshold_percent (bắt buộc kích hoạt xả)

Lưu trữ RAID HDD

Bộ nhớ dài hạn để lưu giữ đầy đủ (mặc định là 14 ngày).

duy trì_ngày, raid_device, nginx_location, min_free_percent

Bộ nhớ đệm phát lại (tùy chọn)

Bộ nhớ đệm bên đọc dành cho các tệp phổ biến cũ hơn 2 giờ (ví dụ: bản cập nhật EPG).

prefetch_hours, max_sessions, eviction_policy (session/lru/fifo)

tính toán công suất

ghi trực tiếp × 2h = write_buffer kích thước cửa sổ nóng.

Số lần đọc (tra cứu nhận biết theo cấp độ)

Stream.dvr_file_path/2 thăm dò write_buffer → play_cache → lưu trữ theo thứ tự.

Đĩa ảo tmpfs (dev/test)

Mỗi tầng có thể sử dụng đĩa ảo tmpfs được hỗ trợ bởi RAM thay vì thiết bị khối vật lý.

Kích thước tính bằng % RAM trống

Phân bổ được chỉ định dưới dạng phần trăm của MemCó sẵn (từ /proc/meminfo) - bước 10, giá trị hợp lệ 10/20/30/40/50.

Bảo vệ an toàn OOM

Nếu mục tiêu được tính toán vượt quá 60% MemCó sẵn hiện tại, quá trình gắn kết sẽ bị từ chối và cấp vẫn ngoại tuyến (Stream.archive_path sẽ chuyển sang cấp lành mạnh tiếp theo).

Khởi động lại kiên trì

tmpfs tồn tại trong RAM - mọi nội dung bộ đệm đang hoạt động đều bị MẤT khi máy chủ khởi động lại.

Khi nào nên sử dụng tmpfs

Sử dụng tmpfs cho write_buffer khi: (a) hộp phát triển/kiểm tra không có NVMe dự phòng nhưng bạn vẫn muốn chạy quy trình DVR đầy đủ để kiểm tra tích hợp, (b) nhà điều hành muốn xác thực hành vi sao chép + lưu trữ mà không mua trả trước NVMe, (c) thử nghiệm tạm thời trong đó có thể chấp nhận được tình trạng mất dữ liệu khi khởi động lại.

Xả nhanh hơn cho tmpfs

Khi cấp ghi là tmpfs, StorageTierFlush sử dụng các giá trị mặc định chặt chẽ hơn — mirror_min_age 2 phút, evict_age 15 phút (so với 5 phút / 120 phút đối với NVMe vật lý).

Cấp độ tự động và an toàn

Các bậc được định cấu hình một lần thông qua Cấu hình > Lưu trữ > Bậc lưu trữ và được cung cấp tự động — không cần chỉnh sửa mkfs/mount/fstab thủ công trên máy chủ.

Hạt giống khởi động mặc định

Trong lần khởi động đầu tiên (không có tầng ghi trong DB), hệ thống sẽ tự động tạo tầng ghi được hỗ trợ bởi tmpfs với phân bổ 30% MemAvailable, điểm gắn kết /mnt/nvme_write.

Sức khỏe & chuyển đổi dự phòng

Stream.archive_path/1 trả về cấp 'khỏe mạnh' đầu tiên - write_buffer nếu được gắn+có thể ghi+free_pct trên mức sàn an toàn, nếu không sẽ quay trở lại kho lưu trữ (chế độ xuống cấp).

Thay đổi kích thước trực tiếp

Việc thay đổi tmpfs_size_pct trong giao diện người dùng sẽ kích hoạt umount + remount với kích thước mới khi Lưu.

URL cơ sở - Trình phát OSTV

Trường gói

API gói

Chính sách mật khẩu

API đại lý

Cài đặt

Trường người dùng

Quản lý người dùng

IPTV Quản lý người dùng

URL cơ sở - Trình phát OSTV

Ứng dụng OSTV Player cho phép người dùng thay đổi URL cơ sở của máy chủ (địa chỉ API).

Lý do: Việc thay đổi URL cơ sở chỉ dành cho quản trị viên/người dùng root để họ có thể chuyển đổi giữa các máy chủ (ví dụ: sản xuất và thử nghiệm).

Trường người dùng

API gói

Trả về danh sách tất cả các gói đang hoạt động kèm theo giá và thời hạn thanh toán.

Danh sách người dùng quản lý (đại lý/nhà cung cấp).

Trả về số dư tín dụng cho một người dùng quản lý cụ thể.

Trường gói

API đại lý

API dành cho người bán lại/nhà cung cấp.

Chính sách mật khẩu

Cần phải có mật khẩu khi tạo thuê bao.

Tối thiểu 8 ký tự

Ít nhất 1 chữ in hoa (A-Z)

Ít nhất 1 ký tự đặc biệt (!@#$%^&* v.v.)

Áp dụng cho giao diện người dùng và API.

Cài đặt

Cấp độ tự động và an toàn

Tự động phát hiện dung lượng + hệ thống tệp: khi chọn NVMe miễn phí từ danh sách thả xuống, dung lượng (GB) được đọc từ lsblk -bn -o SIZE và FS hiện tại từ blkid (với dự phòng toàn bộ đĩa).

Cơ chế xả cấp - Gương liên tục

StorageTierFlush GenServer chạy 60 giây một lần.

Tại sao nhân bản liên tục đập "đợi 60 phút, di chuyển hàng loạt": (1) Tải RAID đồng đều — không có đợt bùng phát 5 GB ở ranh giới giờ, chỉ nhỏ giọt các phân đoạn 7 MB;

Đang thực hiện an toàn cho phân đoạn: máy nhân bản chỉ chọn các tệp cũ hơn MIRROR_MIN_AGE_MINUTES thông qua find -mmin +5.

Điều chỉnh mỗi lần triển khai (.env)

500–1000

Quy tắc định cỡ:

Lịch xem trước DVR

Tab Xem trước DVR hiển thị lịch do máy chủ hiển thị, chỉ đánh dấu những ngày mà bản ghi tồn tại trên đĩa.

Có thể nhấp vào các ngày có bản ghi (màu xanh lam) — nhấp vào sẽ điền trước dữ liệu nhập ngày giờ vào ngày đó lúc 00:00;

Được triển khai trong Stream.available_dvr_days/1 thông qua find -mindeep 4 -maxdeep 4 -type d trên mỗi giá treo cấp;

API trình phát B2C

Tổng quan

API B2C (Doanh nghiệp với người tiêu dùng) cung cấp khả năng xác thực và quyền truy cập luồng cho các ứng dụng trình phát của người dùng cuối.

Xác thực

Xác thực người dùng và nhận auth_token cho các lệnh gọi API tiếp theo.

Phương pháp

Điểm cuối

Nội dung yêu cầu

tham số

Kiểu

Yêu cầu

Sự miêu tả

Đúng

Tên đăng nhập của người dùng

Mật khẩu người dùng

Yêu cầu mẫu

Trường phản hồi

Phản hồi thành công (200)

Mã thông báo xác thực được mã hóa cho các lệnh gọi API tiếp theo

Ngày/giờ hết hạn mã thông báo ở định dạng ISO 8601

Ví dụ về phản hồi thành công

Phản hồi lỗi (403)

Thông báo mô tả lỗi

Mã trạng thái HTTP

Phản hồi lỗi ví dụ

Thông tin người dùng

Truy xuất thông tin về người dùng được xác thực bằng mã thông báo xác thực.

Trường phản hồi

Tên người dùng của người dùng được xác thực

Tin nhắn máy chủ (trống nếu không có)

Trạng thái xác thực (1 = đã xác thực)

Trạng thái tài khoản: Đang hoạt động, Bị cấm, Bị vô hiệu hóa, Đang dùng thử

Ngày hết hạn tài khoản (null nếu không giới hạn)

Số lượng kết nối hiện hoạt

Ngày tạo tài khoản ở định dạng ISO 8601

Kết nối đồng thời tối đa được phép

Danh sách các định dạng luồng đầu ra được phép

Tên nhà cung cấp của chủ sở hữu/người bán lại của người dùng (null nếu không có)

URL của hình ảnh logo nhà cung cấp (null nếu không có)

URL của hình ảnh logo thu gọn của nhà cung cấp 208x208 (null nếu không có)

Thời gian máy chủ hiện tại ở định dạng ISO 8601

Yêu cầu mẫu

Thể loại

Truy xuất các danh mục được lọc theo loại.

Loại danh mục: trực tiếp, vod hoặc loạt phim

ID danh mục dưới dạng chuỗi

Tên hiển thị danh mục

ID danh mục chính (0 nếu là root)

Hàm băm MD5 của nội dung để vô hiệu hóa bộ đệm

Yêu cầu mẫu

Chi tiết VOD

Truy xuất thông tin chi tiết cho một mục VOD cụ thể, bao gồm siêu dữ liệu và liên kết luồng.

ID luồng VOD (UUID)

Trường đối tượng thông tin

URL ảnh bìa

Mã định danh TMDB

URL hình ảnh phông nền

Chuỗi thể loại

Cốt truyện/mô tả

diễn viên

Giá trị xếp hạng (0-10)

Tên giám đốc

Ngày phát hành

Thời lượng tính bằng giây

Thời lượng dưới dạng chuỗi được định dạng

Mảng ID danh mục

1 nếu nội dung người lớn, 0 nếu không

Trường đối tượng VOD

ID luồng VOD

Tiêu đề VOD

Ngày thêm (ISO 8601)

URL liên kết luồng

Siêu dữ liệu codec video/âm thanh

Chi tiết loạt bài

Truy xuất thông tin loạt phim với danh sách đầy đủ các phần và tập, được nhóm theo số phần.

ID sê-ri (UUID)

Trường mảng mùa

Số mùa

Tên hiển thị phần

Số tập trong mùa

Ngày phát sóng của mùa

Tổng quan / mô tả phần

URL ảnh bìa phần

Đối tượng tập

Bản đồ được khóa theo chuỗi số mùa.

Trường đối tượng tập

ID tập

ID tập TMDB

Số tập trong mùa

Tiêu đề tập

Ngày thêm (ISO 8601)

Số mùa

Đối tượng thông tin tập (cấu trúc giống như thông tin VOD)

URL liên kết luồng

Siêu dữ liệu codec video/âm thanh

Ghi chú

Mã thông báo hết hạn tùy thuộc vào vai trò của người dùng: quản trị viên = 365 ngày, khác = 30 ngày|Tài khoản bị vô hiệu hóa không thể xác thực (trả về 403)|Mỗi lần đăng nhập thành công sẽ cập nhật dấu thời gian đăng nhập cuối cùng của người dùng|Mã thông báo được mã hóa và chứa user_id, tên người dùng, vai trò và ngày hết hạn

Phản hồi thành công (200)

Mã thông báo xác thực thu được từ điểm cuối /auth