Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How has soundcloud hidden the URL of streaming audio

I am trying to hide the URL of my audio streams for my HTML5 player and was really struggling to think of a way to do so and then I realised, soundcloud must hide the URL's of their streams. So i went onto soundcloud, opened up the console and played a track but I couldn't see any obvious way that the URL is hidden. After this I took a look at the DOM tree to see if there was any kind of audio information in there but I found nothing! There's not even an ID for the player/audio so i'm very confused as to how soundcloud have done it.

Now I have done as best as I can so far with hiding the audio URL. I have put an ID in the DOM for the track, got that ID when the play button is clicked and retrieved the URL for that ID from the database. The obvious problem with that is that anyone willing enough can just go to the console and get the URL from the network events.

I am not trying to break past soundcloud's security to download tracks I shouldn't be. I'm just curious as to how they've hidden the URL. Now i'm also curious as to how each track is distinguished as there's nothing in the DOM distinguishing them (not that I found on my brief look anyway).

So, in short, does anyone have any ideas on how soundcloud has achieved this or how this could be achieved?

like image 300
Jacob Windsor Avatar asked Jul 26 '13 23:07

Jacob Windsor


People also ask

Is SoundCloud a streaming link?

SoundCloud is an online audio streaming and distribution platform that allows users to upload, stream, promote, and share music and podcasts. SoundCloud is free, with paid subscriptions offering ad-free listening and offline listening options for fans.

How do I find my SoundCloud URL?

In SoundCloud, search for the music you want. Click Share on the music. Copy the URL.

How do I enable streaming on SoundCloud?

You can activate this feature by tapping the bottom right symbol to access the 'More' page and then tapping 'Settings'. From this menu Choose 'Streaming Quality' and then tap 'High Quality audio'.

Can you embed a private SoundCloud link?

Embed codes allow your track to be shared to blogs and websites through our embedded players. You can make the embed code private, and only visible for yourself, or enable it for anyone to share through your track's Permissions tab.


1 Answers

Soundcloud is pretty much a pure JS site.

As you said, there is no ID of the song loaded with the HTML. The way songs are recognized is by the page URL. The is done via. this url (example):

https://api.sndcdn.com/resolve?url=https%3A//soundcloud.com/hoodinternet/joywave-tongues-hood-internet-remix&_status_code_map%5B302%5D=200&_status_format=json&client_id=YOUR_CLIENT_ID

This returns something like this:

{"status":"302 - Found","location":"https://api.soundcloud.com/tracks/100270342?client_id=YOUR_CLIENT_ID"}

Next up it loads the location URL, from the JSON above. This returns a bunch of information about the track, including:

stream_url: "https://api.soundcloud.com/tracks/100270342/stream"

Then it loads this URL:

https://api.sndcdn.com/i1/tracks/100270342/streams?client_id=YOUR_CLIENT_IT

Which returns a response like this:

{"http_mp3_128_url":"https://ec-media.soundcloud.com/2gNVBYiZ06bU.128.mp3?ff61182e3c2ecefa438cd021sdf02d0e385713f0c1faf3b0339595664fe070de810d30a8e3a1186eda958909e9ed97799adfeceabc135efac83aee4271217a108450591db3b88\u0026AWSAccessKeyId=AKIAsdfJ4IAZE5EOIdsf7PA7VQ\u0026Expires=1374883403\u0026Signature=%2B1%2B7dfdfLN4NWP3C3bNF3gizSEVIU%3D"}

So that's how they hide their stream URL's. The only non obvious part is that they find the song ID, by hitting an API with the URL as a parameter. Same can be done with download URL's on tracks that support it.

like image 150
scandinavian_ Avatar answered Nov 04 '22 16:11

scandinavian_