Come funzionano tutti questi servizi "Salva video da YouTube"?


62

Voglio dire, come funzionano, in generale? Come ricevono il collegamento a un flusso video stesso (non solo alla pagina che contiene un lettore Flash)?

Ho fatto una ricerca sul web ma non sono riuscito a trovare nulla di utile (tutti i collegamenti puntano a tali servizi, ma nessuno di loro dice come sono effettivamente implementati).

Risposte:


51

Esiste un downloader da riga di comando open source molto popolare chiamato youtube-dl, che fa esattamente questo. Raccoglie i collegamenti ai file audio e video effettivi da un determinato collegamento YouTube o qualsiasi altro sito di video Web popolare come Vimeo, Yahoo! Video, uStream, ecc.

Per vedere come è fatto, guarda nell'estrattore di YouTube . È troppo da mostrare qui. Esistono altri estrattori per siti più semplici . Steven Penny ha anche un semplice downloader JavaScript per YouTube, che è un po 'più semplice.

Fondamentalmente, per un lettore video Flash, deve essere inizializzato e configurato tramite alcuni JavaScript. In parole semplici, il player dell'oggetto Flash riceverà un URL di un flusso video da caricare.

Per trovare il flusso video, dovresti analizzare il codice HTML e JS della pagina del video per trovare il codice di inizializzazione pertinente, quindi da lì provare a trovare il collegamento al file MP4 effettivo. Potrebbe essere lì in chiaro, ma potrebbe anche essere generato al volo con alcuni token di download specifici. Spesso JavaScript viene offuscato per rendere più difficile la riprogettazione. Oppure le informazioni sul video potrebbero essere contenute in un file XML caricato in modo asincrono da JS.

Per i video a download progressivo HTML5, il file sorgente effettivo viene di solito menzionato direttamente nel sourcefiglio del videotag, quindi se cerchi la pagina mp4o simili. Ad esempio nel telegiornale tedesco Tagesschau 100 , troverai:

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

Per tecnologie di riproduzione più avanzate come MPEG DASH o HTTP Live Streaming (HLS) di Apple, è necessario analizzare un file di meta-informazioni per ottenere il flusso video effettivo. Il meta file ( .mpdad esempio in DASH e .m3u8per HLS) conterrà collegamenti a segmenti di video e audio, che in seguito dovresti combinare per ottenere un file riproducibile.

Non esiste una soluzione generale per questo. Richiede un'attenta ispezione e debug del sito di destinazione.


3
Una domanda, qual è la politica di Youtube / Google su questo? Stanno bene con questo, o non così tanto?
JMK,

31
I Termini di servizio di YouTube in §5.1.L vietano il consumo dei loro contenuti con qualsiasi mezzo diverso dallo streaming, quindi teoricamente non è permesso. In pratica, però, non saranno in grado di far valere ciò. Qualsiasi downloader può simulare più o meno che è solo streaming.
slhck,

2
@StevenPenny ne hai una versione non minimizzata?
TankorSmash,

5
@slhck Flash potrebbe anche effettuare richieste HTTP da solo. Invece, utilizza il motore HTTP del browser. Se Flash stesso effettuasse le richieste, non sarebbero "visibili" al browser. Certo sarebbe fantastico per gli inserzionisti. ;)
Daniel B,

3
@slhck non possono farcela a livello di programmazione , ma se avessero tirato fuori la loro squadra di avvocati avrebbero potuto farcela legalmente ?
Cruncher,

35

Bookmarklet di YouTube

Ecco come l'ho fatto con JavaScript

Inizia con l' ytplayer.config.argsoggetto. Questo contiene tutti gli URL per il video. È suddiviso in

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

Ognuno di questi è un array separato da virgole di ciò che definirei "oggetti stream". Ogni "oggetto stream" conterrà valori come questo

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

Ogni URL verrà codificato, quindi dovrai decodificarli. Ora la parte difficile.

YouTube ha almeno 3 livelli di sicurezza per i loro video

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

I video RTMPE sono in genere utilizzati su filmati ufficiali a lunghezza intera e sono protetti con il tipo di verifica SWF 2. È in circolazione dal 2011 e non è ancora stato progettato.

I video di tipo "s" sono i più difficili che possono essere effettivamente scaricati. Li vedrai tipicamente su video VEVO e simili. Iniziano con una firma come

AA5D05FA7771AD4868BA4C977C3DEAAC620DE020E.0F421820F42978A1F8EAFCDAC4EF507DB5

Quindi la firma viene confusa con una funzione come questa

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

Questa funzione è dinamica, in genere cambia ogni giorno. Per rendere più difficile la funzione è ospitata in un URL come

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

questo introduce il problema della politica della stessa origine . In sostanza, non è possibile scaricare questo file www.youtube.comperché sono domini diversi. Una soluzione alternativa a questo problema è CORS . Con CORS, è s.ytimg.compossibile aggiungere questa intestazione

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

e consentirebbe il download di JavaScript da www.youtube.com. Ovviamente non lo fanno. Una soluzione alternativa per questa soluzione alternativa consiste nell'utilizzare un proxy CORS. Questo è un proxy che risponde con la seguente intestazione a tutte le richieste

Access-Control-Allow-Origin: *

Quindi, ora che hai eseguito il proxy del tuo file JS e hai utilizzato la funzione per decodificare la firma, puoi utilizzarlo nella stringa di query per scaricare un video.


1
Ti capita di sapere (per la riproduzione DASH) come il lettore YouTube determina gli intervalli di byte da richiedere alla rappresentazione multimediale? Il file MPD elenca solo i segmenti.
slhck,

2
Non esattamente .. Esiste un singolo file per video e audio, ma YouTube li richiede per intervalli di byte, in diversi blocchi. Se passi a un'altra qualità, cambierà anche l'intervallo di byte. Mi chiedo solo come il giocatore sappia quale secondo corrisponde a quale offset di byte.
Slhck,

1
Puoi fare un esempio di stipo video e RTMPEtipo video?
Chloe,

@SurajJain qui è una nuova pagina - riscriverò questa risposta poiché uso un metodo diverso ora github.com/svnpenn/umber/blob/master/bmklet/youtube/download.js
Steven Penny

Il link mi dà un 404. Hai rimosso il repository?
darksoulsong

1

La mia risposta: dal 22 gennaio 2019, l'utilizzo di questi metodi può essere scoperto se si tenta di ignorare senza collegare anche le informazioni dell'utente.

Perché? poiché sono un nuovo utente di questa piattaforma, non posso commentare la regola specificata da @ Daniel-B . Secondo il nuovo ToS (in tedesco come lo sono in Germania; si prega di tradurre) per YouTube a $ 6,1 G $:

Accetti qualsiasi sistema automatizzato (incluso - ma non limitato a - qualsiasi robot, spider o lettore offline) di utilizzare quello sul sito Web accedendo in modo tale che un maggior numero di richieste al server entro un periodo di tempo specificato che YouTube abbia potuto ragionevolmente produrre come un essere umano nello stesso periodo di tempo utilizzando un browser Web standard non pubblicamente disponibile e non modificato;

Ora possono scoprire la durata del tempo per ogni richiesta e possono tracciare se stai violando. Come è possibile ora, dato questo scenario e il tuo indirizzo IP esterno sarà noto anche se usi una VPN per proteggerti senza collegare i dettagli dell'utente a nessun servizio.


1
Benvenuto viaggiatore dal futuro ... Non è chiaro come questo risponda alla domanda dell'autore
Ramhound,

Se volessi avvisare l'autore, per quanto riguarda una risposta specifica, avresti dovuto inviare un commento e sottovalutato qualsiasi risposta che non pensavi fosse utile a causa dei possibili problemi legali che potrebbero seguire. Questa risposta è più simile a ciò che potresti trovare in un post del forum di discussione e Super User non è un forum di discussione
Ramhound
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.