# วิธีการประมวลผลและเผยแพร่วิดีโอที่เข้ารหัสแบบ Clear Key

ระบบ ByteArk Stream รองรับการประมวลผลวิดีโอที่เข้ารหัสแบบ Clear Key ด้วยอัลกอริทึม AES-128 สำหรับวิดีโอในรูปแบบ HLS ผู้ชมวิดีโอที่ถูกเข้ารหัสจะไม่สามารถรับชมได้หากไม่ได้รับกุญแจ (Key) ที่ใช้ในการเข้ารหัส เพื่อใช้ในการถอดรหัสเสียก่อน ถึงแม้ว่าผู้ชมจะดาวน์โหลดวิดีโอดังกล่าวมาด้วยวิธีใดๆ ก็ตาม

# วิธีการเปิดใช้งานการเข้ารหัสแบบ Clearkey

  1. เข้าไปที่หน้าตั้งค่าโปรเจกต์ที่ต้องการ แล้วเลือกหัวข้อ การเข้ารหัสวิดีโอ
  2. เลือก “วิธีการเข้ารหัสวิดีโอ” เป็น “เข้ารหัสด้วยรูปแบบ AES-128 โดยส่งกุญแจด้วยแบบ Clearkey” จากนั้นระบุ URL ของ API ที่คุณพัฒนาขึ้น ทั้งนี้คุณสามารถทดสอบความถูกต้องของ API ได้จากเครื่องมือช่วยทดสอบที่อยู่ด้านล่างของหน้า (ไม่จำเป็นต้องบันทึกการตั้งค่า)
  3. คลิกที่ปุ่ม “บันทึก” เพื่อให้การเปลี่ยนแปลงมีผลกับวิดีโอที่จะอัปโหลดต่อไป

# กระบวนการทำงานโดยรวม

เพื่อให้คุณสามารถควบคุมวิธีการตรวจสอบสิทธิ์ของผู้ชม (เพื่อให้หรือไม่ให้กุญแจถอดรหัส) ได้อย่างเต็มที่ ระบบ ByteArk Qoder จึงเปิดให้คุณพัฒนา Key Server API เพื่อสร้างกุญแจเพื่อเข้ารหัส และควมคุมกระบวนการเผยแพร่กุญแจถอดรหัสได้ด้วยตัวคุณเอง

API ที่คุณพัฒนาจะเข้ามามีส่วนในการทำงานของระบบดังนี้

Sequence Diagram การทำงานของระบบ Key server ร่วมกับระบบ ByteArk Stream

  1. ผู้ใช้อัปโหลดวิดีโอเข้าสู่โปรเจกต์ที่ถูกตั้งค่าไว้ว่าให้เข้ารหัสวิดีโอด้วยอัลกอริทึมแบบ AES-128
  2. ระบบประมวลผลวิดีโอของ ByteArk จะร้องขอกุญแจสำหรับเข้ารหัสผ่านทาง “Encoding encryption key request API (API สำหรับขอกุญแจสำหรับเข้ารหัส)” ที่คุณพัฒนาขึ้น (พร้อมกับ content_id, tech, definition) เพื่อนำไปใช้เข้ารหัสวิดีโอ
    • “API สำหรับขอกุญแจสำหรับเข้ารหัส” ที่คุณพัฒนาขึ้น สร้างกุญแจสำหรับเข้ารหัสเก็บไว้พร้อมข้อมูล content_id, tech, definition ก่อนจะตอบกลับไป
    • ระบบประมวลผลวิดีโอของ ByteArk ประมวลผลวิดีโอ โดยเข้ารหัสด้วยกุญแจที่ได้มา และบันทึก URL ของ “API สำหรับขอกุญแจสำหรับถอดรหัส” ไว้ในวิดีโอนั้นด้วย ส่วนกุญแจเข้ารหัสจะถูกลบทิ้งทันทีที่ประมวลผลเสร็จสิ้น
  3. วิดีโอถูกนำไปแสดงผลบนระบบของคุณ ด้วยวิธีการตามปกติ
  4. เมื่อผู้ชมรับชม Video Player จะโหลดวิดีโอ ก่อนจะพบว่าวิดีโอนั้นถูกเข้ารหัส และขอกุญแจสำหรับถอดรหัส ตาม URL ของ “Playback encryption key request API (API สำหรับขอกุญแจสำหรับถอดรหัส)” ที่ระบุไว้ในวิดีโอนั้น
    • “API สำหรับขอกุญแจสำหรับถอดรหัส” ที่คุณพัฒนาขึ้น ค้นหากุญแจสำหรับถอดรหัส ซึ่งได้เก็บไว้พร้อมข้อมูล content_id, tech, definition ในขั้นตอนที่ 3 และตอบกลับไป (หรือไม่ตอบกลับไปหากคุณไม่ต้องการให้ผู้ชมดังกล่าวรับชมได้)
    • Video Player นำกุญแจไปถอดรหัสระหว่างการเล่นเพื่อแสดงผลให้ผู้ชม

# รูปแบบของ Encoding encryption key request API (API สำหรับขอกุญแจสำหรับเข้ารหัส)

ByteArk Qoder จะเรียก API นี้ด้วยเมธอด POST ทุกครั้งที่มีการประมวลผลวิดีโอที่จะต้องเข้ารหัส พร้อมกับส่งค่าต่างๆ ต่อไปนี้

Name ช่องทาง Description
token Query String Encryption Key Request Token (รายละเอียดจะอธิบายต่อไป)
X-ByteArk-Qoder-Secret HTTP Request Header Secret ลับจาก ByteArk Qoder เพื่อยืนยันว่าเป็นการเรียกจากโปรเจกต์ที่คุณต้องการจริง (ดูค่าได้จากหน้าตั้งค่าโปรเจกต์)

สำหรับ Encryption Key Request Token นั้น จะอยู่ในรูปแบบ JWT Token (opens new window) ที่สร้างขึ้นด้วยวิธีเข้ารหัสแบบ HS256 โดยมีค่าภายใน token ดังต่อไปนี้

Name Type Required Description
content_id String Yes Video Key ของวิดีโอที่จะถูกเข้ารหัส
tech String Yes รูปแบบของวิดีโอที่จะถูกเข้ารหัส ในที่นี้จะมีค่าเป็น hls เสมอ
definition String Yes ความละเอียดของวิดีโอที่จะถูกเข้ารหัส เช่น 480p

หากตรวจสอบแล้วว่า X-ByteArk-Qoder-Secret มีค่าถูกต้องตรงกัน API นี้จะต้องตอบกลับมาเป็นกุญแจสำหรับเข้ารหัส ซึ่งเป็น Binary ความยาว 16 Bytes โดยคุณจะต้องเก็บกุญแจนี้ไว้คู่กับข้อมูล content_id, tech, และ definition เพื่อใช้ใน API ถัดไป

คุณสามารถตรวจสอบความถูกต้องของ API นี้ได้จากหน้าปรับตั้งค่าของโปรเจกต์

# รูปแบบของ Playback encryption key request API (API สำหรับขอกุญแจสำหรับถอดรหัส)

ByteArk Player หรือ Video Player ของคุณ (ซึ่งต้องรองรับการเล่นวิดีโอแบบ HLS ที่เข้ารหัสด้วยอัลกอริทีม AES-128) จะร้องขอกุญแจสำหรับถอดรหัสผ่าน API นี้ ด้วยเมธอด GET ทุกครั้งที่มีการเล่นวิดีโอ โดยจะส่งพารามิเตอร์ผ่าน Query String ดังนี้

Name ช่องทาง Description Description
token Query String Encryption Key Request Token เหมือนกันกับ API แรก Video Key ของวิดีโอที่จะถูกเข้ารหัส

API นี้จะต้องตอบกลับมาเป็นกุญแจสำหรับเข้ารหัส ซึ่งเป็น Binary ความยาว 16 Bytes เช่นเดียวกัน โดยให้ตอบกลับเป็นกุญแจสำหรับคอนเทนต์ที่มี content_id, tech, และ definition ตรงกับที่ตอบใน API แรก

ทั้งนี้ API สามารถเลือกที่จะไม่ตอบกุญแจ และส่ง response ที่มี status code เป็น 403 แทน หากคุณไม่ต้องการให้ผู้ชมคุณนั้นเล่นวิดีโอได้ โดยคุณอาจเลือกที่จะตรวจสอบผู้ชมได้จากกลยุทธ์ต่างๆ ตัวอย่างเช่น

  • ในกรณีเป็นการรับชมผ่านเว็บไซต์ ที่ผู้ใช้ต้องเข้าสู่ระบบก่อนการรับชม
    • กำหนดให้ URL ของ “API สำหรับขอกุญแจสำหรับถอดรหัส” เป็นโดเมนเดียวกัน หรือเป็น subdomain ภายใต้เว็บไซต์ของคุณ ซึ่งจะทำให้ API ดังกล่าวเข้าถึง cookie (และอาจรวมถึง session) ของเว็บไซต์ของคุณได้
    • พัฒนา “API สำหรับขอกุญแจสำหรับถอดรหัส” ให้ตรวจสอบสิทธิ์ของผู้ชมคุณนั้นว่ามีสิทธิ์รับชมวิดีโอนั้นหรือไม่ ผ่าน cookie หรือ session ที่สามารถอ่านได้
  • ในกรณีเป็นการรับชมผ่านเว็บไซต์ ที่ผู้ใช้ไม่ต้องเข้าสู่ระบบก่อนการรับชม
    • กำหนดให้ URL ของ “API สำหรับขอกุญแจสำหรับถอดรหัส” เป็นโดเมนเดียวกัน หรือเป็น subdomain ภายใต้เว็บไซต์ของคุณ ซึ่งจะทำให้ API ดังกล่าวเข้าถึง cookie ของเว็บไซต์ของคุณได้
    • พัฒนาหน้าเว็บที่มี Video Player อยู่ ให้เซท cookie ตามแพทเทิร์นที่คุณต้องการพร้อมกับการแสดงผลหน้าเว็บนั้น
    • พัฒนา “API สำหรับขอกุญแจสำหรับถอดรหัส” ให้ตรวจสอบ cookie ที่ถูกเซทในขั้นตอนก่อนหน้านั้นว่าเป็นไปตามแพทเทิร์นที่คุณได้ออกแบบไว้หรือไม่
  • ในกรณีเป็นการรับชมผ่านแอพลิเคชัน ที่ผู้ใช้ไม่ต้องเข้าสู่ระบบก่อนการรับชม
    • ใช้ HTTPS Pin Certificate

# ข้อจำกัดและข้อพึงระวังในการใช้งาน

  • คุณสามารถกำหนด URL ทั้งสองที่ต้องการได้เอง อย่างไรก็ตาม เมื่อระบบประมวลผลวิดีโอแล้ว จะทำการฝัง URL ของ API สำหรับขอกุญแจสำหรับถอดรหัสไว้ด้วย และไม่สามารถเปลี่ยนแปลงได้ในภายหลังโดยง่าย ดังนั้นกรุณาเลือก URL ของ API ที่คุณสามารถดูแลให้คงอยู่ได้ตลอดเวลาที่คุณให้บริการกับผู้ชม
  • คุณจำเป็นต้องใช้ HTTPS เท่านั้น สำหรับ URL ของ API ทั้งสองนี้
  • เพื่อความปลอดภัย ระบบจะใช้กุญแจเพื่อเข้ารหัสและลบทิ้งทันที โดยไม่มีการเก็บไว้ในระบบใดๆ ดังนั้นกรุณาเก็บกุญแจทั้งหมดที่สร้างไว้ไว้ให้ดี มิฉะนั้นวิดีโอจะไม่สามารถเล่นได้และไม่มีวิธีการใดๆ ที่จะกู้คืนกลับมาได้ทั้งสิ้น
  • เพื่อความปลอดภัย ระบบจะใช้กุญแจเพื่อเข้ารหัสและลบทิ้งทันที ดังนั้นวิดีโออาจจะไม่สามารถเล่นได้แม้แต่ในหน้า console ของ ByteArk ก็ตาม (ขึ้นอยู่กับว่า API ที่คุณพัฒนาได้ให้กุญแจมาหรือไม่)