Skip to content

Instantly share code, notes, and snippets.

@if0rest
Last active March 7, 2025 19:52
Show Gist options
  • Save if0rest/e3fbe0790950b3e1e3d3e2fd5ec12a39 to your computer and use it in GitHub Desktop.
Save if0rest/e3fbe0790950b3e1e3d3e2fd5ec12a39 to your computer and use it in GitHub Desktop.
Как смотреть VK-трансляцию через десктопный медиаплеер

(Метод актуален на 27.01.2025). В конце более короткий способ

  1. Получаем ссылку на файл .m3u8. Я делаю на смартфоне связкой KateMobile + MXPlayer. Результат выглядит так:
    https://vkvsd52.okcdn.ru/hls/7614690757221.m3u8/sig/J6eD0sJY52U/srcIp/213.87.130.61/urls/45.136.22.54/expires/1738450126006/clientType/13/srcAg/UNKNOWN_ANDROID/fromCache/1/mid/8588981971813/id/7614690757221/video.m3u8?p

  2. Скачиваем .m3u8 файл через Download Master (лучше) или иным способом.

Если использовали DM, то после скачивания он сам проанализирует содержимое файла и извлечёт ссылки на доступные потоки.

Screenshot_1 Screenshot_2

Если развернуть ссылки целиком, в конце увидим указание на качество видеопотоков.

изображение

Уже на этом этапе можно Right Click -> Copy и вставить ссылку в проигрыватель, подерживающий потоковую трансляцию. Немного подумав, он начнёт воспроизведение.

изображение

  1. Но продолжим. Окрываем .m3u8 файл в блокноте и видим такую картину:
#EXTM3U
#EXT-X-VERSION:3

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2383966,RESOLUTION=1280x720,QUALITY=hd
7614690757221_high/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=559657,RESOLUTION=852x480,QUALITY=sd
7614690757221_medium/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=453277,RESOLUTION=640x360,QUALITY=low
7614690757221_low/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=205795,RESOLUTION=428x240,QUALITY=lowest
7614690757221_lowest/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6580680,RESOLUTION=1920x1080,QUALITY=full
7614690757221_fullhd/index.m3u8

Строки, начинающиеся с #EXT-X-STREAM-INF..., содержат описание потока, а прямо под ними ссылка на сам поток.

Из полученной в пункте #1 ссылки стираем video.m3u8?p и добавляем строку с нужным качеством.

  1. Оригинальная полная ссылка:
    https://vkvsd52.okcdn.ru/hls/7614690757221.m3u8/sig/J6eD0sJY52U/srcIp/213.87.130.61/urls/45.136.22.54/expires/1738450126006/clientType/13/srcAg/UNKNOWN_ANDROID/fromCache/1/mid/8588981971813/id/7614690757221/video.m3u8?p

  2. Убираем крайнее звено URI и добавляем строку с желаемым качеством:
    https://vkvsd52.okcdn.ru/hls/7614690757221.m3u8/.../id/7614690757221/ video.m3u8?p
    https://vkvsd52.okcdn.ru/hls/7614690757221.m3u8/.../id/7614690757221/ + 7614690757221_high/index.m3u8

  3. Получаем итоговую ссылку, которую скармливаем плееру:
    https://vkvsd52.okcdn.ru/hls/7614690757221.m3u8/sig/J6eD0sJY52U/srcIp/213.87.130.61/urls/45.136.22.54/expires/1738450126006/clientType/13/srcAg/UNKNOWN_ANDROID/fromCache/1/mid/8588981971813/id/7614690757221/7614690757221_high/index.m3u8


Получаем ссылку на трансляцию через Инструменты разраба в браузере

→ Активируем Панель разработчика
  → Включаем "Режим адаптивного дизайна", чтобы притвориться мобилкой и заходим на трансу
    → Вкладка "Сеть"
      → Фильтрация по запросу: "getVideoDiscover"
        → Получим что-то типа: "https://api.vkvideo.ru/method/video.getVideoDiscover?v=5.245&client_id=7879029"

В теле запроса будет:

{
  "rtmp": "rtmp://vkvsd256.okcdn.ru/playback/9654631410609?stkn=Z3AP1scbGSihpDZtND1DeCiD9PSztu-wVXW-M-TPSbO_qwqFr0wpzDGDJ3a20Ql74lmPhOUHaHw&uid=0&sp=uid,sp&sig=vlibqm4nyu",
  "cmaf": "https://vkvsd256.okcdn.ru/cmaf/7942858017457/sig/-PcC2bPbvKE/expires/1738436785715/srcIp/213.87.144.36/urls/45.136.22.55/clientType/14/srcAg/CHROME_ANDROID/mid/9654631410609/get/dash_9654631410609.4LjUIxb8Qk0.mpd",
  "hls_live": "https://vkvsd256.okcdn.ru/hls/7942858017457.m3u8/sig/-PcC2bPbvKE/expires/1738436785715/srcIp/213.87.144.36/urls/45.136.22.55/clientType/14/srcAg/CHROME_ANDROID/mid/9654631410609/video.m3u8?p",
  "hls_live_playback": "https://vkvsd256.okcdn.ru/hls/7942858017457_offset_p.m3u8/sig/-PcC2bPbvKE/expires/1738436785715/srcIp/213.87.144.36/urls/45.136.22.55/clientType/14/srcAg/CHROME_ANDROID/mid/9654631410609/video.m3u8?p",
  "dash_live": "https://vkvsd256.okcdn.ru/dash/stream_7942858017457/stream.manifest/sig/-PcC2bPbvKE/expires/1738436785715/srcIp/213.87.144.36/urls/45.136.22.55/clientType/14/srcAg/CHROME_ANDROID/mid/9654631410609/video",
  "dash_live_playback": "https://vkvsd256.okcdn.ru/dash/stream_7942858017457_offset_p/stream.manifest/sig/-PcC2bPbvKE/expires/1738436785715/srcIp/213.87.144.36/urls/45.136.22.55/clientType/14/srcAg/CHROME_ANDROID/mid/9654631410609/video",
  "failover_host": "vkvsd19.okcdn.ru"
},
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment