ทำไมดาวน์โหลด YouTube ที่นี่จึงหยุดแถว 360p
YouTube ให้บริการ MP4 ที่สมบูรณ์ คือภาพและเสียงในไฟล์เดียว เฉพาะที่ความละเอียดปานกลางเท่านั้น ทุกอย่างที่สูงกว่านั้นถูกเก็บเป็นสตรีมแยกที่ต้องรวมเข้าด้วยกัน และเครื่องมือนี้ไม่รวมให้
นี่คือเรื่องที่ทำให้ประหลาดใจบ่อยที่สุดในหน้า YouTube จึงควรพูดไว้ก่อน เพดานปกติคือ 360p บางครั้ง 240p และไม่ใช่การตั้งค่าที่เร่งให้สูงขึ้นได้ ตัวดาวน์โหลดเสนอ MP4 แบบต่อเนื่องที่ YouTube เผยแพร่เป็นไฟล์เดียว เรนดิชัน 1080p มีอยู่ฝั่ง YouTube แต่ไม่ได้เป็นไฟล์เดียว
รวมแล้วและอะแดปทีฟเป็นสองสิ่งที่ต่างกัน
YouTube เก็บวิดีโอแต่ละรายการในสองรูปแบบ รูปแบบที่รวมแล้วมีทั้งภาพและเสียงอยู่ใน MP4 ไฟล์เดียว เป็นไฟล์ที่คุณบันทึกและเล่นได้ทุกที่ ส่วนรูปแบบอะแดปทีฟแยกออกจากกัน เป็นสตรีมวิดีโอเดี่ยวและสตรีมเสียงเดี่ยวที่แยกกัน โดยแต่ละอันเข้ารหัสที่บิตเรตที่ YouTube เลือกสำหรับความละเอียดนั้น
การเล่น 1080p ในเบราว์เซอร์ทำได้ง่าย เพราะตัวเล่นดึงสตรีมทั้งสองแล้วรวมให้ทันที การบันทึก 1080p เป็นไฟล์เดียวนั้นเป็นงานอีกแบบ ต้องมีอะไรสักอย่างรวมแทร็กเข้าด้วยกัน ตัวดาวน์โหลดนี้ไม่มีตัวรวม จึงแสดงเฉพาะรูปแบบที่รวมแล้ว และมากขึ้นเรื่อย ๆ ที่ YouTube ให้บริการรูปแบบเหล่านั้นที่ 360p และต่ำกว่า รูปแบบที่รวมแล้วที่ 720p ซึ่งเคยมีอยู่ ไม่ได้ถูกส่งให้ไคลเอนต์ทั่วไปอีกแล้ว
ตัวประมวลผลทำอะไร
- มันถามปลายทาง player ของ YouTube ด้วยชุดตัวตนไคลเอนต์ทางการไล่ระดับ ตั้งแต่ไคลเอนต์ Android ไปจนถึงตัวเล่นเว็บแบบฝัง
- มันเก็บเฉพาะรายการ MP4 ที่รวมแล้ว และตัดไฟล์ซ้ำตามไอดีรูปแบบ
- มันติดป้ายแต่ละแถวด้วยป้ายคุณภาพของ YouTube เอง และถอยไปใช้ความสูงเฟรมหากไม่มี
- หาก player ปฏิเสธ การตรวจสอบ oEmbed ยังบอกได้ว่าวิดีโอนั้นมีอยู่หรือไม่ วิดีโอที่ถูกลบจึงไม่ถูกเข้าใจผิดว่าเป็นวิดีโอที่ถูกบล็อก
ชุดไคลเอนต์ไล่ระดับนี้เองเป็นเหตุผลว่าทำไมวิดีโอที่ล้มเหลวในครั้งหนึ่งอาจสำเร็จในครั้งถัดไป เพราะไคลเอนต์ต่างกันได้รับรูปแบบต่างกัน และ YouTube เปลี่ยนว่ารูปแบบใดใช้งานได้เมื่อเวลาผ่านไป
ทำไมลิงก์จึงเปิดในแท็บใหม่
ไบต์วิดีโอมาจาก googlevideo.com ซึ่งไม่ส่งส่วนหัว CORS หน้าเว็บอ่านไม่ได้ ปุ่มดาวน์โหลดจึงนำไปยังลิงก์แทน และเบราว์เซอร์ของคุณบันทึกไฟล์จาก CDN ของ Google โดยตรง สองรายละเอียดทำให้การนำทางนั้นทำงานได้ ตัวประมวลผลต่อพารามิเตอร์ title ท้าย URL ซึ่งทำให้เซิร์ฟเวอร์ของ Google ตอบด้วย content-disposition: attachment ไฟล์จึงถูกบันทึกแทนที่จะเล่นในแท็บ
ทำไมจึงไม่มีการแคช
ผลลัพธ์ของแพลตฟอร์มอื่นถูกแคชไว้สองสามนาทีหรือมากกว่า แต่ของ YouTube ไม่เคยถูกแคช โดยตั้งใจ เพราะลิงก์ googlevideo.com ผูกกับที่อยู่ที่ขอมาและหมดอายุเร็ว ลิงก์ที่แคชไว้จะดูเหมือนปุ่มดาวน์โหลด แต่ล้มเหลวเหมือนลิงก์ตาย ตัวประมวลผลจึงถาม YouTube ใหม่ทุกครั้ง
สิ่งที่ไม่รองรับ
| กรณี | ผลลัพธ์ |
|---|---|
| วิดีโอสาธารณะ | ประมวลผลได้ คือรูปแบบ MP4 ที่รวมแล้วที่ YouTube เสนอ |
| วิดีโอส่วนตัว เฉพาะสมาชิก จำกัดตามอายุ | private — ตัวประมวลผลไม่เข้าสู่ระบบเลย |
| วิดีโอที่ถูกลบหรือถูกนำออก | not_found |
| ไลฟ์สดที่กำลังออกอากาศ | ไม่มีไฟล์ที่รวมแล้วขณะสตรีมกำลังเล่น |
| Shorts | ใช้ได้เหมือนวิดีโออื่น ๆ ด้วยเพดานความละเอียดเดียวกัน |
ฉบับย่อ
- เสนอเฉพาะ MP4 ที่รวมแล้ว ซึ่งปกติคือ 360p
- ความละเอียดที่สูงกว่าต้องรวมสตรีมวิดีโอและเสียงที่แยกกัน และเครื่องมือนี้ไม่รวมให้
- ไม่มีการเข้ารหัสใหม่ ไม่มีลายน้ำ และไม่มีการเก็บไว้
- ลิงก์ไม่เคยถูกแคช เพราะผูกกับที่อยู่ของคุณและหมดอายุ
- เฉพาะวิดีโอสาธารณะเท่านั้น วิดีโอส่วนตัวและที่จำกัดตามอายุยังคงถูกบล็อก
คำถาม
เครื่องมือนี้ดาวน์โหลด 1080p จาก YouTube ได้ไหม
ไม่ได้ YouTube เก็บ 1080p เป็นสตรีมวิดีโอเดี่ยวและเสียงเดี่ยวที่แยกกัน และเครื่องมือนี้ไม่รวมให้ มันเสนอ MP4 ที่รวมแล้วซึ่ง YouTube เผยแพร่เป็นไฟล์เดียว ซึ่งปกติคือ 360p
ทำไมวิดีโอจึงเปิดในแท็บใหม่แทนที่จะดาวน์โหลดในหน้าเว็บ
เพราะ `googlevideo.com` ไม่ส่งส่วนหัว CORS หน้าเว็บจึงอ่านไบต์ไม่ได้ ลิงก์มีพารามิเตอร์ title ที่ทำให้ Google ตอบด้วย `content-disposition: attachment` เบราว์เซอร์ของคุณจึงบันทึกไฟล์แทนที่จะเล่น
ทำไมลิงก์เดียวกันบางครั้งแสดงคุณภาพต่างกัน
ตัวประมวลผลถาม YouTube ผ่านตัวตนไคลเอนต์ทางการหลายแบบ ซึ่งไม่ได้รับรูปแบบเดียวกัน การดึงลิงก์อีกครั้งหลังจากครู่หนึ่งอาจเปลี่ยนรายการได้