Try Free
← กลับไปที่บล็อก

ทำไมวิดีโอสตรีมมิ่งดาวน์โหลดไม่ได้: ตัดแบ่ง, blob, ลิงก์หมดอายุ

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

สาเหตุรากเหง้า: วิดีโอสตรีมมิ่งไม่เคยเป็นไฟล์เดียวสมบูรณ์

แก่นแท้ของสตรีมมิ่งคือ "เล่นไปดาวน์โหลดไป": วิดีโอถูกตัดเป็นชิ้นเล็ก ๆ หลายวินาที ส่งทีละส่วนผ่านคำขอเว็บปกติ แล้วเครื่องเล่นประกอบขึ้นแบบเรียลไทม์ — ไม่มีไฟล์ใหญ่สำเร็จรูปให้ดาวน์โหลด

ตามเอกสารนักพัฒนาอย่างเป็นทางการของ Apple โปรโตคอล HLS ของเขาตัดวิดีโอเป็นชิ้น ๆ หลายวินาทีแล้วส่งต่อผ่าน HTTP ทีละชิ้น — ซึ่งเป็นชั้นขนส่งพื้นฐานของแพลตฟอร์มวิดีโอจำนวนมหาศาลด้วย "วิดีโอหนึ่ง" ที่คุณเห็นในเครื่องเล่น ความจริงคือหลายร้อยชิ้นที่เย็บต่อกันไร้รอยตามลำดับในเพลย์ลิสต์:

  • ไฟล์เพลย์ลิสต์ (อย่าง m3u8) บันทึกที่อยู่และลำดับของทุกชิ้น
  • เครื่องเล่นดึงชิ้นตามลำดับ ถอดรหัส แล้วเล่นต่อกัน
  • ตัวดาวน์โหลดมองหา "ไฟล์วิดีโอไฟล์เดียว" จึงไม่เจออะไรเลยตามคาด

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

ลิงก์ blob คืออะไร: ทำไม "คัดลอกที่อยู่วิดีโอ" จึงไม่เวิร์ก

ที่อยู่วิดีโอที่คัดลอกด้วยคลิกขวา หลายครั้งเป็นการอ้างอิงในหน่วยความจำที่ขึ้นต้นด้วย blob: ไม่ชี้ไปที่ไฟล์ใดบนเซิร์ฟเวอร์ใดเลย

ตามเอกสารอย่างเป็นทางการของ MDN ลิงก์ blob คือการอ้างอิงใช้ครั้งเดียวไปยังข้อมูลในหน่วยความจำ: เครื่องเล่นดาวน์โหลดชิ้นเข้าหน่วยความจำแล้วประกอบแบบเรียลไทม์ จากนั้นส่งผลที่ประกอบแล้วให้แท็กเล่นภายใต้ที่อยู่ในหน่วยความจำ ซึ่งหมายความว่า:

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

ความเข้าใจผิดที่พบบ่อยคือ "ได้ที่อยู่เท่ากับได้วิดีโอ" — ที่อยู่ blob เป็นแค่ที่คั่นหนังสือในหน่วยความจำ ไม่ใช่ตัวไฟล์ ที่คั่นพ้นจากเล่มนั้นไปก็ไร้ค่า

ลิงก์หมดอายุและบิตเรตปรับตัว: จับได้ที่อยู่แปลว่าจับได้วิดีโอหรือ

แม้ลัดเลาะ blob แล้วได้ที่อยู่เซิร์ฟเวอร์จริงมา ข้างหน้ายังมีกลไกแบบพลวัตอีกสองตัวรออยู่: ลิงก์หมดอายุ และคุณภาพสลับเอง

  • ลายเซ็นมีเวลา: ที่อยู่เพลย์ลิสต์ที่แพลตฟอร์มส่งให้เครื่องเล่นส่วนใหญ่แถมลายเซ็นและกรอบเวลา — สั้นไม่กี่นาที ยาวไม่กี่ชั่วโมง — พ้นกำหนดคือปฏิเสธการเข้าถึงทันที คัดลอกที่อยู่ส่งเพื่อน เขาเปิดเจอแต่ข้อผิดพลาด
  • บิตเรตปรับตัว: โปรโตคอลอย่าง MPEG-DASH (มาตรฐานสากลที่นิยามใน ISO/IEC 23009-1) สร้างวิดีโอเดียวกันเป็นระดับคุณภาพเกินสิบระดับบวกหลายแทร็กเสียง แล้วเครื่องเล่นสลับระดับทีละชิ้นตามแบนด์วิดท์ตอนนั้นของคุณ การจับแบบคงที่มักได้แค่เศษของระดับใดระดับหนึ่ง ไม่กี่วินาทีต่อมาระดับเปลี่ยน สิ่งที่จับมาได้ก็เปลี่ยนไป
  • กำแพงการประกอบ: แม้จับชิ้นครบทุกชิ้น ก็ยังต้องรวมตามลำดับเพลย์ลิสต์และจับคู่เสียงกับภาพ — งานที่เครื่องเล่นทำแบบเรียลไทม์ ทำมือแทบเป็นไปไม่ได้

เพราะฉะนั้น "เครื่องมือวิเคราะห์ที่อยู่" แทบไร้ทางสู้สตรีมมิ่ง: หาเพลย์ลิสต์เจอ แต่ผ่านสามด่านไม่ได้ — หมดอายุ สลับระดับ ประกอบ

ชั้นกลไกสตรีมที่ขวางตัวดาวน์โหลด

กุญแจดอกที่สาม: ชิ้นส่วนของเนื้อหาป้องกันถูกเข้ารหัส

กลไกข้างบนอธิบายเรื่อง "หาไฟล์ไม่เจอ" แต่วิดีโอบนแพลตฟอร์มสมัครสมาชิกยังมีต่ออีกชั้น: ตัวชิ้นส่วนเองถูกเข้ารหัส จับมาได้ก็เล่นไม่ได้

กลไกเข้ารหัสและการให้สิทธิ์แบบนี้เราเคยลงลึกในบทวิเคราะห์เชิงเทคนิคก่อนหน้า ที่นี่ขอแค่ข้อสรุป: ข้อมูลชิ้นส่วนถูกเข้ารหัส กุญแจถอดรหัสถูกส่งชั่วคราวตอนเล่นและผูกกับเครื่องปัจจุบัน — ชิ้นที่จับมาได้ก็เปิดไม่ได้ อัดแบบฝืนด้วยซอฟต์แวร์จับหน้าจอ เจอการป้องกันแข็งแรงจะได้ภาพดำเต็มจอ (สาเหตุไฟล์จอดำและวิธีจัดการ ดูที่ คู่มือแก้จอดำ) วิดีโอบนแพลตฟอร์มสมัครสมาชิกอย่าง OnlyFans และ Fansly ส่วนใหญ่อยู่ในกรณีนี้ เล่นได้แต่เก็บไม่ได้เป็นเรื่องปกติ — ไม่ใช่เสีย แต่ออกแบบมาอย่างนั้น

สตรีมแบบไหน ใช้วิธีบันทึกแบบนั้น

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

ด้วย VidBrowser ใช้สี่ขั้นตอน:

ขั้นตอนที่ 1: ดาวน์โหลดและติดตั้ง VidBrowser

VidBrowser เป็นเบราว์เซอร์วิดีโอบนเดสก์ท็อปสำหรับ Windows และ Mac ใช้ดูวิดีโอ ตัดช่วงเวลา และบันทึกลงเครื่อง มีทั้งดาวน์โหลดและอัดวิดีโอในตัว ติดตั้งเสร็จในไม่กี่นาที

ขั้นตอนที่ 2: เปิดหน้าวิดีโอใน VidBrowser แล้วเล่น

เปิด VidBrowser เข้าเว็บที่ใส่วิดีโอไว้ (ต้องล็อกอินก็ล็อกอินก่อน) แล้วเล่นวิดีโอที่อยากบันทึก

ขั้นตอนที่ 3: ถ้าดาวน์โหลดตรงได้ ใช้ปุ่มดาวน์โหลดบันทึก

VidBrowser ตรวจจับทรัพยากรวิดีโอบนหน้าโดยอัตโนมัติ เมื่อเห็นไฟล์เดี่ยวที่ดาวน์โหลดได้ จะแสดงในแผง "คลังวิดีโอ" ด้านขวา — กดปุ่ม "ดาวน์โหลด" สีส้มเพื่อบันทึกเป็น MP4 (เลือกความละเอียดในเมนูกรองก่อนก็ได้)

ขั้นตอนที่ 4: ถ้าดาวน์โหลดไม่ได้ ใช้ฟีเจอร์อัดวิดีโอบันทึก

สตรีมตัดแบ่งไม่มีไฟล์เดี่ยว เนื้อหาป้องกันก็จับสตรีมเต็มไม่ได้ — สองกรณีนี้ใช้การอัด: เลื่อนเมาส์ไปบนวิดีโอ แถบควบคุมการอัดจะซ้อนขึ้นมา เลือกความเร็ว (1x แบบเรียลไทม์ หรือ 2x/4x ให้เสร็จเร็วขึ้น) กด "อัดทั้งหมด" เพื่ออัดทั้งวิดีโอ ปุ่มอัดด้านซ้ายเริ่มหรือหยุดชั่วคราวได้ตลอดเวลา วิดีโอที่อัดได้จะถูกบันทึกตามคุณภาพที่หน้าเว็บเล่นจริง และเปิดดูออฟไลน์ด้วยเครื่องเล่นใดก็ได้ (ขั้นตอนเต็มดาวน์โหลดบวกอัด ดูที่ คู่มืออัดวิดีโอและดาวน์โหลด)

FAQ

ทำไมบางวิดีโอกดดาวน์โหลดปุ๊บได้เลย บางวิดีโอพยายามแค่ไหนก็ไม่ได้?

ขึ้นอยู่กับวิธีส่งข้อมูล: หน้าที่แถมไฟล์วิดีโอสมบูรณ์มาให้เอง ตัวดาวน์โหลดจับตรงได้ ส่วนสตรีมตัดแบ่ง การเล่นแบบ blob และเนื้อหาป้องกันไม่มีไฟล์สำเร็จรูป ทางเดียวคืออัดภายในท่อการเล่น

ส่งที่อยู่ m3u8 ที่จับได้ให้คนอื่นใช้ต่อได้ไหม?

แทบไม่ได้เลย: ที่อยู่แบบนี้ส่วนใหญ่แถมลายเซ็นและเวลาหมดอายุ — บางอันไม่กี่นาทีก็ตาย — คนรับยังต้องมีเครื่องมือที่รองรับการเล่นแบบชิ้นส่วนและการประกอบเสียงภาพอีก จะแชร์ก็เซฟเป็นไฟล์สมบูรณ์ในเครื่องก่อนแล้วค่อยส่งจริงที่สุด

คุณภาพของการอัดเป็นอย่างไร?

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

บล็อกเพิ่มเติม