Diese Software ist für meinen persönlichen Gebrauch bestimmt und ich bin nicht verantwortlich für die Art und Weise, wie Sie sie verwenden. Also, meiden Sie Ärger, machen Sie Gläser und keine Kriege!
Eine meiner beruflichen Tätigkeiten besteht darin, die Bekanntheit von Redis zu verbreiten, und dazu gehören auch Video- und Live-Webinare. In letzter Zeit mache ich Live-Auftritte auf LinkedIn, übertrage meine Live-Auftritte über Zoom und erinnere mich nicht immer daran, auf die Schaltfläche „Aufzeichnen“ zu klicken.
Glücklicherweise speichert LinkedIn die Aufzeichnung meines Live-Auftritts jedoch als „Zuvor live aufgezeichnet“, sodass sie später angesehen werden kann. Ich habe keine Ahnung von der Aufbewahrung, die LinkedIn für diese Videos vorsieht, bin mir aber sicher, dass es keine Möglichkeit bietet, solche Videos herunterzuladen.
Also habe ich gegoogelt und konnte nichts Ernstes finden. YouTube-Downloader, Pinterest-Downloader, Facebook-Downloader, aber alle Downloader im Zusammenhang mit LinkedIn waren nur Fake.
Daher muss ich meinen eigenen LinkedIn Video Downloader erstellen! ?
Nun, die Idee war... Ich glaube nicht, dass ich in der Quelle 1 einen Link (src oder href) zu einem Video in irgendeinem Format (mp4, webm, vid mkv, avi, mov usw.) finden werde. , aber ich denke, ich werde etwas zum Thema Video-Streaming finden ... aber nicht in der Quelle 1 , sicherlich auf Netzwerkebene.
Also habe ich Chrome und seine DevTools-Leiste geöffnet, das Netzwerkfenster ausgewählt, dann die URL meines LinkedIn-Videoereignisses in die Adressleiste eingegeben (eingefügt) und die Eingabetaste gedrückt!
Und das habe ich bekommen.
Jetzt muss ich etwas finden, das mich in Bezug auf Video/Stream/Chunks/Binär/was auch immer anspricht ... Also habe ich angefangen, durch das Netzwerkfenster zu scrollen, und nach ein paar Scrolls hörte ich die erste Glocke! ?
Ein genauerer Blick in die gleiche Schriftrolle, und ich habe auch andere Informationen gefunden. ?
Ja, Metadaten, aber ich weiß, dass wir am Ziel sind! Aber mal sehen, was wir bisher bekommen haben:
Jetzt brauchen wir diese Fragmente.
Scrollen Sie etwas weiter nach unten und hier ist das erste Fragment. ?
Endlich ein Binärformat! Muss ein Fragment des Films sein.
Ein kurzer Check mit Curl...
Terminal öffnen, kopieren und einfügen...
foogaro@MBP-di-Luigi tmp % curl ' https://streamweu-livectorprodmedia17-euwe.licdn.com/44eefc72-771d-4bfd-8985-aede1310be0f/L4E609f69d951866001-livemanifest.ism/QualityLevels(3200000)/Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und) ' --compressed
Warning: Binary output can mess up your terminal. Use " --output - " to tell
Warning: curl to output it to your terminal anyway, or consider " --output
Warning: <FILE> " to save to a file.
foogaro@MBP-di-Luigi tmp % curl ' https://streamweu-livectorprodmedia17-euwe.licdn.com/44eefc72-771d-4bfd-8985-aede1310be0f/L4E609f69d951866001-livemanifest.ism/QualityLevels(3200000)/Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und) ' --compressed -O
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 158k 100 158k 0 0 868k 0 --:--:-- --:--:-- --:--:-- 924k
foogaro@MBP-di-Luigi tmp % ll
total 320
drwxr-xr-x 3 foogaro staff 96 24 Ago 22:37 .
drwxr-xr-x 6 foogaro staff 192 24 Ago 22:37 ..
-rw-r--r-- 1 foogaro staff 162808 24 Ago 22:37 Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und)
foogaro@MBP-di-Luigi tmp % file Fragments ( video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und )
Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und): MPEG transport stream data
foogaro@MBP-di-Luigi tmp % curl ' https://streamweu-livectorprodmedia17-euwe.licdn.com/44eefc72-771d-4bfd-8985-aede1310be0f/L4E609f69d951866001-livemanifest.ism/QualityLevels(3200000)/Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und) ' --compressed -o video.mpeg
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 158k 100 158k 0 0 926k 0 --:--:-- --:--:-- --:--:-- 981k
foogaro@MBP-di-Luigi tmp % ll
total 640
drwxr-xr-x 4 foogaro staff 128 24 Ago 22:39 .
drwxr-xr-x 6 foogaro staff 192 24 Ago 22:37 ..
-rw-r--r-- 1 foogaro staff 162808 24 Ago 22:37 Fragments(video=65886000,format=m3u8-aapl-v3,audiotrack=audio_und)
-rw-r--r-- 1 foogaro staff 162808 24 Ago 22:39 video.mpeg
foogaro@MBP-di-Luigi tmp %
Mal sehen, ob es ein echtes Video ist ...
Es handelt sich um ein echtes Video mit einer Länge von etwa 2 Sekunden, was der TARGETDURATION entspricht, die wir in der Liste der vollständigen Fragmente gefunden haben. ?
Scrollen Sie weiter und hier sind sie.
Fragmente, ich sehe überall Fragmente.
Ich werde den Code nicht beschreiben, Sie können ihn sich selbst ansehen, aber ich kann Ihnen sagen, was benötigt wurde:
Die Umsetzung ist nach bestem Wissen und Gewissen vorzunehmen, d.h. es funktioniert auf meinem Rechner!
Der letzte Teil der Implementierung, das Herunterladen/Rückstreamen der Datei, war dank @swathisprasad (Swathi Prasad) und ihrem Repo https://github.com/swathisprasad/download-using-streaming-response-body möglich
Im Übrigen natürlich dank StackOverflow.
Probieren Sie es mit Docker aus, wenn Sie möchten:
foogaro@MBP-di-Luigi linkedin-video-downloader % docker run -it --rm=true -p 8080:8080 foogaro/linkedin-video-downloader
. ____ _ __ _ _
/ \ / ___ ' _ __ _ _(_)_ __ __ _
( ( )___ | ' _ | ' _| | ' _ / _ ` |
\ / ___) | | _) | | | | | || (_ | | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.0)
2022-08-24 22:57:01.107 INFO 1 --- [ main] c.foogaro.data.LinkedInVideoApplication : Starting LinkedInVideoApplication v1.0.0 using Java 11.0.16.1 on c543811fe9f3 with PID 1 (/app/app.jar started by root in /app)
2022-08-24 22:57:01.121 INFO 1 --- [ main] c.foogaro.data.LinkedInVideoApplication : No active profile set, falling back to 1 default profile: "default"
2022-08-24 22:57:03.037 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2022-08-24 22:57:03.060 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-08-24 22:57:03.060 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.63]
2022-08-24 22:57:03.171 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-08-24 22:57:03.171 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1969 ms
2022-08-24 22:57:03.900 INFO 1 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page template: index
2022-08-24 22:57:04.286 INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 1 endpoint(s) beneath base path ' /actuator '
2022-08-24 22:57:04.363 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ' '
2022-08-24 22:57:04.391 INFO 1 --- [ main] c.foogaro.data.LinkedInVideoApplication : Started LinkedInVideoApplication in 3.931 seconds (JVM running for 4.532)
2022-08-24 22:57:05.282 INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet ' dispatcherServlet '
2022-08-24 22:57:05.283 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet ' dispatcherServlet '
2022-08-24 22:57:05.289 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
2022-08-24 22:57:21.779 INFO 1 --- [nio-8080-exec-7] c.f.d.c.LinkedInVideoController : Steaming video download as: linkedin-video-1661421441774.zip
2022-08-24 22:57:21.800 INFO 1 --- [ taskExecutor-1] c.f.d.c.LinkedInVideoController : Video ID: c50f2327-7fa7-4cc8-8a2c-35711eb5296d/L4E60a4445e9d065000
2022-08-24 22:57:21.800 INFO 1 --- [ taskExecutor-1] c.f.d.c.LinkedInVideoController : Quality Level: 3200000
2022-08-24 22:57:21.991 INFO 1 --- [ taskExecutor-1] c.f.d.c.LinkedInVideoController : Number of video fragments: 2154
Vielen Dank fürs bisherige Lesen!
Wenn es Ihnen gefallen hat oder Sie es nützlich fanden, geben Sie mir einen Stern!
PRs sind herzlich willkommen, sowohl im Frontend als auch im Backend! ?
Ich habe gelogen, ich habe in der Quelle der Seite nach dem Link des Videos gesucht! ? ↩ ↩ 2