การส่งเนื้อหาแบบสดบน YouTube ผ่าน HLS

เอกสารนี้อธิบายวิธีใช้โปรโตคอล HTTP Live Streaming (HLS) เพื่อสตรีมข้อมูลสดบน YouTube จากโปรแกรมเปลี่ยนไฟล์ เอกสารนี้มีไว้สำหรับผู้ให้บริการโปรแกรมเปลี่ยนไฟล์ที่ต้องการเพิ่มการรองรับการส่งผ่านข้อมูล HLS ลงในผลิตภัณฑ์ การส่งผ่านข้อมูล HLS เป็นตัวเลือกที่ดีสำหรับเนื้อหาพรีเมียมที่ต้องมีคุณภาพสูงและมีความละเอียดสูงโดยมีเวลาในการตอบสนองที่ค่อนข้างสูงกว่า ดูการเปรียบเทียบคร่าวๆ ของโปรโตคอลการส่งผ่านข้อมูลต่างๆ ที่ YouTube Live Streaming รองรับได้ที่การเปรียบเทียบโปรโตคอลการส่งผ่านข้อมูลของ YouTube Live Streaming

หากต้องการสตรีมข้อมูลสดโดยใช้ HLS โปรแกรมเปลี่ยนไฟล์ควรส่งชุดเพลย์ลิสต์สื่อและกลุ่มสื่อไปยังปลายทาง HLS ของ YouTube โดยใช้คําขอ HTTP PUT หรือ POST จากมุมมองของโปรแกรมเปลี่ยนไฟล์ ปลายทาง HLS ของ YouTube จะดูเหมือนเซิร์ฟเวอร์ HTTP แบบพาสซีฟ

กลุ่มสื่อแต่ละกลุ่มแสดงเนื้อหามัลติมีเดียจริงของส่วนสั้นๆ ในสตรีมที่มีระยะเวลาระหว่าง 1-4 วินาที เพลย์ลิสต์สื่อแต่ละรายการจะอธิบายวิธีประกอบกลุ่มสื่อกลับเข้าด้วยกันตามลำดับสตรีมที่เหมาะสม

ข้อกำหนดเกี่ยวกับรูปแบบสื่อ

การส่งผ่านข้อมูล HLS ของ YouTube มีข้อกำหนดต่อไปนี้สำหรับเนื้อหาวิดีโอและเสียง

  • วิดีโอและเสียงต้องได้รับการรวมในรูปแบบ M2TS
  • ตัวแปลงรหัสวิดีโอที่รองรับ ได้แก่ H.264 และ HEVC
  • รองรับอัตราเฟรมสูงสุด 60 FPS
  • รองรับเฉพาะ GOP แบบปิด
  • ตัวแปลงรหัสเสียงที่รองรับคือ AAC และรองรับเฉพาะเสียงแบบแทร็กเดียว

ดูข้อกำหนดโดยละเอียดเพิ่มเติมได้ในส่วนกลุ่มสื่อ

HDR

ระบบรองรับวิดีโอ High Dynamic Range (HDR) โดยใช้ตัวแปลงรหัส HEVC และมีข้อกำหนดเพิ่มเติมต่อไปนี้

  • มาตรฐานสีที่รองรับคือ PQ และ HLG 10 บิตที่มีความสว่างไม่คงที่ กล่าวโดยละเอียดคือ
    • รูปแบบโครมาต้องเป็น YUV 4:2:0 10 บิต
    • ฟังก์ชันการโอนต้องเป็น PQ (หรือที่เรียกว่า SMPTE ST 2084) หรือ HLG (หรือที่เรียกว่า ARIB STD-B67)
    • แม่สีต้องเป็น Rec. 2020
    • ค่าสัมประสิทธิ์เมตริกซ์ต้องเป็น Rec. 2020 ที่มีความสว่างไม่คงที่
  • ระบบรองรับทั้งค่าตัวอย่างแบบช่วงจำกัด (หรือช่วง MPEG) และแบบช่วงเต็ม (หรือช่วง JPEG) สิ่งสำคัญคือต้องตั้งค่าช่วงตามช่วงค่าตัวอย่างที่เนื้อหาใช้ เราขอแนะนําให้ใช้ค่าตัวอย่างที่มีช่วงจํากัด

การขอ URL การส่งผ่านข้อมูล HLS

การขอ URL การส่งผ่านข้อมูล HLS จาก YouTube API

หากต้องการรับ URL การส่งผ่านข้อมูลแบบเต็ม โปรแกรมเปลี่ยนไฟล์สามารถใช้ YouTube Live Streaming API เพื่อแทรกทรัพยากรสตรีมแบบสดที่มีพร็อพเพอร์ตี้ต่อไปนี้

"cdn": {
  "ingestionType": "hls",
  "frameRate": "variable",
  "resolution": "variable"
}

ในคำตอบของ API ช่อง cdn.ingestionInfo.ingestionAddress จะระบุ URL การส่งผ่านข้อมูลหลัก และช่อง cdn.ingestionInfo.backupIngestionAddress จะระบุ URL การส่งผ่านข้อมูลสำรอง ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบของทรัพยากร liveStreams

การขอ URL การส่งผ่านข้อมูล HLS จาก YouTube Creator Studio

ในเว็บอินเทอร์เฟซของ YouTube Creator Studio หลังจากครีเอเตอร์คลิก "สร้างสตรีม" แล้ว YouTube จะแสดง "สตรีมคีย์" ประกอบไปด้วยอักขระที่เป็นตัวอักษรและตัวเลข รวมถึงขีดกลาง คีย์ลับนี้จะระบุทั้งครีเอเตอร์และสตรีมไปยัง YouTube

คุณสร้าง URL ของ HLS จากสตรีมคีย์นี้ได้โดยทำดังนี้

https://a.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=0&file=

... โดยที่ $STREAM_KEY คือสตรีมคีย์ที่แสดงในหน้าเว็บ เช่น https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst&copy=0&file=

คุณสามารถส่งสําเนาที่ 2 ของการส่งผ่านข้อมูลซ้ำไปยัง URL สำรองนี้เพื่อให้มีความน่าเชื่อถือมากขึ้น

https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=1&file=

โปรดทราบว่าข้อมูลสํารองมีความแตกต่างจาก URL หลัก 2 อย่าง ได้แก่ ทั้งชื่อโฮสต์และพารามิเตอร์ copy= มีการเปลี่ยนแปลง การส่งผ่านข้อมูลสํารองต้องส่งค่าพารามิเตอร์ copy= ที่แตกต่างจากการส่งผ่านข้อมูลหลักเพื่อหลีกเลี่ยงการทําให้สตรีมเสียหาย

การทำ URL การส่งผ่านข้อมูล HLS ให้เสร็จสมบูรณ์

URL ที่ได้โดยใช้วิธีใดวิธีหนึ่งจะเป็นเทมเพลตที่ไม่สมบูรณ์ โดยแต่ละรายการจะลงท้ายด้วยพารามิเตอร์การค้นหา file= ที่ว่างเปล่า ในการจัดทำ URL สุดท้าย ผู้เข้ารหัสต้องใส่ชื่อไฟล์ของเพลย์ลิสต์สื่อหรือกลุ่มสื่อต่อท้าย URL เพื่อให้พารามิเตอร์ file= สมบูรณ์

กฎต่อไปนี้ใช้กับค่าของพารามิเตอร์ file=

  • โปรแกรมเปลี่ยนไฟล์อาจสร้างชื่อเพลย์ลิสต์สื่อหรือชื่อกลุ่มสื่อจากอักขระที่เป็นตัวอักษรและตัวเลขคละกัน ขีดล่าง เครื่องหมายทับ ขีดกลางสั้น และจุด แต่จะไม่รองรับอักขระอื่นๆ
  • โปรแกรมเปลี่ยนไฟล์ต้องไม่เข้ารหัส URL ให้ชื่อไฟล์
  • โปรแกรมเปลี่ยนไฟล์อาจใส่คอมโพเนนต์เส้นทางสัมพัทธ์หรือสัมบูรณ์ไว้ในชื่อไฟล์ แต่ไม่จำเป็นต้องทำ หากโปรแกรมเปลี่ยนไฟล์มีคอมโพเนนต์เส้นทางภายในชื่อไฟล์กลุ่มสื่อ โปรแกรมต้องอ้างอิงเส้นทางเดียวกันในรายการเพลย์ลิสต์ที่เกี่ยวข้อง

ข้อกำหนดของโปรโตคอล HLS

เพลย์ลิสต์สื่อและส่วนต่างๆ ในสื่อที่โปรแกรมเปลี่ยนไฟล์ส่งต้องเป็นไปตามข้อกำหนดของ HTTP Live Streaming ฉบับที่ 2

ข้อกำหนด HLS กำหนดเพลย์ลิสต์ 2 ประเภท ได้แก่ เพลย์ลิสต์สื่อและเพลย์ลิสต์หลัก เนื่องจาก YouTube จะเปลี่ยนรูปแบบเนื้อหาที่สตรีมเป็นความละเอียดและอัตราบิตที่แตกต่างกัน โปรแกรมเปลี่ยนรูปแบบจึงไม่จำเป็นต้องส่งเนื้อหาที่มีอัตราบิตต่างกันไปยัง YouTube ด้วยเหตุนี้ YouTube จึงรองรับเฉพาะเพลย์ลิสต์สื่อสำหรับการนำเข้า HLS และระบบจะไม่สนใจเพลย์ลิสต์หลัก (เพลย์ลิสต์หลักจะมีชุดสตรีมแบบต่างๆ ซึ่งแต่ละรายการจะอธิบายเนื้อหาเดียวกันในเวอร์ชันต่างๆ)

โดยโปรแกรมเปลี่ยนไฟล์ต้องมีคุณสมบัติดังนี้

  • ส่งสตรีมที่เข้ารหัสเพียง 1 รายการที่มีความละเอียดสูงสุดที่คุณต้องการแสดงต่อผู้ใช้ (ความละเอียดและตัวแปลงรหัสเดียว)
  • มัลติเพล็กซ์เสียงและวิดีโอ
  • ใช้ HTTPS และการเชื่อมต่อแบบถาวรสําหรับคําขอทั้งหมด

ส่วนต่อไปนี้มีข้อกำหนดที่เฉพาะเจาะจงมากขึ้นสำหรับเพลย์ลิสต์สื่อและกลุ่มสื่อ

เพลย์ลิสต์สื่อ

เพลย์ลิสต์สื่อประกอบด้วยรายการกลุ่มสื่อที่ต่อเชื่อมกันได้เพื่อแสดงสตรีมมัลติมีเดียแบบต่อเนื่องที่ถอดรหัสได้ เพลย์ลิสต์สื่อจะบอกเซิร์ฟเวอร์ว่าควรคาดหวังกลุ่มสื่อใดและวิธีจัดเรียงกลุ่มสื่ออย่างเหมาะสมในสตรีมที่ประกอบขึ้นใหม่

ข้อกำหนด

  • ชื่อไฟล์เพลย์ลิสต์สื่อต้องลงท้ายด้วย .m3u8 หรือ .m3u

  • เพลย์ลิสต์สื่อรายการแรกที่ส่งสำหรับสตรีมต้องเริ่มต้นที่หมายเลขลำดับ 0 และหมายเลขลำดับต้องเพิ่มขึ้นเรื่อยๆ

  • แท็ก EXT-X-MEDIA-SEQUENCE ต้องระบุหมายเลขลำดับของกลุ่มสื่อแรกที่อยู่ในเพลย์ลิสต์

  • เพลย์ลิสต์สื่อต้องมีกลุ่มเด่นไม่เกิน 5 กลุ่ม กลุ่มจะยังรอดำเนินการอยู่หากเซิร์ฟเวอร์ยังไม่ได้รับหรือรับทราบการได้รับกลุ่ม

    นอกจากกลุ่มที่โดดเด่นแล้ว ให้ใส่กลุ่มที่ได้รับการยอมรับ 2-3 กลุ่มในเพลย์ลิสต์สื่อแต่ละรายการด้วย แนวทางปฏิบัตินี้ช่วยลดโอกาสที่ระบบจะข้ามกลุ่มหากเพลย์ลิสต์สื่อหายไปที่ฝั่งเซิร์ฟเวอร์ เช่น คุณอาจใส่กลุ่มที่ได้รับการยอมรับได้สูงสุด 2 กลุ่มและกลุ่มที่โดดเด่นได้สูงสุด 5 กลุ่มในเพลย์ลิสต์สื่อแต่ละรายการ

    โปรดทราบว่าเซิร์ฟเวอร์จะรับทราบการได้รับกลุ่มสื่อโดยการตอบกลับ 200 (OK) หรือ 202 (Accepted) สำหรับการอัปโหลดกลุ่มนั้น การตอบกลับ202บ่งบอกว่าเซิร์ฟเวอร์ได้รับกลุ่มนั้นก่อนที่เพลย์ลิสต์จะระบุกลุ่มนั้น

  • ส่งเพลย์ลิสต์สื่อที่อัปเดตแล้วสำหรับกลุ่มสื่อทุกกลุ่มเพื่อให้เซิร์ฟเวอร์กู้คืนได้อย่างรวดเร็วหากเพลย์ลิสต์สื่อสูญหาย

  • เมื่อเซิร์ฟเวอร์รับทราบการได้รับกลุ่มสื่อแล้ว คุณสามารถเพิ่มค่าแท็ก EXT-X-MEDIA-SEQUENCE เพื่อไม่ให้เพลย์ลิสต์สื่อมีความยาวมากเกินไป เช่น หากเซิร์ฟเวอร์รับทราบการได้รับกลุ่มสื่อ 9 กลุ่มแรกแล้ว เพลย์ลิสต์สื่อถัดไปอาจแสดงกลุ่มสื่อที่ 8, 9 และ 10

  • ไม่รองรับแท็ก EXT-X-KEY และ EXT-X-SESSION-KEY

ตัวอย่าง

รายการต่อไปนี้แสดงตัวอย่างไฟล์ที่คาดว่าโปรแกรมเปลี่ยนไฟล์จะส่ง

Media Playlist file with seqnum #0
Media Segment file #0
Media Playlist file with seqnum #0-#1
Media Segment file #1
Media Playlist file with seqnum #0-#2
Media Segment file #2
Media Playlist file with seqnum #1-#3
Media Segment file #3
...

ตัวอย่างต่อไปนี้แสดงเพลย์ลิสต์สื่อที่ส่งในระหว่างสตรีมวิดีโอสด เนื่องจากตัวอย่างนี้มาจากช่วงกลางของสตรีม แท็ก EXT-X-MEDIA-SEQUENCE จึงมีค่าที่ไม่ใช่ 0

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:2680

#EXTINF:3.975,
fileSequence2680.ts
#EXTINF:3.941,
fileSequence2681.ts
#EXTINF:3.975,
fileSequence2682.ts

กลุ่มสื่อ

รายการต่อไปนี้ระบุข้อกําหนดสําหรับกลุ่มสื่อ

  • ชื่อไฟล์
    • ชื่อไฟล์กลุ่มสื่อใน URL ต้องมีนามสกุลไฟล์ .ts และต้องตรงกับชื่อไฟล์ในเพลย์ลิสต์
    • ชื่อไฟล์กลุ่มสื่อต้องไม่ซ้ำกันเมื่อมีการรีบูตโปรแกรมเปลี่ยนไฟล์และเริ่มสตรีมอีกครั้ง
  • รูปแบบ
    • กลุ่มสื่อต้องอยู่ในรูปแบบ M2TS และควรเริ่มต้นเอง
    • ส่วน M2TS แต่ละส่วนต้องมีโปรแกรม MPEG-2 รายการเดียว
    • กลุ่ม M2TS ต้องมี PAT และ PMT และแพ็กเก็ตสตรีมส่ง 2 รายการแรกในกลุ่มควรเป็น PAT และ PMT
  • เนื้อหา
    • วิดีโอและเสียงต้องได้รับการรวม
    • ตัวแปลงรหัสวิดีโอที่รองรับ ได้แก่ H.264 และ HEVC
    • รองรับ HDR ที่ใช้ HEVC (ดูข้อกำหนดของ HDR)
    • รองรับอัตราเฟรมสูงสุด 60 FPS
    • รองรับเฉพาะ GOP แบบปิด
    • ตัวแปลงรหัสเสียงที่รองรับคือ AAC และรองรับเฉพาะเสียงแบบแทร็กเดียว
    • เราขอแนะนำให้ส่วนของสื่อมีระยะเวลาระหว่าง 1-4 วินาทีตามที่ได้อธิบายไว้ในส่วนต่อไปนี้ กลุ่มสื่อต้องมีระยะเวลาไม่เกิน 5 วินาที
    • ส่วนสื่อต้องเข้ารหัสในเลเยอร์ TLS/SSL ด้วย HTTPS เท่านั้น ระบบไม่รองรับกลไกการเข้ารหัสอื่นๆ

ระยะเวลาของกลุ่มสื่อ

เราคาดหวังว่าการส่งผ่านข้อมูล HLS จะใช้กับเนื้อหาพรีเมียมที่ต้องมีคุณภาพและความละเอียดสูง โดยทั่วไปแล้วการส่งผ่านข้อมูล HLS จะมีเวลาในการตอบสนองสูงกว่าการส่งผ่านข้อมูลแบบ RTMP และ WebRTC เนื่องจากการส่งผ่านข้อมูล HLS อิงตามกลุ่ม

เราขอแนะนำให้ใช้ระยะเวลาของกลุ่มสื่อ 1-4 วินาที เนื่องจากกลุ่มสื่อที่มีระยะเวลาสั้นลงจะช่วยลดเวลาในการตอบสนองได้ แต่ข้อเสียคืออัตราการบัฟเฟอร์ซ้ำจะสูงขึ้นและประสิทธิภาพการเข้ารหัสลดลง ตามที่ระบุไว้ในส่วนก่อนหน้า กลุ่มสื่อต้องไม่ยาวเกิน 5 วินาที

บิตเรต

ศูนย์ช่วยเหลือของ YouTube มีหลักเกณฑ์ในการตั้งค่าอัตราบิต

โปรดทราบว่าโดยทั่วไป HEVC จะบีบอัดข้อมูลได้มากกว่า 25-50% ที่คุณภาพวิดีโอเดียวกันเมื่อเทียบกับ H.264 ดังนั้น คุณสามารถใช้ค่าอัตราบิตในช่วงล่างของช่วงแนะนำร่วมกับ HEVC เพื่อประหยัดแบนด์วิดท์ ซึ่งมีประโยชน์อย่างยิ่งสำหรับเนื้อหา 4K

ข้อกำหนดอื่นๆ

  • ผู้เข้ารหัสควรตั้งค่าส่วนหัว User-Agent ในคำขอ HTTP โดยใช้ไวยากรณ์ต่อไปนี้ ซึ่งประกอบด้วยชื่อผู้ผลิต ชื่อรุ่น และเวอร์ชัน

    User-Agent: <manufacturer> / <model> / <version>
    

คำบรรยาย

การส่งผ่านข้อมูล HLS รองรับการส่งคำบรรยายแทนเสียง 2 ตัวเลือก ได้แก่

  • ส่งคำบรรยายแทนเสียงโดยใช้คำขอ HTTP POST แยกต่างหาก ซึ่งใช้ได้กับการนำเข้า HLS ทั้งหมด
  • คำบรรยาย 608/708 แบบฝังจะใช้ได้กับการส่งผ่านข้อมูล HLS ที่ใช้ตัวแปลงรหัสวิดีโอ H264 แต่ไม่สามารถใช้กับการส่งผ่านข้อมูลที่ใช้ตัวแปลงรหัสวิดีโอ HEVC ดูรายละเอียดเพิ่มเติมได้ที่ข้อกำหนดเกี่ยวกับคำบรรยายสดในศูนย์ช่วยเหลือของ YouTube

รหัสการตอบกลับ HTTP

ส่วนต่อไปนี้จะอธิบายรหัสการตอบกลับที่ YouTube ส่งกลับเพื่อตอบสนองต่อกลุ่มสื่อและเพลย์ลิสต์สื่อที่ส่งโดยใช้ HLS

200 (OK)

การตอบกลับ HTTP 200 (OK) เป็นการตอบสนองต่อคำขอ PUT หรือ POST ซึ่งบ่งบอกว่าเซิร์ฟเวอร์ YouTube ได้รับการดำเนินการตามที่คาดไว้และดำเนินการเรียบร้อยแล้ว

การตอบกลับ HTTP 200 (OK) สำหรับคำขอ DELETE บ่งบอกว่าเซิร์ฟเวอร์ YouTube ได้รับและละเว้นคำขอ เซิร์ฟเวอร์ YouTube ไม่ได้กำหนดให้ไคลเอ็นต์ต้องลบทรัพยากรใดๆ ในสตรีม และจะไม่สนใจคำขอลบ YouTube ไม่แนะนำให้ไคลเอ็นต์ส่ง DELETE เพื่อเหตุผลด้านประสิทธิภาพ

202 (Accepted)

การตอบกลับ HTTP 202 (ยอมรับ) บ่งชี้ว่าเซิร์ฟเวอร์ YouTube ได้รับกลุ่มสื่อก่อนที่จะได้รับเพลย์ลิสต์สื่อที่มีกลุ่มสื่อนั้น ซึ่งบ่งชี้ให้ไคลเอ็นต์ทราบว่าควรส่งเพลย์ลิสต์สื่อที่มีกลุ่มสื่อนั้นโดยเร็วที่สุดเพื่อป้องกันความล่าช้าในการประมวลผลกลุ่มนั้น โปรดทราบว่าปัญหานี้จะไม่เกิดขึ้นหากโปรแกรมเปลี่ยนไฟล์ส่งเพลย์ลิสต์สื่อที่อัปเดตแล้วสำหรับกลุ่มสื่อทุกกลุ่ม

400 (คำขอไม่ถูกต้อง)

การตอบกลับ HTTP 400 (Bad Request) บ่งบอกว่าเกิดปัญหาอย่างใดอย่างหนึ่งต่อไปนี้

  • URL มีรูปแบบไม่ถูกต้อง
  • แยกวิเคราะห์เพลย์ลิสต์ไม่ได้หรือมีแท็กที่ไม่รองรับ
401 (ไม่ได้รับอนุญาต)

การตอบกลับ HTTP 401 (ไม่ได้รับอนุญาต) บ่งชี้ว่าพารามิเตอร์ cid ใน URL พื้นฐานสำหรับปลายทาง HLS ของ YouTube เสียหายหรือหมดอายุ ลูกค้าควรอัปเดตพารามิเตอร์ cid เพื่อดําเนินการต่อ

405 (ไม่อนุญาตเมธอด)

การตอบกลับ HTTP 405 (ไม่อนุญาตเมธอด) บ่งบอกว่าคำขอไม่ใช่คำขอ POST, PUT หรือ DELETE

500 (ข้อผิดพลาดภายในเซิร์ฟเวอร์)

การตอบกลับ HTTP 500 (ข้อผิดพลาดภายในเซิร์ฟเวอร์) บ่งชี้ว่าเซิร์ฟเวอร์ประมวลผลคำขอไม่ได้ สำหรับข้อผิดพลาดนี้ เราขอแนะนำให้คุณลองส่งคำขออีกครั้งโดยใช้ Exponential Backoff