Làm thế nào để tất cả các video Save Save này từ các dịch vụ YouTube YouTube hoạt động?


62

Ý tôi là, làm thế nào để họ làm việc, nói chung? Làm cách nào để họ nhận được liên kết đến một luồng video (không chỉ trang chứa trình phát Flash)?

Tôi đã thực hiện tìm kiếm trên web nhưng không thể tìm thấy bất cứ điều gì hữu ích (tất cả các liên kết đều trỏ đến các dịch vụ như vậy, nhưng không ai trong số chúng cho biết chúng được thực hiện như thế nào).

Câu trả lời:


51

Có một trình tải xuống dòng lệnh mã nguồn rất phổ biến được gọi youtube-dl, thực hiện chính xác điều đó. Nó lấy các liên kết tệp video và âm thanh thực tế từ một liên kết YouTube cụ thể - hoặc bất kỳ trang web video phổ biến nào khác như Vimeo, Yahoo! Video, uStream, v.v.

Để xem cách thực hiện, hãy xem phần trích xuất YouTube . Đó là quá nhiều để hiển thị ở đây. Các trình trích xuất khác tồn tại cho các trang web đơn giản hơn . Steven Penny cũng có một trình tải xuống JavaScript đơn giản cho YouTube, điều này đơn giản hơn một chút.

Nhưng về cơ bản, đối với trình phát video Flash, nó phải được khởi tạo và định cấu hình thông qua một số JavaScript. Nói một cách đơn giản, trình phát của đối tượng Flash sẽ nhận được URL của luồng video để tải.

Để tìm luồng video, bạn phải phân tích mã HTML và mã JavaScript của trang video để tìm mã khởi tạo có liên quan, rồi từ đó cố gắng tìm liên kết đến tệp MP4 thực. Nó có thể ở đó trong bản rõ, nhưng nó cũng có thể được tạo ra một cách nhanh chóng với một số mã thông báo tải xuống cụ thể. Thông thường, JavaScript bị xáo trộn để làm cho việc tái thiết kế nó trở nên khó khăn hơn. Hoặc thông tin video có thể được chứa trong một tệp XML được tải không đồng bộ bởi JS.

Đối với video tải xuống lũy ​​tiến HTML5, tệp nguồn thực tế thường được đề cập trực tiếp trong phần sourcecon của videothẻ, vì vậy nếu bạn tìm kiếm trang mp4hoặc tương tự. Ví dụ: trên chương trình tin tức của Đức Tagesschau 100 , bạn sẽ tìm thấy:

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

Đối với các công nghệ phát lại nâng cao hơn như MPEG DASH hoặc Truyền trực tiếp HTTP (HLS) của Apple, bạn phải phân tích tệp thông tin meta để có được luồng video thực tế. Tệp meta ( .mpdví dụ: trong DASH và .m3u8cho HLS) sẽ chứa các liên kết đến các phân đoạn video và âm thanh mà sau này bạn phải kết hợp để có được một tệp có thể phát.

Không có giải pháp chung cho việc này. Nó yêu cầu kiểm tra cẩn thận và gỡ lỗi của trang đích.


3
Một câu hỏi, chính sách của Youtube / Google về vấn đề này là gì? Họ có ổn với điều này, hoặc không quá nhiều?
JMK

31
Điều khoản dịch vụ của YouTube trong §5.1.L không cho phép tiêu thụ nội dung của họ thông qua bất kỳ phương tiện nào khác ngoài phát trực tuyến, vì vậy về mặt lý thuyết là không được phép. Trong thực tế, họ sẽ không thể thực thi điều đó mặc dù. Bất kỳ trình tải xuống nào cũng có thể mô phỏng ít nhiều rằng nó chỉ phát trực tuyến.
slhck

2
@StevenPenny bạn có bất kỳ phiên bản rút gọn nào không?
TankorSmash

5
@slhck Flash cũng có thể tự thực hiện các yêu cầu HTTP. Thay vào đó, nó sử dụng công cụ HTTP của trình duyệt. Nếu Flash tự thực hiện các yêu cầu, chúng sẽ không thể hiển thị trên các trình duyệt. Chắc chắn sẽ là tuyệt vời cho các nhà quảng cáo. ;)
Daniel B

3
@slhck họ không thể thực thi nó theo chương trình , nhưng nếu họ đưa đội ngũ luật sư của họ ra thì họ có thể thi hành nó một cách hợp pháp không?
Cruncher

35

Bookmarklet YouTube

Đây là cách tôi đã làm với JavaScript

Bắt đầu với ytplayer.config.argsđối tượng. Điều này chứa tất cả các URL cho video. Nó được chia thành

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

Mỗi trong số này là một mảng được phân tách bằng dấu phẩy của cái mà tôi sẽ gọi là "đối tượng luồng". Mỗi "đối tượng luồng" sẽ chứa các giá trị như thế này

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

Mỗi URL sẽ được mã hóa, do đó bạn sẽ cần giải mã chúng. Bây giờ là phần khó khăn.

YouTube có ít nhất 3 cấp độ bảo mật cho video của họ

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

Các video RTMPE thường được sử dụng trên các bộ phim có thời lượng đầy đủ chính thức và được bảo vệ với Loại xác minh SWF 2. Điều này đã có từ năm 2011 và vẫn chưa được thiết kế ngược.

Các loại video "s" là khó nhất thực sự có thể được tải xuống. Bạn sẽ thấy những thứ này trên các video của VEVO và những thứ tương tự. Họ bắt đầu bằng một chữ ký như

AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5

Sau đó, chữ ký được xáo trộn với một chức năng như thế này

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("")
}

Chức năng này là năng động, nó thường thay đổi mỗi ngày. Để làm cho khó khăn hơn, chức năng được lưu trữ tại một URL như

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

điều này giới thiệu vấn đề của chính sách cùng nguồn gốc . Về cơ bản, bạn không thể tải xuống tệp này www.youtube.comvì chúng là các miền khác nhau. Một cách giải quyết của vấn đề này là CORS . Với CORS, s.ytimg.comcó thể thêm tiêu đề này

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

và nó sẽ cho phép JavaScript tải xuống từ www.youtube.com. Tất nhiên họ không làm điều này. Một cách giải quyết cho cách giải quyết này là sử dụng proxy CORS. Đây là một proxy đáp ứng với tiêu đề sau cho tất cả các yêu cầu

Access-Control-Allow-Origin: *

Vì vậy, bây giờ bạn đã ủy quyền tệp JS của mình và sử dụng hàm để xáo trộn chữ ký, bạn có thể sử dụng nó trong chuỗi truy vấn để tải xuống video.


1
Bạn có tình cờ biết (để phát lại DASH) cách trình phát YouTube xác định phạm vi byte được yêu cầu từ đại diện phương tiện không? Tệp MPD chỉ liệt kê các phân đoạn.
slhck

2
Không chính xác .. Có một tệp duy nhất cho video và âm thanh, nhưng YouTube yêu cầu chúng theo phạm vi byte, trong một số đoạn. Nếu bạn chuyển sang chất lượng khác, nó cũng sẽ thay đổi phạm vi byte. Chỉ cần tự hỏi làm thế nào người chơi biết thứ hai tương ứng với byte bù nào.
slhck

1
Bạn có thể cho một ví dụ về một sloại video và RTMPEloại video?
Chloe

@SurajJain đây là trang mới - Tôi sẽ viết lại câu trả lời này khi tôi sử dụng một phương pháp khác bây giờ github.com/svnpenn/umber/blob/master/bmklet/youtube/doad.js
Steven Penny

Liên kết cung cấp cho tôi 404. Bạn đã xóa repo chưa?
darksoulsong

1

Câu trả lời của tôi: từ ngày 22 tháng 1 năm 2019, sử dụng các phương pháp này có thể bị bắt nếu bạn cố gắng bỏ qua mà không liên kết thông tin người dùng của bạn.

Tại sao? vì tôi là người dùng mới cho nền tảng này, tôi không thể nhận xét quy tắc được chỉ định bởi @ Daniel-B . Theo ToS mới (bằng tiếng Đức như tôi đang ở Đức; vui lòng dịch) cho YouTube dưới $ 6,1 G $:

Bạn đồng ý bất kỳ hệ thống tự động nào (bao gồm - nhưng không giới hạn ở - mọi robot, trình đọc ngoại tuyến hoặc trình đọc ngoại tuyến) để sử dụng hệ thống đó trên trang web truy cập theo cách mà nhiều yêu cầu hơn đến máy chủ trong thời gian được YouTube chỉ định có thể tạo ra một cách hợp lý như một con người trong cùng khoảng thời gian sử dụng trình duyệt web tiêu chuẩn chưa được chỉnh sửa công khai;

Bây giờ họ có thể tìm ra khoảng thời gian cho mỗi yêu cầu và có thể theo dõi nếu bạn vi phạm. Làm thế nào có thể bây giờ, với kịch bản này và địa chỉ IP bên ngoài của bạn sẽ được biết ngay cả khi bạn sử dụng VPN để tự bảo vệ mình mà không liên kết chi tiết của người dùng với bất kỳ dịch vụ nào.


1
Chào mừng du khách đến từ tương lai ... Không rõ điều này trả lời câu hỏi của tác giả như thế nào
Ramhound 27/12/18

Nếu bạn muốn cảnh báo tác giả, liên quan đến một câu trả lời cụ thể, bạn nên gửi bình luận và từ chối bất kỳ câu trả lời nào bạn không nghĩ là hữu ích do các vấn đề pháp lý có thể xảy ra. Câu trả lời này đọc giống như những gì bạn sẽ tìm thấy trên một bài đăng trên diễn đàn thảo luận và Super User, không phải là một diễn đàn thảo luận
Ramhound
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.