×

📺 IPTV

B2C · Xtream · Reseller

IPTV จัดการผู้ใช้

ชั้นการจัดเก็บเอกสารถาวร

ระบบเก็บถาวรสามระดับสำหรับไคลเอนต์พร้อมกันมากกว่า 500 รายการ

ตัวเข้ารหัส

เขียนบัฟเฟอร์

หน้าต่างร้อน 2 ชม. (NVMe หรือ tmpfs)

→ กระจกเงา (ต่อเนื่อง)

HDD RAID5

50 TB การเก็บรักษา 14 วัน

→ ดึงข้อมูลล่วงหน้าตามความต้องการ

แคชการเล่น

แคชอุ่น 1 TB ไคลเอ็นต์มากกว่า 500 รายการ

ลูกค้า

กระจกอย่าขยับ

ส่วนที่เก่ากว่า mirror_min_age_ minutes จะถูกคัดลอกไปยัง RAID อย่างต่อเนื่อง

ชั้น

วัตถุประสงค์

การตั้งค่า

เขียนบัฟเฟอร์

รับเซ็กเมนต์ทุกวันตลอด 24 ชั่วโมง เก็บ Hot Window ไว้ 2 ชั่วโมงเพื่อการเล่นย้อนกลับล่าสุดอย่างรวดเร็ว ป้องกัน RAID จาก IO แบบสุ่ม

device_path (บล็อกอุปกรณ์หรือ 'tmpfs'), tmpfs_size_pct (10-50% MemAvailable เมื่อ tmpfs), mirror_min_age_ minutes, evict_age_minutes, flush_threshold_percent (บังคับให้ทริกเกอร์ฟลัช)

HDD RAID เอกสารเก่า

พื้นที่จัดเก็บหางยาวเพื่อการเก็บรักษาเต็ม (ค่าเริ่มต้น 14 วัน)

retention_days, raid_device, nginx_location, min_free_percent

แคชการเล่น (ไม่จำเป็น)

แคชฝั่งอ่านสำหรับไฟล์ยอดนิยมที่เก่ากว่า 2 ชั่วโมง (เช่น EPG catch-up)

prefetch_hours, max_sessions, eviction_policy (เซสชัน/lru/fifo)

การคำนวณความจุ

live write × 2h = write_buffer ขนาดหน้าต่างร้อน

การอ่าน (การค้นหาแบบ Tier Aware)

Stream.dvr_file_path/2 โพรบ write_buffer → play_cache → เก็บถาวรตามลำดับ

ดิสก์เสมือน tmpfs (dev/test)

แต่ละชั้นสามารถใช้ดิสก์เสมือน tmpfs ที่สนับสนุน RAM แทนอุปกรณ์บล็อกทางกายภาพ

ขนาดเป็น % RAM ว่าง

การจัดสรรระบุเป็นเปอร์เซ็นต์ของ MemAvailable (จาก /proc/meminfo) — ขั้นตอนที่ 10 ค่าที่ถูกต้อง 10/20/30/40/50

เจ้าหน้าที่รักษาความปลอดภัย OOM

หากเป้าหมายที่คำนวณจะเกิน 60% ของ MemAvailable ปัจจุบัน การเมานต์จะถูกปฏิเสธและระดับจะยังคงออฟไลน์ (Stream.archive_path ตกไปสู่ระดับที่ดีถัดไป)

รีบูตความคงอยู่

tmpfs อยู่ใน RAM — เนื้อหาบัฟเฟอร์ในเที่ยวบินใดๆ จะสูญหายไปเมื่อโฮสต์รีบูต

เมื่อใดควรใช้ tmpfs

ใช้ tmpfs สำหรับ write_buffer เมื่อ: (a) กล่อง dev/test ไม่มี NVMe สำรอง แต่คุณยังคงต้องการให้ไปป์ไลน์ DVR เต็มรูปแบบทำงานสำหรับการทดสอบการรวมระบบ (b) ผู้ปฏิบัติงานต้องการตรวจสอบพฤติกรรมมิเรอร์ + เก็บถาวรโดยไม่ต้องซื้อ NVMe ล่วงหน้า (c) การทดสอบชั่วคราวที่ยอมรับการสูญเสียเมื่อรีบูตได้

ล้างข้อมูลได้เร็วขึ้นสำหรับ tmpfs

เมื่อระดับการเขียนเป็น tmpfs StorageTierFlush จะใช้ค่าเริ่มต้นที่เข้มงวดมากขึ้น — mirror_min_age 2 นาที, evict_age 15 นาที (เทียบกับ 5 นาที / 120 นาทีสำหรับ NVMe จริง)

การจัดเตรียมอัตโนมัติและความปลอดภัยตามระดับชั้น

ระดับต่างๆ ได้รับการกำหนดค่าเพียงครั้งเดียวผ่าน Config > Storage > Storage Tiers และจัดเตรียมโดยอัตโนมัติ — ไม่มีการแก้ไข mkfs/mount/fstab ด้วยตนเองบนโฮสต์

เมล็ดบูตเริ่มต้น

ในการบู๊ตครั้งแรก (ไม่มีระดับการเขียนใน DB) ระบบจะสร้างระดับการเขียนที่สนับสนุน tmpfs โดยอัตโนมัติพร้อมการจัดสรร MemAvailable 30% จุดเมานท์ /mnt/nvme_write

ความสมบูรณ์และการเฟลโอเวอร์

Stream.archive_path/1 ส่งคืนเทียร์ 'ดีต่อสุขภาพ' แรก — write_buffer หากเมานต์+เขียนได้+free_pct เหนือระดับความปลอดภัย ไม่เช่นนั้นจะถอยกลับไปเก็บถาวร (โหมดลดระดับ)

การเปลี่ยนแปลงขนาดสด

การเปลี่ยน tmpfs_size_pct ใน UI จะทริกเกอร์ umount + remount ด้วยขนาดใหม่ในการบันทึก

URL หลัก — เครื่องเล่น OSTV

ฟิลด์แพ็คเกจ

แพ็กเกจ API

นโยบายรหัสผ่าน

API ของผู้ค้าปลีก

การตั้งค่า

เขตข้อมูลผู้ใช้

การจัดการผู้ใช้

IPTV จัดการผู้ใช้

URL หลัก — เครื่องเล่น OSTV

แอปพลิเคชัน OSTV Player อนุญาตให้ผู้ใช้เปลี่ยน URL ฐานเซิร์ฟเวอร์ (ที่อยู่ API)

เหตุผล: การเปลี่ยน URL พื้นฐานมีไว้สำหรับผู้ดูแลระบบ/ผู้ใช้รูทเท่านั้น เพื่อให้สามารถสลับระหว่างเซิร์ฟเวอร์ได้ (เช่น การใช้งานจริงกับการทดสอบ)

เขตข้อมูลผู้ใช้

แพ็กเกจ API

ส่งคืนรายการแพ็คเกจที่ใช้งานอยู่ทั้งหมดพร้อมราคาและช่วงเวลาที่เรียกเก็บเงิน

รายชื่อผู้ใช้การจัดการ (ตัวแทนจำหน่าย / ผู้ให้บริการ)

ส่งกลับยอดเครดิตสำหรับผู้ใช้การจัดการเฉพาะ

ฟิลด์แพ็คเกจ

API ของผู้ค้าปลีก

API สำหรับผู้ค้าปลีก/ผู้ให้บริการ

นโยบายรหัสผ่าน

ต้องใช้รหัสผ่านเมื่อสร้างสมาชิก

ขั้นต่ำ 8 ตัวอักษร

อักษรตัวพิมพ์ใหญ่อย่างน้อย 1 ตัว (A-Z)

อักขระพิเศษอย่างน้อย 1 ตัว (!@#$%^&* ฯลฯ)

นำไปใช้กับ UI และ API

การตั้งค่า

การจัดเตรียมอัตโนมัติและความปลอดภัยตามระดับชั้น

การตรวจจับความจุ + ระบบไฟล์อัตโนมัติ: เมื่อเลือก NVMe ฟรีจากดรอปดาวน์ ความจุ (GB) จะถูกอ่านจาก lsblk -bn -o SIZE และ FS ปัจจุบันจาก blkid (พร้อมทางเลือกสำรองทั้งดิสก์)

กลไกการล้างระดับ — กระจกต่อเนื่อง

StorageTierFlush GenServer ทำงานทุกๆ 60 วินาที

เหตุใดมิเรอร์ต่อเนื่องจึงเต้น "รอ 60 นาที ย้ายเป็นกลุ่ม": (1) โหลดของ RAID เท่ากัน — ไม่มีการระเบิด 5GB ในขอบเขตชั่วโมง เพียงหยดส่วน 7MB;

ความปลอดภัยของเซ็กเมนต์ที่กำลังดำเนินการ: มิเรอร์จะเลือกเฉพาะไฟล์ที่เก่ากว่า MIRROR_MIN_AGE_MINUTES ผ่านการค้นหา -mmin +5

การปรับแต่งต่อการปรับใช้ (.env)

500–1,000

กฎการปรับขนาด:

ปฏิทินแสดงตัวอย่าง DVR

แท็บ DVR Preview จะแสดงปฏิทินที่เซิร์ฟเวอร์เรนเดอร์โดยเน้นเฉพาะวันที่บันทึกข้อมูลบนดิสก์

วันที่มีการบันทึกสามารถคลิกได้ (สีน้ำเงิน) — การคลิกจะเป็นการป้อนข้อมูลวันที่และเวลาล่วงหน้าด้วยวันนั้นเวลา 00:00 น.

นำไปใช้ใน Stream.available_dvr_days/1 ผ่าน find -mindeep 4 -maxdeep 4 -type d บนการเมานต์แต่ละระดับ

API ผู้เล่น B2C

ภาพรวม

API B2C (ธุรกิจกับผู้บริโภค) ให้การรับรองความถูกต้องและการเข้าถึงสตรีมสำหรับแอปพลิเคชันผู้เล่นปลายทาง

การรับรองความถูกต้อง

ตรวจสอบสิทธิ์ผู้ใช้และรับ auth_token สำหรับการเรียก API ครั้งต่อไป

วิธี

จุดสิ้นสุด

ขอเนื้อความ

พารามิเตอร์

พิมพ์

ที่จำเป็น

คำอธิบาย

ใช่

ชื่อเข้าสู่ระบบของผู้ใช้

รหัสผ่านผู้ใช้

ตัวอย่างคำขอ

ฟิลด์ตอบกลับ

การตอบสนองความสำเร็จ (200)

โทเค็นการรับรองความถูกต้องที่เข้ารหัสสำหรับการเรียก API ในภายหลัง

วัน/เวลาหมดอายุของโทเค็นในรูปแบบ ISO 8601

ตัวอย่างการตอบรับความสำเร็จ

การตอบสนองข้อผิดพลาด (403)

ข้อความอธิบายข้อผิดพลาด

รหัสสถานะ HTTP

ตัวอย่างการตอบสนองข้อผิดพลาด

ข้อมูลผู้ใช้

ดึงข้อมูลเกี่ยวกับผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์โดยใช้โทเค็นการตรวจสอบสิทธิ์

ฟิลด์ตอบกลับ

ชื่อผู้ใช้ของผู้ใช้ที่ได้รับการรับรองความถูกต้อง

ข้อความเซิร์ฟเวอร์ (เว้นว่างถ้าไม่มี)

สถานะการรับรองความถูกต้อง (1 = รับรองความถูกต้อง)

สถานะบัญชี: ใช้งานอยู่, ถูกแบน, ปิดการใช้งาน, ทดลองใช้งาน

วันหมดอายุบัญชี (null หากไม่จำกัด)

จำนวนการเชื่อมต่อที่ใช้งานอยู่ในปัจจุบัน

วันที่สร้างบัญชีในรูปแบบ ISO 8601

การเชื่อมต่อพร้อมกันสูงสุดที่อนุญาต

รายการรูปแบบสตรีมเอาต์พุตที่อนุญาต

ชื่อผู้ให้บริการของเจ้าของ/ผู้ค้าปลีกของผู้ใช้ (ค่าว่างหากไม่มี)

URL ของรูปภาพโลโก้ผู้ให้บริการ (ค่าว่างหากไม่มี)

URL ของรูปภาพโลโก้การยุบของผู้ให้บริการ 208x208 (เป็นค่าว่างหากไม่มี)

เวลาเซิร์ฟเวอร์ปัจจุบันในรูปแบบ ISO 8601

ตัวอย่างคำขอ

หมวดหมู่

ดึงข้อมูลหมวดหมู่ที่กรองตามประเภท

ประเภทหมวดหมู่: สด vod หรือซีรีส์

รหัสหมวดหมู่เป็นสตริง

ชื่อที่แสดงหมวดหมู่

ID หมวดหมู่พาเรนต์ (0 ถ้าเป็น root)

แฮช MD5 ของเนื้อหาสำหรับการทำให้แคชใช้ไม่ได้

ตัวอย่างคำขอ

รายละเอียดวีโอดี

รับข้อมูลโดยละเอียดสำหรับรายการ VOD เฉพาะ รวมถึงข้อมูลเมตาและลิงก์สตรีม

รหัสสตรีม VOD (UUID)

ฟิลด์วัตถุข้อมูล

URL รูปภาพปก

ตัวระบุ TMDB

URL รูปภาพฉากหลัง

สตริงประเภท

โครงเรื่อง / คำอธิบาย

สมาชิกนักแสดง

ค่าเรตติ้ง (0-10)

ชื่อผู้กำกับ

วันที่วางจำหน่าย

ระยะเวลาเป็นวินาที

ระยะเวลาเป็นสตริงที่จัดรูปแบบ

อาร์เรย์ของรหัสหมวดหมู่

1 หากเป็นเนื้อหาสำหรับผู้ใหญ่ 0 หากเป็นอย่างอื่น

ช่องออบเจ็กต์ VOD

รหัสสตรีม VOD

ชื่อวีโอดี

วันที่เพิ่ม (ISO 8601)

URL ลิงก์สตรีม

ข้อมูลเมตาตัวแปลงสัญญาณวิดีโอ/เสียง

รายละเอียดซีรี่ส์

รับข้อมูลซีรีส์พร้อมรายการซีซั่นและตอนทั้งหมด โดยจัดกลุ่มตามหมายเลขซีซั่น

รหัสซีรี่ส์ (UUID)

ฟิลด์อาร์เรย์ฤดูกาล

หมายเลขฤดูกาล

ชื่อที่แสดงของซีซัน

จำนวนตอนในฤดูกาล

วันที่ออกอากาศของฤดูกาล

ภาพรวม/คำอธิบายของฤดูกาล

URL รูปภาพปกซีซัน

วัตถุตอน

แผนที่ที่คีย์ด้วยสตริงหมายเลขฤดูกาล

ฟิลด์วัตถุตอน

รหัสตอน

รหัสตอน TMDB

หมายเลขตอนภายในซีซัน

ชื่อตอน

วันที่เพิ่ม (ISO 8601)

หมายเลขฤดูกาล

ออบเจ็กต์ข้อมูลตอน (โครงสร้างเดียวกับข้อมูล VOD)

URL ลิงก์สตรีม

ข้อมูลเมตาตัวแปลงสัญญาณวิดีโอ/เสียง

หมายเหตุ

การหมดอายุของโทเค็นขึ้นอยู่กับบทบาทของผู้ใช้: ผู้ดูแลระบบ = 365 วัน อื่นๆ = 30 วัน|บัญชีที่ถูกปิดใช้งานไม่สามารถตรวจสอบสิทธิ์ได้ (ส่งคืน 403)|การเข้าสู่ระบบที่สำเร็จแต่ละครั้งจะอัปเดตการประทับเวลา Last_login ของผู้ใช้|โทเค็นจะถูกเข้ารหัสและมี user_id ชื่อผู้ใช้ บทบาท และการหมดอายุ

การตอบสนองความสำเร็จ (200)

โทเค็นการตรวจสอบสิทธิ์ที่ได้รับจาก /auth จุดสิ้นสุด