บริการ "บันทึกวิดีโอจาก YouTube" เหล่านี้ทำงานอย่างไร


62

ฉันหมายความว่าพวกเขาทำงานอย่างไร พวกเขาจะได้รับลิงก์ไปยังสตรีมวิดีโอได้อย่างไร (ไม่ใช่แค่หน้าเว็บที่มี Flash player)

ฉันค้นหาบนเว็บ แต่ไม่พบสิ่งใดที่มีประโยชน์ (ลิงก์ทั้งหมดชี้ไปที่บริการดังกล่าว

คำตอบ:


51

มีตัวดาวน์โหลดบรรทัดคำสั่งโอเพนซอร์ซที่ได้รับความนิยมมากเรียกyoutube-dlว่า มันคว้าลิงก์วิดีโอและไฟล์เสียงจริงจากลิงก์ YouTube ที่กำหนด - หรือเว็บไซต์วิดีโอยอดนิยมอื่น ๆ เช่น Vimeo, Yahoo! วิดีโอ uStream ฯลฯ

เพื่อดูว่าที่ทำดูเป็นระบาย YouTube มันมากเกินไปที่จะแสดงที่นี่ สกัดอื่น ๆ ที่มีอยู่สำหรับเว็บไซต์ที่เรียบง่าย Steven Penny มีเครื่องมือดาวน์โหลด JavaScriptสำหรับ YouTube เช่นกันซึ่งตรงไปตรงมามากกว่า

แต่โดยทั่วไปสำหรับเครื่องเล่นวิดีโอ Flash นั้นจะต้องเริ่มต้นและกำหนดค่าผ่าน JavaScript บางตัว เพียงแค่พูดเครื่องเล่นของวัตถุ Flash จะได้รับ URL ของสตรีมวิดีโอที่จะโหลด

ในการค้นหาสตรีมวิดีโอคุณจะต้องแยกวิเคราะห์รหัส HTML และ JS ของหน้าวิดีโอเพื่อค้นหารหัสการเริ่มต้นที่เกี่ยวข้องจากนั้นลองค้นหาลิงก์ไปยังไฟล์ MP4 ที่แท้จริง อาจมีข้อความธรรมดา แต่ก็สามารถสร้างได้ทันทีด้วยโทเค็นดาวน์โหลดบางตัว บ่อยครั้งที่ JavaScript ถูกทำให้งงงวยที่จะทำให้มันยากขึ้นในการสร้างมันขึ้นมาใหม่ หรือข้อมูลวิดีโออาจมีอยู่ในไฟล์ XML ที่โหลดโดย JS แบบอะซิงโครนัส

สำหรับวิดีโอดาวน์โหลด HTML5 แบบโปรเกรสซีฟมักจะมีการพูดถึงไฟล์ต้นฉบับโดยตรงในส่วนย่อยsourceของvideoแท็กดังนั้นหากคุณต้องการค้นหาหน้าเว็บที่mp4คล้ายกัน ตัวอย่างเช่นในรายการข่าวเยอรมันTagesschau 100คุณจะพบกับ:

<source src="http://media.tagesschau.de/video/2014/0626/TV-20140626-1649-5801.webl.h264.mp4" type="video/mp4">

สำหรับเทคโนโลยีการเล่นขั้นสูงเช่น MPEG DASH หรือ HTTP Live Streaming (HLS) ของ Apple คุณจะต้องแยกวิเคราะห์ไฟล์ข้อมูล meta เพื่อรับสตรีมวิดีโอจริง ไฟล์เมตา ( .mpdเช่นใน DASH และ.m3u8สำหรับ HLS) จะมีลิงก์ไปยังส่วนของวิดีโอและเสียงซึ่งคุณจะต้องรวมกันภายหลังเพื่อให้ได้ไฟล์ที่เล่นได้

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


3
คำถามหนึ่งนโยบายของ Youtube / Google เกี่ยวกับเรื่องนี้คืออะไร? พวกเขาตกลงกับสิ่งนี้หรือไม่มาก?
JMK

31
ข้อกำหนดในการให้บริการของ YouTube ใน§5.1.Lไม่อนุญาตให้บริโภคเนื้อหาของพวกเขาผ่านวิธีการอื่นใดนอกเหนือจากการสตรีมดังนั้นในทางทฤษฎีจะไม่ได้รับอนุญาต ในทางปฏิบัติพวกเขาจะไม่สามารถบังคับใช้แม้ว่า เครื่องมือดาวน์โหลดใด ๆ สามารถจำลองได้มากหรือน้อยว่าเป็นเพียงสตรีมมิ่ง
slhck

2
@StevenPenny คุณมีเวอร์ชั่นที่ไม่ย่อเล็กสุดหรือไม่?
TankorSmash

5
@slhck Flash สามารถสร้างคำขอ HTTP ได้ด้วยตัวเอง แต่จะใช้เอ็นจิน HTTP ของเบราว์เซอร์แทน หากแฟลชทำการร้องขอเบราว์เซอร์จะไม่ปรากฏให้เห็น แน่นอนว่าจะเหมาะสำหรับผู้โฆษณา ;)
Daniel B

3
@slhck พวกเขาไม่สามารถบังคับใช้โดยทางโปรแกรมแต่ถ้าพวกเขาออกจากทีมทนายความของพวกเขาพวกเขาสามารถบังคับใช้ตามกฎหมายได้หรือไม่?
Cruncher

35

บุ๊คมาร์คเล็ต YouTube

นี่คือวิธีที่ฉันทำกับ JavaScript

เริ่มด้วยytplayer.config.argsวัตถุ มี URL ทั้งหมดสำหรับวิดีโอ มันถูกแบ่งออกเป็น

url_encoded_fmt_stream_map // traditional: contains video and audio stream
adaptive_fmts              // DASH: contains video or audio stream

แต่ละรายการเหล่านี้เป็นอาร์เรย์ที่คั่นด้วยเครื่องหมายจุลภาคของสิ่งที่ฉันจะเรียกว่า "กระแสวัตถุ" "วัตถุกระแส" แต่ละคนจะมีค่าเช่นนี้

url  // direct HTTP link to a video
itag // code specifying the quality
s    // signature, security measure to counter downloading

แต่ละ URL จะได้รับการเข้ารหัสดังนั้นคุณจะต้องถอดรหัส ตอนนี้เป็นส่วนที่ยุ่งยาก

YouTube มีระดับความปลอดภัยอย่างน้อย 3 ระดับสำหรับวิดีโอของพวกเขา

unsecured // as expected, you can download these with just the unencoded URL
s         // see below
RTMPE     // uses "rtmpe://" protocol, no known method for these

โดยทั่วไปแล้ววิดีโอ RTMPE จะใช้กับภาพยนตร์เต็มความยาวอย่างเป็นทางการและได้รับการป้องกันด้วย SWF Verification Type 2 ซึ่งมีมา ตั้งแต่ปี 2011 และยังไม่ได้รับการออกแบบเชิงวิศวกรรมย้อนกลับ

วิดีโอประเภท "" เป็นวิดีโอที่ยากที่สุดที่สามารถดาวน์โหลดได้จริง คุณจะเห็นสิ่งเหล่านี้ในวิดีโอ VEVO และสิ่งที่คล้ายคลึง พวกเขาเริ่มต้นด้วยลายเซ็นเช่น

AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5

จากนั้นลายเซ็นต์จะถูกรบกวนด้วยฟังก์ชั่นเช่นนี้

function mo(a) {
  a = a.split("");
  a = lo.rw(a, 1);
  a = lo.rw(a, 32);
  a = lo.IC(a, 1);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 77);
  a = lo.IC(a, 3);
  a = lo.wS(a, 44);
  return a.join("")
}

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

http://s.ytimg.com/yts/jsbin/html5player-en_US-vflycBCEX.js

สิ่งนี้นำเสนอปัญหาของ นโยบายแหล่งกำเนิดเดียวกัน โดยพื้นฐานแล้วคุณไม่สามารถดาวน์โหลดไฟล์นี้ได้www.youtube.comเนื่องจากเป็นโดเมนที่ต่างกัน การแก้ปัญหาของปัญหานี้คือ ธ ด้วย CORS s.ytimg.comสามารถเพิ่มส่วนหัวนี้

Access-Control-Allow-Origin: http://www.youtube.com

www.youtube.comและมันจะช่วยให้จาวาสคริปต์ในการดาวน์โหลดได้จาก แน่นอนพวกเขาไม่ทำเช่นนี้ วิธีแก้ปัญหาสำหรับวิธีแก้ปัญหานี้คือการใช้พร็อกซี CORS นี่คือพร็อกซีที่ตอบสนองด้วยส่วนหัวต่อไปนี้สำหรับคำขอทั้งหมด

Access-Control-Allow-Origin: *

ดังนั้นตอนนี้คุณได้พร็อกซีไฟล์ JS ของคุณและใช้ฟังก์ชั่นเพื่อช่วงชิงลายเซ็นคุณสามารถใช้สิ่งนั้นในการสอบถามเพื่อดาวน์โหลดวิดีโอ


1
คุณรู้หรือไม่ว่า (สำหรับการเล่น DASH) วิธีที่เครื่องเล่น YouTube กำหนดช่วงไบต์ที่จะถูกร้องขอจากการนำเสนอสื่อ ไฟล์ MPD แสดงเฉพาะส่วนต่างๆ
slhck

2
ไม่ถูกต้อง .. มีไฟล์เดียวสำหรับวิดีโอและเสียง แต่ YouTube ขอให้พวกเขาตามช่วงไบต์ในหลายชิ้น หากคุณเปลี่ยนไปใช้คุณภาพอื่นก็จะเปลี่ยนช่วงไบต์ด้วย เพียงแค่สงสัยว่าผู้เล่นรู้ว่าวินาทีใดที่สอดคล้องกับการชดเชยไบต์
slhck

1
คุณสามารถยกตัวอย่างsวิดีโอRTMPEประเภทและวิดีโอประเภทได้หรือไม่
Chloe

@SurajJain นี่คือหน้าใหม่ - ฉันจะเขียนคำตอบนี้ใหม่เพราะฉันใช้วิธีอื่นตอนนี้github.com/svnpenn/umber/blob/master/bmklet/youtube/download.js
Steven Penny

ลิงค์นี้ให้ฉัน 404 คุณเอา repo ออกหรือไม่
darksoulsong

1

คำตอบของฉัน: ตั้งแต่วันที่ 22 มกราคม 2019 การใช้วิธีการเหล่านี้สามารถถูกจับได้หากคุณพยายามเลี่ยงผ่านโดยไม่ต้องเชื่อมโยงข้อมูลผู้ใช้ของคุณด้วย

ทำไม? ตั้งแต่ฉันผู้ใช้ใหม่เพื่อแพลตฟอร์มนี้ผมไม่สามารถแสดงความคิดเห็นสำหรับกฎที่ระบุโดย@ แดเนียล-B ตามToSใหม่(เป็นภาษาเยอรมันเช่นเดียวกับฉันในเยอรมนี; โปรดแปล) สำหรับ YouTube ภายใต้ $ 6.1 G $:

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

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


1
ยินดีต้อนรับนักเดินทางจากอนาคต ... มันไม่ชัดเจนว่าวิธีนี้ตอบคำถามของผู้เขียน
Ramhound

หากคุณต้องการเตือนผู้แต่งเกี่ยวกับคำตอบเฉพาะคุณควรส่งความคิดเห็นและลดคำตอบใด ๆ ที่คุณไม่คิดว่ามีประโยชน์เนื่องจากปัญหาทางกฎหมายที่อาจเกิดขึ้นได้ คำตอบนี้อ่านเพิ่มเติมเช่นเดียวกับสิ่งที่คุณจะพบในโพสต์ในกระดานสนทนาและ Super User ไม่ใช่ฟอรัมสนทนา
Ramhound
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.