Dieses Repository enthält ein Skript, mit dem ich LinkedIn Live -Videos heruntergeladen habe.
Um das Skript zu verwenden, ändern Sie die Variablen PUBLIC_URL
und VIDEO_ID
in linkedin.sh
.
Ich habe kürzlich bei einem Community -Treffen einen Vortrag gehalten, bei dem sie den ausgefallenen neuen LinkedIn Live verwendeten, um die Veranstaltung zu streamen. Post-Event entschied ich, dass ich eine Kopie des Videos wollte, aber LinkedIn schien mir nicht zuzustimmen, dass ich eine Kopie meines Videos haben sollte. Außerdem funktionierte keiner der vorhandenen Video -Downloader -Websites, und keiner der Ratschläge anderer Leute online. Anscheinend hatte LinkedIn die Art und Weise verändert, wie sie Videos gemacht haben. Also. Die Registerkarte "Netzwerk" war es!
Dieser kurze Beitrag dokumentiert, wie ich es geschafft habe, ein LinkedIn -Video mit ein wenig Hacking auf die Chrome -Konsolen- und Shell -Skripte herunterzuladen. Sie sollten sich mit der Befehlszeile wohl fühlen, damit die Dinge funktionieren.
Sie haben also einen LinkedIn -Beitrag mit einem Video gesehen, das lokal verfügbar ist. Wir klicken damit, auf das Video zu klicken, damit es sich in einem kinemartigen Modus öffnet. Für mein Video sah die URL aus wie:
https://www.linkedin.com/video/live/urn:li:ugcPost:%UGC_POST_ID%/
Sobald die Seite geladen ist, klicken Sie nicht auf das Spiel - Öffnen Sie die Chromkonsole und gehen Sie zum Netzwerk -Registerkarte. Drücken Sie nun das Spielen und suchen Sie auf die Registerkarte "Netzwerk" für ein manifest(format=m3u8-aapl-v3)
. Dieser Anruf scheint eine Anfrage zu stellen, um die möglichen Varianten des Videos abzurufen, und die Antwort sollte ähnlich aussehen wie bei:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=351536,RESOLUTION=340x192,CODECS="avc1.64000d,mp4a.40.5"
QualityLevels(200000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXT-X-STREAM-INF:BANDWIDTH=709236,RESOLUTION=384x216,CODECS="avc1.640015,mp4a.40.5"
QualityLevels(550000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXT-X-STREAM-INF:BANDWIDTH=1015836,RESOLUTION=512x288,CODECS="avc1.640015,mp4a.40.5"
QualityLevels(850000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXT-X-STREAM-INF:BANDWIDTH=1526836,RESOLUTION=704x396,CODECS="avc1.64001e,mp4a.40.5"
QualityLevels(1350000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXT-X-STREAM-INF:BANDWIDTH=2395536,RESOLUTION=960x540,CODECS="avc1.64001f,mp4a.40.5"
QualityLevels(2200000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXT-X-STREAM-INF:BANDWIDTH=3724136,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.5"
QualityLevels(3500000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXT-X-STREAM-INF:BANDWIDTH=138976,CODECS="mp4a.40.5"
QualityLevels(128000)/Manifest(audio_und,format=m3u8-aapl-v3)
Das obige Manifest wird verwendet, um zu bestimmen, welcher QualityLevel
gestreamt werden soll, wenn die BANDWIDTH
über einer bestimmten Rate liegt. Wir werden sehen, wie das später verwendet wird.
Die nächste Interessenanfrage, die kurz nach Abschluss der obigen Anfrage erfolgen sollte, sollte das Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
. Wenn Sie darauf klicken und auf die Registerkarte Antwort gehen, sollten Sie eine riesige Datei sehen, die aus solchen Zeilen besteht:
...
#EXTINF:2.000000,no-desc
Fragments(video=%FRAGMENT_ID_1%,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXTINF:2.000000,no-desc
Fragments(video=%FRAGMENT_ID_2%,format=m3u8-aapl-v3,audiotrack=audio_und)
#EXTINF:2.000000,no-desc
Fragments(video=%FRAGMENT_ID_3%,format=m3u8-aapl-v3,audiotrack=audio_und)
...
Diese definieren anscheinend die Liste der Videofragmente, die durch Ihre Browser streamen, um das vollständige Video zu bilden.
Wenn Sie leicht unter der obigen Anfrage schauen, finden Sie Netzwerke namens Fragments(video=%FRAGMENT_ID%,format=m3u8-aapl-v3,audiotrack=audio_und)
. Sieht das nicht vertraut aus?
Schauen Sie sich die vollständige URL des Anrufs an (mit der rechten Maustaste auf Zeile, kopieren Sie als Curl) dieser Anfragen und Sie sollten feststellen, dass er dem folgenden Format ähnelt:
https://streamwus2-livectorprodmedia11-usw22.licdn.com/%UUID%/%SOME_VIDEO_ID%-livemanifest.ism/QualityLevels(2200000)/Fragments(video=%FRAGMENT_ID%,format=m3u8-aapl-v3,audiotrack=audio_und)
Beachten Sie die QualityLevels
und Fragments
. Dies ist der Anruf, der die Datenfragmente abholt, die zur Bildung Ihres Videos zusammengestellt werden.
Wir wissen also jetzt, wie das Video gestreamt wird. Wir können dies minimal replizieren, um:
manifest...
Beachten Sie den QualityLevel
Manifest...
Kopieren Sie die URL als Curl -BefehlQualityLevel
S aus Schritt 2, ändern Sie die URL in der Curl -Anfrage, damit sie von höchster Qualität istmanifest
ein.cat ./manifest | grep -v '#' | cut -f 2 -d '=' | cut -f 1 -d ',' > ./fragment_ids
extrahieren cat ./manifest | grep -v '#' | cut -f 2 -d '=' | cut -f 1 -d ',' > ./fragment_ids
touch video.mp4
while read FRAGMENT_ID ; do
echo ' processing ${FRAGMENT_ID} ' ;
curl ... >> video.mp4
done < ./fragment_ids ;