เอกสารนี้อธิบายวิธีใช้โปรโตคอล 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 เพื่อแทรกทรัพยากร liveStream ที่มีพร็อพเพอร์ตี้ต่อไปนี้
"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©=0&file=
... โดยที่ $STREAM_KEY
คือสตรีมคีย์ที่แสดงใน
อินเทอร์เฟซเว็บ
เช่น
https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst©=0&file=
คุณสามารถส่งสำเนาที่ 2 ของการส่งผ่านข้อมูลที่ซ้ำกัน ไปยัง URL สำรองนี้เพื่อเพิ่มความน่าเชื่อถือ
https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY©=1&file=
โปรดทราบว่าข้อมูลสำรองมีความแตกต่างจาก URL หลัก 2 อย่าง ได้แก่ ทั้งชื่อโฮสต์
และพารามิเตอร์ copy=
มีการเปลี่ยนแปลง การส่งผ่านข้อมูลสำรองต้องส่งค่าพารามิเตอร์ copy=
ที่แตกต่างจากการส่งผ่านข้อมูลหลักเพื่อหลีกเลี่ยงไม่ให้สตรีมเสียหาย
การกรอก URL การส่งผ่านข้อมูล HLS ให้เสร็จสมบูรณ์
URL ที่ได้จากทั้ง 2 วิธีนี้เป็นเทมเพลตที่ไม่สมบูรณ์ โดยแต่ละ URL จะลงท้ายด้วยพารามิเตอร์การค้นหา file=
ที่ว่างเปล่า หากต้องการสร้าง URL สุดท้าย ตัวเข้ารหัสต้อง
ผนวกชื่อไฟล์ของเพลย์ลิสต์สื่อหรือกลุ่มสื่อต่อท้าย URL
เพื่อทำให้พารามิเตอร์ file=
สมบูรณ์
ค่าของพารามิเตอร์ file=
ต้องเป็นไปตามกฎต่อไปนี้
- ตัวเข้ารหัสอาจสร้างเพลย์ลิสต์สื่อหรือชื่อไฟล์กลุ่มสื่อจาก อักขระที่เป็นตัวอักษรและตัวเลขคละกัน ขีดล่าง เครื่องหมายทับ ขีดกลาง และจุด ระบบไม่รองรับอักขระอื่นๆ
- ตัวเข้ารหัสต้องไม่เข้ารหัส URL ของชื่อไฟล์
- ตัวเข้ารหัสอาจมีคอมโพเนนต์เส้นทางสัมพัทธ์หรือสัมบูรณ์ในชื่อไฟล์ แม้ว่าจะไม่จำเป็นก็ตาม หากตัวเข้ารหัสมีคอมโพเนนต์เส้นทาง ภายในชื่อไฟล์ของ Media Segment จะต้องอ้างอิงเส้นทางเดียวกันใน รายการเพลย์ลิสต์ที่เกี่ยวข้อง
ข้อกำหนดของโปรโตคอล HLS
เพลย์ลิสต์สื่อและส่วนต่างๆ ในสื่อที่โปรแกรมเปลี่ยนไฟล์ส่งมาต้องเป็นไปตาม ข้อกำหนด HTTP Live Streaming ฉบับที่ 2
ข้อกำหนดของ HLS กำหนดเพลย์ลิสต์ 2 ประเภท ได้แก่ เพลย์ลิสต์สื่อและเพลย์ลิสต์หลัก เนื่องจาก YouTube จะแปลงรหัสเนื้อหาที่สตรีมเป็นความละเอียดและ บิตเรตต่างๆ ตัวเข้ารหัสจึงไม่จำเป็นต้องส่งเนื้อหาที่มีบิตเรตแตกต่างกันไปยัง YouTube ด้วยเหตุนี้ YouTube จึงรองรับเฉพาะเพลย์ลิสต์สื่อสำหรับการส่งผ่านข้อมูล HLS และจะไม่สนใจเพลย์ลิสต์หลัก (เพลย์ลิสต์หลักมีชุดสตรีมตัวแปร ซึ่งแต่ละสตรีมจะอธิบายเนื้อหาเดียวกันในเวอร์ชันที่แตกต่างกัน)
โปรแกรมเปลี่ยนไฟล์ต้องมีคุณสมบัติดังนี้
- ส่งสตรีมที่เข้ารหัส 1 รายการที่มีความละเอียดสูงสุดที่คุณต้องการ แสดงต่อผู้ใช้ (ความละเอียดและตัวแปลงรหัสเดียว)
- มัลติเพล็กซ์เสียงและวิดีโอ
- ใช้ HTTPS และการเชื่อมต่อแบบถาวรสำหรับคำขอทั้งหมด
ส่วนต่อไปนี้มีข้อกำหนดที่เฉพาะเจาะจงมากขึ้นสำหรับเพลย์ลิสต์สื่อ และกลุ่มสื่อ
เพลย์ลิสต์สื่อ
เพลย์ลิสต์สื่อมีรายการกลุ่มสื่อที่สามารถเชื่อมต่อเพื่อ แสดงสตรีมมัลติมีเดียที่ต่อเนื่องและถอดรหัสได้ เพลย์ลิสต์สื่อจะบอกเซิร์ฟเวอร์ว่าควรคาดหวัง Media Segment ใดและควรจัดเรียง Media Segment เหล่านั้นอย่างถูกต้องในสตรีมที่ประกอบขึ้นใหม่
ข้อกำหนด
ชื่อไฟล์เพลย์ลิสต์สื่อต้องลงท้ายด้วย
.m3u8
หรือ.m3u
เพลย์ลิสต์สื่อแรกที่ส่งสำหรับสตรีมต้องเริ่มต้นที่หมายเลขลำดับ
0
และหมายเลขลำดับต้องเพิ่มขึ้นเรื่อยๆแท็ก
EXT-X-MEDIA-SEQUENCE
ต้องระบุหมายเลขลำดับของ Media Segment แรกที่แสดงในเพลย์ลิสต์เพลย์ลิสต์สื่อต้องมีกลุ่มเด่นไม่เกิน 5 กลุ่ม เซ็กเมนต์จะยังคงค้างอยู่หากเซิร์ฟเวอร์ยังไม่ได้รับหรือรับทราบ การรับเซ็กเมนต์
นอกจากส่วนที่โดดเด่นแล้ว ให้รวมส่วนที่ได้รับการรับรอง ไว้ 2-3 ส่วนในเพลย์ลิสต์สื่อแต่ละรายการด้วย วิธีนี้จะช่วยลดโอกาสที่ระบบจะข้าม กลุ่มหากเพลย์ลิสต์สื่อหายไปที่ฝั่งเซิร์ฟเวอร์ เช่น คุณอาจรวมกลุ่มที่รับทราบแล้วได้สูงสุด 2 กลุ่มและกลุ่มที่ยังไม่ได้ดำเนินการได้สูงสุด 5 กลุ่มในเพลย์ลิสต์สื่อแต่ละรายการ
โปรดทราบว่าเซิร์ฟเวอร์จะรับทราบการรับ Media Segment โดยการส่งการตอบกลับ
200
(OK
) หรือ202
(Accepted
) เมื่ออัปโหลด Segment นั้น การตอบกลับ A202
แสดงว่าเซิร์ฟเวอร์ได้รับกลุ่มก่อนเพลย์ลิสต์ที่ระบุกลุ่มนั้นส่งเพลย์ลิสต์สื่อที่อัปเดตแล้วสำหรับกลุ่มสื่อทุกกลุ่มเพื่อให้เซิร์ฟเวอร์กู้คืนได้อย่างรวดเร็วในกรณีที่เพลย์ลิสต์สื่อสูญหาย
เมื่อเซิร์ฟเวอร์รับทราบการรับ Media Segment คุณจะเพิ่มค่าแท็ก
EXT-X-MEDIA-SEQUENCE
เพื่อป้องกันไม่ให้ Media Playlist ยาวเกินไปได้ เช่น หากเซิร์ฟเวอร์รับทราบการรับส่วนสื่อ 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
กลุ่มสื่อ
รายการต่อไปนี้ระบุข้อกำหนดสำหรับกลุ่มสื่อ
- ชื่อไฟล์
- ชื่อไฟล์ของ Media Segment ใน URL ต้องมีนามสกุลชื่อไฟล์
.ts
และต้องตรงกับชื่อไฟล์ในเพลย์ลิสต์ - ชื่อไฟล์ของ Media Segment ต้องไม่ซ้ำกันเมื่อรีบูตตัวเข้ารหัสและ รีสตาร์ทสตรีม
- ชื่อไฟล์ของ Media Segment ใน URL ต้องมีนามสกุลชื่อไฟล์
- รูปแบบ
- กลุ่มสื่อต้องอยู่ในรูปแบบ 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 เป็นการส่งผ่านข้อมูลแบบอิงตามกลุ่ม
เราขอแนะนำให้ใช้ระยะเวลาของ Media Segment 1-4 วินาที เนื่องจาก Media Segment ที่มีขนาดเล็กกว่าอาจทำให้เวลาในการตอบสนองลดลง แต่ก็อาจส่งผลให้อัตราการบัฟเฟอร์ซ้ำสูงขึ้นและประสิทธิภาพการเข้ารหัสลดลง ตามที่ระบุไว้ในส่วนก่อนหน้า กลุ่มสื่อต้องมีความยาวไม่เกิน 5 วินาที
บิตเรต
ศูนย์ช่วยเหลือของ YouTube มีหลักเกณฑ์สำหรับการตั้งค่าบิตเรต
โปรดทราบว่าโดยทั่วไปแล้ว HEVC จะบีบอัดข้อมูลได้มากกว่า H.264 ประมาณ 25% ถึง 50% ที่คุณภาพวิดีโอเท่ากัน ดังนั้น คุณจึงใช้ค่าอัตราบิตที่ส่วนล่างของช่วงที่แนะนำกับ 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 (ตกลง)
ในการตอบกลับคำขอ PUT หรือ POST การตอบกลับ HTTP 200 (OK) จะบ่งบอกว่าเซิร์ฟเวอร์ YouTube ได้รับการดำเนินการที่คาดไว้และจัดการการดำเนินการนั้นสำเร็จ
ในการตอบกลับคำขอ DELETE การตอบกลับ HTTP 200 (OK) จะบ่งบอกว่าเซิร์ฟเวอร์ YouTube ได้รับและไม่สนใจคำขอ เซิร์ฟเวอร์ YouTube ไม่ได้กำหนดให้ไคลเอ็นต์ลบทรัพยากรใดๆ ในสตรีม และจะไม่สนใจคำขอ DELETE YouTube ขอแนะนำให้ไคลเอ็นต์ไม่ส่งคำสั่ง DELETE เพื่อเหตุผลด้านประสิทธิภาพ
- 202 (Accepted)
การตอบกลับ HTTP 202 (ยอมรับแล้ว) แสดงว่าเซิร์ฟเวอร์ YouTube ได้รับ Media Segment ก่อนที่จะได้รับเพลย์ลิสต์สื่อที่มี Media Segment นั้น ซึ่งจะบอกไคลเอ็นต์ว่าควรส่งเพลย์ลิสต์สื่อที่มี กลุ่มสื่อนั้นโดยเร็วที่สุดเพื่อป้องกันไม่ให้เกิดความล่าช้าในการประมวลผล กลุ่มดังกล่าว โปรดทราบว่าปัญหานี้จะไม่เกิดขึ้นหากตัวเข้ารหัสส่งเพลย์ลิสต์สื่อที่อัปเดตแล้วสำหรับแต่ละกลุ่มสื่อ
- 400 (คำขอไม่ถูกต้อง)
การตอบกลับ HTTP 400 (คำขอไม่ถูกต้อง) บ่งบอกว่าเกิดปัญหาอย่างใดอย่างหนึ่งต่อไปนี้
- URL มีรูปแบบไม่ถูกต้อง
- แยกวิเคราะห์เพลย์ลิสต์ไม่ได้หรือมีแท็กที่ไม่รองรับ
- 401 (ไม่ได้รับอนุญาต)
การตอบกลับ HTTP 401 (ไม่ได้รับอนุญาต) แสดงว่าพารามิเตอร์ cid ใน URL ฐานสำหรับปลายทาง HLS ของ YouTube เสียหายหรือหมดอายุ ไคลเอ็นต์ ควรอัปเดตพารามิเตอร์
cid
เพื่อดำเนินการต่อ- 405 (ไม่อนุญาตให้ใช้วิธีนี้)
การตอบกลับ HTTP 405 (ไม่อนุญาตเมธอด) แสดงว่าคำขอไม่ใช่คำขอ POST, PUT หรือ DELETE
- 500 (ข้อผิดพลาดภายในเซิร์ฟเวอร์)
การตอบกลับ HTTP 500 (ข้อผิดพลาดภายในเซิร์ฟเวอร์) แสดงว่าเซิร์ฟเวอร์ ประมวลผลคำขอไม่ได้ สำหรับข้อผิดพลาดนี้ เราขอแนะนำให้คุณลองส่งคำขออีกครั้งโดยใช้ Exponential Backoff