#NEWLINE# @ utils . enforce_id_param #NEWLINE# def get_stream_urls( self , song_id ) : #NEWLINE# #INDENT# 'Returns a list of urls that point to a streamable version of this song.\n\n        If you just need the audio and are ok with gmusicapi doing the download,\n        consider using :func:`get_stream_audio` instead.\n        This abstracts away the differences between different kinds of tracks:\n\n            * normal tracks return a single url\n            * All Access tracks return multiple urls, which must be combined\n\n        :param song_id: a single song id.\n\n        While acquiring the urls requires authentication, retreiving the\n        contents does not.\n\n        However, there are limitations on how the stream urls can be used:\n\n            * the urls expire after a minute\n            * only one IP can be streaming music at once.\n              Other attempts will get an http 403 with\n              ``X-Rejected-Reason: ANOTHER_STREAM_BEING_PLAYED``.\n\n        *This is only intended for streaming*. The streamed audio does not contain metadata.\n        Use :func:`get_song_download_info` or :func:`Musicmanager.download_song\n        <gmusicapi.clients.Musicmanager.download_song>`\n        to download files with metadata.\n        ' #NEWLINE# res = self . _make_call ( webclient . GetStreamUrl , song_id ) #NEWLINE# try : #NEWLINE# #INDENT# return [ res [ 'url' ] ] #NEWLINE# #UNINDENT# except KeyError : #NEWLINE# #INDENT# return res [ 'urls' ]