Этот репозиторий содержит сценарий, который я использовал для загрузки LinkedIn Live Videos.
Чтобы использовать скрипт, измените переменные PUBLIC_URL
и VIDEO_ID
в linkedin.sh
.
Недавно я выступил на встрече с сообществом, где они использовали New Fancy LinkedIn Live, чтобы транслировать мероприятие. После события я решил, что хочу копию видео, но LinkedIn, похоже, не согласен со мной, что у меня должна быть копия моего видео. Кроме того, ни один из существующих веб -сайтов для загрузчиков видео не работал, и ни один из советов, данный другими людьми в Интернете, тоже не сделал. Видимо, LinkedIn изменил способ, которым они снимали видео. Так. Вкладка сети это было!
В этом коротком сообщении документируется, как мне удалось скачать видео LinkedIn с небольшим взломом на хромированных сценариях и сценариях оболочки. Вам должно быть комфортно с командной строкой, чтобы вещи могли работать.
Итак, вы видели пост LinkedIn с видео, которое вам нужно локально доступное. Мы начнем с нажатия на видео, чтобы оно открывалось в театральном режиме. Для моего видео URL выглядел как:
https://www.linkedin.com/video/live/urn:li:ugcPost:%UGC_POST_ID%/
Как только страница загружена, не нажимайте Play - откройте хромированную консоль и перейдите на вкладку «Сеть». Теперь нажмите «Играй» и посмотри на вкладку «Сеть» для вызова 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)
Приведенный выше манифест используется для определения какого QualityLevel
, когда BANDWIDTH
превышает определенную скорость. Посмотрим, как это используется позже.
Следующий запрос интереса, который должен быть вскоре после выполнения вышеуказанного запроса, должен иметь 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 -адрес вызова (щелкните правой кнопкой мыши в строке, скопируйте как Curl) этих запросов, и вы должны найти его напоминает следующий формат:
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 как команду CurlQualityLevel
S с шага 2, измените URL -адрес в запросе Curl, чтобы он высочайший качество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 ;