該存儲庫包含我用來下載LinkedIn實時視頻的腳本。
要使用腳本,請在linkedin.sh
中修改PUBLIC_URL
和VIDEO_ID
變量。
我最近在社區聚會上發表了演講,他們正在使用花哨的新LinkedIn Live來播放活動。賽后,我決定要看視頻的副本,但LinkedIn似乎並不同意我的視頻副本。另外,現有的視頻下載網站都沒有奏效,其他人在線提供的建議也沒有。顯然,LinkedIn改變了他們的視頻方式。所以。是網絡標籤!
這篇簡短的帖子記錄了我如何在Chrome Console和Shell腳本上進行一些黑客攻擊的LinkedIn視頻。您應該對命令行感到滿意,以便可以解決問題。
因此,您已經看到了一個LinkedIn帖子,其中包含您想要本地可用的視頻。我們首先單擊視頻,以便以劇院的模式打開。對於我的視頻,URL看起來像:
https://www.linkedin.com/video/live/urn:li:ugcPost:%UGC_POST_ID%/
加載頁面後,請勿播放- 打開Chrome Console,然後轉到網絡選項卡。現在點擊播放並查找“網絡”選項卡以manifest(format=m3u8-aapl-v3)
調用。這個電話似乎是在要求檢索視頻的可能變體,並且響應應看起來類似於:
#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)
上面的清單用於確定當BANDWIDTH
高於一定速率時應流QualityLevel
。我們將看到以後如何使用。
上述請求應在上述請求完成後不久提出的下一個興趣請求應具有名稱Manifest(video,format=m3u8-aapl-v3,audiotrack=audio_und)
。單擊它並轉到“響應”選項卡,您應該看到一個由這樣的行組成的巨大文件:
...
#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)
...
這些顯然定義了通過瀏覽器流式傳輸以形成完整視頻的視頻片段列表。
略低於上述請求,您將找到名為Fragments(video=%FRAGMENT_ID%,format=m3u8-aapl-v3,audiotrack=audio_und)
。好吧,那看起來不熟悉嗎?
查看這些請求的通話的完整URL(右鍵單擊行,複製為捲髮),您應該發現它類似於以下格式:
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)
注意QualityLevels
和Fragments
。這是檢索整理以形成視頻的數據片段的呼籲。
因此,我們現在知道視頻是如何流式傳輸的,我們可以通過以下方式最少複製此視頻。
manifest...
,請注意QualityLevel
Manifest...
,將URL複製為curl命令QualityLevel
s,修改捲曲請求中的URL,以使其質量最高manifest
文件。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 ;