@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.

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

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

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

Похожие вопросы