This script allows you to download videos on Rai Play
< Rai Play video downloadについてのフィードバック
Il codice subisce continue modifiche da anni perciò attualmente non è proprio molto ordinato. In ogni caso per la maggior parte dei casi ora è una "semplice" chiamata al relinker con user-agent raiweb
.
Per il taglia-e-cuci degli M3U8 se ne era parlato nei commenti sul blog, generalmente basta modificare un po' il percorso per ottenere il link al file MP4.
Sì… È che volevo capire se c'è una qualche logica già palese nel M3U8 per arrivare al link finale, oppure fai un loop tra un elenco di server (Rai) conosciuti finché non ottieni uno status "200"/"OK"/quellocheè.
E, in entrambi i casi, perché non puoi fare lo stesso direttamente nello script tramite Ajax piuttosto che 'scomodare' un server (che oltretutto s'impalla).
Ovvero… Io riesco - con due chiamate XHR e una regex - ad ottenere l'ultimo link che sta nel M3U8.
Esempio:
https://2uscreativem3-vh.akamaihd.net/i/podcastcdn/raiuno_2/nometrasmissione/Titolo_della_trasmissione/12345678_2400.mp4
Quello che mi sfugge è come automatizzare il "taglia-e-cuci".
Ari-TNX!
Solitamente è semplice trovare il server giusto, per esempio nel tuo caso è creativemedia3 anche se sicuramente si può fare una verifica anche degli altri (e viene fatta come piano B). Il ciclo è più utile per trovare la qualità migliore, spesso ottieni un link a 1800 anche se esiste 2400, 3200 o 5000.
Con alcune estensioni e browser non si può (o almeno poteva... dovrei verificare di nuovo) cambiare lo user-agent, per non parlare di quando lo script veniva aggiornato e passava una settimana prima che la gente scaricasse l'aggiornamento, nel frattempo continuando a dichiarare "non funziona".
Eheheh… :)
Infatti io ho mi sono fatto un sacco di snippet (o 'bookmarklet') che puntualmente devo modificare ogni volta che un determinato sito cambia anche solo il *nome* di un tag. Che certe volte uno pensa che te lo fanno apposta. (E magari è anche vero :)
Tornando "a bomba", però…
Solitamente è semplice trovare il server giusto, per esempio nel tuo caso è creativemedia3 anche se sicuramente si può fare una verifica anche degli altri (e viene fatta come piano B).
Ecco, appunto… Quindi esiste un elenco dei server utilizzati.
Dove lo trovo?
Il ciclo è più utile per trovare la qualità migliore, spesso ottieni un link a 1800 anche se esiste 2400, 3200 o 5000.
Nei link contenuti in molti M3U8 di solito il file col bitrate (indicato come "Bandwidth") più alto è l'ultimo della lista e le risoluzioni disponibili sono specificate in tutti i link. Quindi - almeno in quel caso - non serve nessun ciclo; basta una regex.
Ad esempio da questo:
#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1269000,RESOLUTION=736x414,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE https://uspushmp4sec2-vh.akamaihd.net/i/VOD/teche_root/YT_ITALIA_TECHE_HD/11045756_,1200,1800,.mp4.csmil/index_0_av.m3u8?null=0&id=AgBPG+gvF83cNeVofF9+Ge12g5YyvbQX+V6woB7qJS8WiwZMOBLrHJNlAuTZx300Fy+rCR%2fjhSDcyQ%3d%3d&hdntl=exp=1602075237~acl=%2f*~data=hdntl~hmac=0b9bc565a794d6754898e41ca829dd46e6a695508fdd73497638b7430fb7c500 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1907000,RESOLUTION=1024x576,CODECS="avc1.77.30, mp4a.40.2",CLOSED-CAPTIONS=NONE https://uspushmp4sec2-vh.akamaihd.net/i/VOD/teche_root/YT_ITALIA_TECHE_HD/11045756_,1200,1800,.mp4.csmil/index_1_av.m3u8?null=0&id=AgBPG+gvF83cNeVofF9+Ge12g5YyvbQX+V6woB7qJS8WiwZMOBLrHJNlAuTZx300Fy+rCR%2fjhSDcyQ%3d%3d&hdntl=exp=1602075237~acl=%2f*~data=hdntl~hmac=0b9bc565a794d6754898e41ca829dd46e6a695508fdd73497638b7430fb7c500
con un'espressione (js) tipo questa:
Match: /^.*https(.*?)\/(\d+)_.*?,(\d+),\..*$/s Replace: https$1/$2_$3.mp4
ottengo questo:
https://uspushmp4sec2-vh.akamaihd.net/i/VOD/teche_root/YT_ITALIA_TECHE_HD/11045756_1800.mp4
ovvero il (pre)-link al filmato mp4 con risoluzione e bitrate più alti.
Il problema è che poi non so come "tradurre" o decodificare quel "uspushmp4sec2" iniziale per arrivare al nome del server e di conseguenza al link finale.
Cioè… Arrivo a capire che è un pattern del genere: [us][push][mp4][sec2] dove la parte importante probabilmente è quel [sec2], ma se non conosco i nomi dei server Rai trovo non poche difficoltà a "indovinarli" :)
Ma comunque penso che lo script che hai sul server possa rispondere a tutti i miei dubbi, senza stare ad assillarti qua.
Se il problema è il disordine, non preoccuparti; non hai idea dei casini che combino io col php (procedurale!).
Se il problema è che temi che ti metta in croce per farmi spiegare il codice, *giuro* che non lo farò.
Se il problema è un altro… Boh! Dimmi qual è.
Io sto qua perché mi fa piacere confrontarmi sull'argomento con qualcuno che ne sa (moooollto) più di me.
Le funzionalità dello script non mi interessano più di tanto, né ho alcuna intenzione di "rubarti l'idea".
Sono solo curioso di vedere se è possibile fare tutto in javascript, in sostanza.
Ari-ari-TNX!
_
Faresti davvero molta meno fatica a richiamare il relinker con lo user-agent corretto (senza dover indovinare il dominio giusto, e così via). Non esiste una lista "ufficiale" Rai, dopo che hai visto passare migliaia di link a file MP4 diciamo che la decina di domini usati la noti. :)
di solito il file col bitrate (indicato come "Bandwidth") più alto è l'ultimo della lista
"Di solito" è un'espressione un po' tirata. Su moltissimi video trovi indicato 2400 o addirittura 1800 e poi esiste pure il 5000. ;)
La versione 11.0 dovrebbe rispondere più o meno a tutte le domande...
La versione 11.0 dovrebbe rispondere più o meno a tutte le domande...
WOW! Hai fatto un lavorone, complimenti! ;)
Mo' ci metto un console.log()
una riga sì e una no, così mi studio per bene tutto quello che succede :D
TANTA ROBA!! :)
Si impara più da questi "snippet" che dai varî tutorial in giro per il Webbe
Maaaa… approposito di "imparare"; si può avere anche il codice (php?) che hai sul server e che si occupa del parse degli M3U8?
Così noi impariamo ancora di più e chi ha un server ti alleggerisce pure un po' la banda ;)
TNX!