本软件仅供我个人使用,我对您的使用方式不承担任何责任。所以,远离麻烦,制造罐子而不是战争!
我的工作活动之一是传播有关 Redis 的信息,这也适用于视频和实时网络研讨会。最近,我在 LinkedIn 上进行直播,通过 Zoom 进行直播,但我并不总是记得点击“录制”按钮。
不过,幸运的是,LinkedIn 将我的直播录制保留为“之前录制的直播”,以便以后观看。我不知道 LinkedIn 为这些视频提供的保留情况如何,但我确信它没有提供下载此类视频的方法。
于是,我用谷歌搜索了一下,没有发现任何严重的问题。 YouTube下载器、Pinterest下载器、Facebook下载器,但所有与LinkedIn相关的下载器都是假的。
因此,我需要构建自己的 LinkedIn 视频下载器! ?
现在,我的想法是...我不认为我会找到某种格式(mp4、webm、vid mkv、avi、mov 等)的某些视频源1的链接(src 或 href) ,但我确实认为我会找到与视频流相关的东西......但不是在源1中,当然是在网络级别。
因此,我打开 Chrome 及其 DevTools 栏,选择“网络”面板,然后在地址栏中输入(粘贴)我的 LinkedIn 视频事件 URL,然后按 Enter 键!
这就是我得到的。
现在我需要找到一些关于视频/流/块/二进制/任何东西的东西......所以我开始滚动“网络”面板,滚动几次后我听到了第一个铃声! ?
在同一卷轴上更好看,我还发现了其他信息。 ?
是的,元数据,但我知道我们正在实现这一目标!但让我们看看到目前为止我们得到了什么:
现在我们需要这些碎片。
再向下滚动一点,这是第一个片段。 ?
最后是二进制格式!应该是电影的片段。
使用curl 快速检查...
打开终端,复制并粘贴...
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 %
来看看这个视频是不是真的...
这是一个真实的视频,长度约为 2 秒,与我们在完整片段列表中找到的 TARGETDURATION 相符。 ?
继续滚动,它们就在这里。
碎片,我到处都看到碎片。
我不打算描述代码,你可以自己看一下,但我可以告诉你需要什么:
该实现应尽最大努力考虑,这意味着它可以在我的计算机上运行!
由于@swathisprasad (Swathi Prasad) 和她的仓库 https://github.com/swathisprasad/download-using-streaming-response-body,最后的实现部分(下载/流式传输文件)得以实现
其余的,当然要感谢 StackOverflow。
如果你愿意,可以尝试使用 docker:
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
感谢您到目前为止的阅读!
如果您喜欢或觉得有用,请给我一个星星!
无论是前端还是后端,PR 都非常受欢迎! ?
我撒谎了,我确实在页面来源中查找了视频的链接! ? ↩ ↩ 2