@Urbansamurai

Как архитектурно устроен стриминг в SoundCloud?

Все, что пока я понял, это что генерится signed url для определенного трека и выглядит он так:

https://cf-hls-media.sndcdn.com/media/9cfdVetE6Xak.128.mp3?{...Signed Url Credentials}


Далее происходит какой-то мэджик. Начинается стриминг - поочередные GET запросы по тому же пути, что в signed url, но с указанием диапазона байтов в виде .../media/from/to/...

https://cf-hls-media.sndcdn.com/media/2075166/2234825/9cfdVetE6Xak.128.mp3?{...Signed Url Credentials}


При этом чанки с cloudfront-а можно взять только если указать Range в заголовках запроса. Lambda не способна на это, так как не имеет права менять заголовок Range. Через свой reverse proxy стрим гнать невыгодно...разве что используется Amazon API Gateway.

Помогите пожалуйста найти решение.
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
@Urbansamurai Автор вопроса
Ну что же...после долгих исследований, могу сказать, что устроен он очень сложно. Во-первых, поддерживаются разные форматы (hls, opus, chromecast, http). Данные из запроса /media/from/to/ все-таки преобразуются на стороне amazon в range заголовки. Аудио данные тщательно парсятся, учитывая стандарты кодека. Если это MP3, то парсится каждый фрейм и организуется безшовное воспроизведение. Всё кэшируется на стороне клиента.

Подобное open-source решение нашел только одно и только для MP3 формата: Phonograph.js
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 200 000 до 600 000 ₽
vivaCRM Москва
от 200 000 до 250 000 ₽
Unicorn Санкт-Петербург
До 350 000 ₽
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект