Announcement

Collapse
No announcement yet.

CLI to get stream rate, source ?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    CLI to get stream rate, source ?

    > Please give specific example of URL where info through "more" menu (or
    > default WebGUI LHS when playing) is better than what is provided through
    > tags.


    And please explain why you'd trust that menu more than you would trust
    the extracted headers. IIRC that menu comes from TuneIn - who is NOT the
    streaming service. The streaming service should know better.

    #2
    CLI to get stream rate, source ?

    Is there any command to get (PcP):
    - the radio name ?
    - the actual stream rate (from radio (ex 192kpbs) or USB storage) (tried songinfo bitrate ?) ?
    - the actual source (radio, USB or Airplay) ?

    Thanks

    Comment


      #3
      No.

      This is all in the LMS server, you need to research that. Using dev tools on your browser while watching the LMS web interface, you can see the commands being used. But they will be using the jsonrpc interface.
      piCorePlayer a small player for the Raspberry Pi in RAM.
      Homepage: https://www.picoreplayer.org

      Please donate if you like the piCorePlayer

      Comment


        #4
        Try somehting like

        xx:yy:bd:2b:52:zz status - 1 tags:uBIrT

        Look at the documentation for the meaning of the tags.

        Not all information is available about all playing items.
        For example, sample rate is often not available for radio stations/streaming sources whereas bit rate is usually available.

        Radio name has no real meaning within LMS (they are usually marked as "remote" by LMS) - it is often an URL tagged as a Favorites or a Menu item. The data supplied by the station or the plugin (e.g. BBC Sounds) when streaming is all that available for streaming sources. Files may be different.

        Comment


          #5
          Originally posted by bpa View Post
          Try somehting like

          xx:yy:bd:2b:52:zz status - 1 tags:uBIrT

          Look at the documentation for the meaning of the tags.

          Not all information is available about all playing items.
          For example, sample rate is often not available for radio stations/streaming sources whereas bit rate is usually available.

          Radio name has no real meaning within LMS (they are usually marked as "remote" by LMS) - it is often an URL tagged as a Favorites or a Menu item. The data supplied by the station or the plugin (e.g. BBC Sounds) when streaming is all that available for streaming sources. Files may be different.
          I made some tests wiht some tags:
          r give bitrate: most of the time it's 0. Rarely it's the real value.
          T give: most of the time 44100 (standard CD sampling rate, who give this value ? Pcp or the radio station??) ( 48000 sometimes). If the tag r give the real value no value for T.

          Is it possible to get the always the real value ? Because for all stations,
          on the LCD iafter pressing "+", choose "Tuneln radio Options", and "Choose stream". All streams available are displayed with the sampling rate. Most of the time it's 128, 256 or 320kbps.
          How to get this value because it's the real value and it's a good quality indicator.

          Thanks
          Last edited by PaulH; 2022-02-12, 18:33.

          Comment


            #6
            Originally posted by PaulH View Post
            I make some tests wiht some tags:
            r give bitrate: most of the time it's 0. Rarely it's the real value.
            T give: most of the time 44100 (standard CD sampling rate, who give this value ? Pcp or the radio station??) ( 48000 sometimes). If the tag r give the real value no value for T.

            Is it possible to get the always the real value ? Because for all stations,
            on the LCD iafter pressing "+", choose "Tuneln radio Options", and "Choose stream". All streams available are displayed with the sampling rate. Most of the time it's 128, 256 or 320kbps.
            How to get this value because it's the real value and it's a good quality indicator.
            TBH I don't know, You may have to look through the UI code to be sure.
            Sometime the displayed bitrate is a string created by a plugin or an associated metadata helper and so may not be "correct" as plugin can created anything.

            edit:
            All streams available are displayed with the sampling rate. Most of the time it's 128, 256 or 320kbps.
            Just to clarify terminology. Sampling rate (tag 'T') is the number of samples per sec (i.e. Hz) which will normally be 44100, 48000, 96000 etc.
            Bit rate (tag 'r') is the data rate of the audio data stream and will be in bits per/sec (i.e bps or kbps).

            Code:
            my %tagMap = (
            	# Tag    Tag name             Token            Track method         Track field
            	#------------------------------------------------------------------------------
            	  'u' => ['url',              'LOCATION',      'url'],              #url
            	  'o' => ['type',             'TYPE',          'content_type'],     #content_type
            	                                                                    #titlesort
            	                                                                    #titlesearch
            	  'a' => ['artist',           'ARTIST',        'artistName'],       #->contributors
            	  'e' => ['album_id',         '',              'albumid'],          #album
            	  'l' => ['album',            'ALBUM',         'albumname'],        #->album.title
            	  't' => ['tracknum',         'TRACK',         'tracknum'],         #tracknum
            	  'n' => ['modificationTime', 'MODTIME',       'modificationTime'], #timestamp
            	  'D' => ['addedTime',        'ADDTIME',       'addedTime'],        #added_time
            	  'U' => ['lastUpdated',      'UPDTIME',       'lastUpdated'],      #updated_time
            	  'f' => ['filesize',         'FILELENGTH',    'filesize'],         #filesize
            	                                                                    #tag
            	  'i' => ['disc',             'DISC',          'disc'],             #disc
            	  'j' => ['coverart',         'SHOW_ARTWORK',  'coverArtExists'],   #cover
            	  'x' => ['remote',           '',              'remote'],           #remote
            	                                                                    #audio
            	                                                                    #audio_size
            	                                                                    #audio_offset
            	  'y' => ['year',             'YEAR',          'year'],             #year
            	  'd' => ['duration',         'LENGTH',        'secs'],             #secs
            	                                                                    #vbr_scale
            	  'r' => ['bitrate',          'BITRATE',       'prettyBitRate'],    #bitrate
            	  'T' => ['samplerate',       'SAMPLERATE',    'samplerate'],       #samplerate
            	  'I' => ['samplesize',       'SAMPLESIZE',    'samplesize'],       #samplesize
            	  'H' => ['channels',         'CHANNELS',      'channels'],         #channels
            	  'F' => ['dlna_profile',     'DLNA_PROFILE',  'dlna_profile'],     #dlna_profile
            	                                                                    #block_alignment
            	                                                                    #endian
            	  'm' => ['bpm',              'BPM',           'bpm'],              #bpm
            	  'v' => ['tagversion',       'TAGVERSION',    'tagversion'],       #tagversion
            	# 'z' => ['drm',              '',              'drm'],              #drm
            	  'M' => ['musicmagic_mixable', '',            'musicmagic_mixable'], #musicmagic_mixable
            	                                                                    #musicbrainz_id
            	                                                                    #lastplayed
            	                                                                    #lossless
            	  'w' => ['lyrics',           'LYRICS',        'lyrics'],           #lyrics
            	  'R' => ['rating',           'RATING',        'rating'],           #rating
            	  'O' => ['playcount',        'PLAYCOUNT',     'playcount'],        #playcOunt
            	  'Y' => ['replay_gain',      'REPLAYGAIN',    'replay_gain'],      #replay_gain
            	                                                                    #replay_peak
            
            	  'c' => ['coverid',          'COVERID',       'coverid'],          # coverid
            	  'K' => ['artwork_url',      '',              'coverurl'],         # artwork URL
            	  'B' => ['buttons',          '',              'buttons'],          # radio stream special buttons
            	  'L' => ['info_link',        '',              'info_link'],        # special trackinfo link for i.e. Pandora
            	  'N' => ['remote_title'],                                          # remote stream title
            	  'E' => ['extid',            '',              'extid'],            # a track's external identifier (eg. on an online music service)
            
            
            	# Tag    Tag name              Token              Relationship     Method          Track relationship
            	#--------------------------------------------------------------------------------------------------
            	  's' => ['artist_id',         '',                'artist',        'id'],           #->contributors
            	  'A' => ['<role>',            '<ROLE>',          'contributors',  'name'],         #->contributors[role].name
            	  'S' => ['<role>_ids',        '',                'contributors',  'id'],           #->contributors[role].id
            
            	  'q' => ['disccount',         '',                'album',         'discc'],        #->album.discc
            	  'J' => ['artwork_track_id',  'COVERART',        'album',         'artwork'],      #->album.artwork
            	  'C' => ['compilation',       'COMPILATION',     'album',         'compilation'],  #->album.compilation
            	  'X' => ['album_replay_gain', 'ALBUMREPLAYGAIN', 'album',         'replay_gain'],  #->album.replay_gain
            
            	  'g' => ['genre',             'GENRE',           'genre',         'name'],         #->genre_track->genre.name
            	  'p' => ['genre_id',          '',                'genre',         'id'],           #->genre_track->genre.id
            	  'G' => ['genres',            'GENRE',           'genres',        'name'],         #->genre_track->genres.name
            	  'P' => ['genre_ids',         '',                'genres',        'id'],           #->genre_track->genres.id
            
            	  'k' => ['comment',           'COMMENT',         'comment'],                       #->comment_object
            
            );
            
            # Map tag -> column to avoid a huge if-else structure
            my %colMap = (
            	g => 'genres.name',
            	G => 'genres',
            	p => 'genres.id',
            	P => 'genre_ids',
            	a => 'contributors.name',
            	's' => 'contributors.id',
            	l => 'albums.title',
            	e => 'tracks.album',
            	d => 'tracks.secs',
            	i => 'tracks.disc',
            	q => 'albums.discc',
            	t => 'tracks.tracknum',
            	y => 'tracks.year',
            	m => 'tracks.bpm',
            	M => sub { $_[0]->{'tracks.musicmagic_mixable'} ? 1 : 0 },
            	k => 'comment',
            	o => 'tracks.content_type',
            	v => 'tracks.tagversion',
            	r => sub { Slim::Schema::Track->buildPrettyBitRate( $_[0]->{'tracks.bitrate'}, $_[0]->{'tracks.vbr_scale'} ) },
            	f => 'tracks.filesize',
            	j => sub { $_[0]->{'tracks.cover'} ? 1 : 0 },
            	J => 'albums.artwork',
            	n => 'tracks.timestamp',
            	F => 'tracks.dlna_profile',
            	D => 'tracks.added_time',
            	U => 'tracks.updated_time',
            	C => sub { $_[0]->{'albums.compilation'} ? 1 : 0 },
            	Y => 'tracks.replay_gain',
            	X => 'albums.replay_gain',
            	R => 'tracks_persistent.rating',
            	O => 'tracks_persistent.playcount',
            	T => 'tracks.samplerate',
            	I => 'tracks.samplesize',
            	u => 'tracks.url',
            	w => 'tracks.lyrics',
            	x => sub { $_[0]->{'tracks.remote'} ? 1 : 0 },
            	c => 'tracks.coverid',
            	H => 'tracks.channels',
            	E => 'tracks.extid',
            );
            Last edited by bpa; 2022-02-12, 18:28.

            Comment


              #7
              Originally posted by bpa View Post
              TBH I don't know, You may have to look through the UI code to be sure.
              Sometime the displayed bitrate is a string created by a plugin or an associated metadata helper and so may not be "correct" as plugin can created anything.

              edit:


              Just to clarify terminology. Sampling rate (tag 'T') is the number of samples per sec (i.e. Hz) which will normally be 44100, 48000, 96000 etc.
              Bit rate (tag 'r') is the data rate of the audio data stream and will be in bits per/sec (i.e bps or kbps).

              Code:
              my %tagMap = (
              # Tag    Tag name             Token            Track method         Track field
              #------------------------------------------------------------------------------
                'u' => ['url',              'LOCATION',      'url'],              #url
                'o' => ['type',             'TYPE',          'content_type'],     #content_type
                                                                                  #titlesort
                                                                                  #titlesearch
                'a' => ['artist',           'ARTIST',        'artistName'],       #->contributors
                'e' => ['album_id',         '',              'albumid'],          #album
                'l' => ['album',            'ALBUM',         'albumname'],        #->album.title
                't' => ['tracknum',         'TRACK',         'tracknum'],         #tracknum
                'n' => ['modificationTime', 'MODTIME',       'modificationTime'], #timestamp
                'D' => ['addedTime',        'ADDTIME',       'addedTime'],        #added_time
                'U' => ['lastUpdated',      'UPDTIME',       'lastUpdated'],      #updated_time
                'f' => ['filesize',         'FILELENGTH',    'filesize'],         #filesize
                                                                                  #tag
                'i' => ['disc',             'DISC',          'disc'],             #disc
                'j' => ['coverart',         'SHOW_ARTWORK',  'coverArtExists'],   #cover
                'x' => ['remote',           '',              'remote'],           #remote
                                                                                  #audio
                                                                                  #audio_size
                                                                                  #audio_offset
                'y' => ['year',             'YEAR',          'year'],             #year
                'd' => ['duration',         'LENGTH',        'secs'],             #secs
                                                                                  #vbr_scale
                'r' => ['bitrate',          'BITRATE',       'prettyBitRate'],    #bitrate
                'T' => ['samplerate',       'SAMPLERATE',    'samplerate'],       #samplerate
                'I' => ['samplesize',       'SAMPLESIZE',    'samplesize'],       #samplesize
                'H' => ['channels',         'CHANNELS',      'channels'],         #channels
                'F' => ['dlna_profile',     'DLNA_PROFILE',  'dlna_profile'],     #dlna_profile
                                                                                  #block_alignment
                                                                                  #endian
                'm' => ['bpm',              'BPM',           'bpm'],              #bpm
                'v' => ['tagversion',       'TAGVERSION',    'tagversion'],       #tagversion
              # 'z' => ['drm',              '',              'drm'],              #drm
                'M' => ['musicmagic_mixable', '',            'musicmagic_mixable'], #musicmagic_mixable
                                                                                  #musicbrainz_id
                                                                                  #lastplayed
                                                                                  #lossless
                'w' => ['lyrics',           'LYRICS',        'lyrics'],           #lyrics
                'R' => ['rating',           'RATING',        'rating'],           #rating
                'O' => ['playcount',        'PLAYCOUNT',     'playcount'],        #playcOunt
                'Y' => ['replay_gain',      'REPLAYGAIN',    'replay_gain'],      #replay_gain
                                                                                  #replay_peak
              
                'c' => ['coverid',          'COVERID',       'coverid'],          # coverid
                'K' => ['artwork_url',      '',              'coverurl'],         # artwork URL
                'B' => ['buttons',          '',              'buttons'],          # radio stream special buttons
                'L' => ['info_link',        '',              'info_link'],        # special trackinfo link for i.e. Pandora
                'N' => ['remote_title'],                                          # remote stream title
                'E' => ['extid',            '',              'extid'],            # a track's external identifier (eg. on an online music service)
              
              
              # Tag    Tag name              Token              Relationship     Method          Track relationship
              #--------------------------------------------------------------------------------------------------
                's' => ['artist_id',         '',                'artist',        'id'],           #->contributors
                'A' => ['<role>',            '<ROLE>',          'contributors',  'name'],         #->contributors[role].name
                'S' => ['<role>_ids',        '',                'contributors',  'id'],           #->contributors[role].id
              
                'q' => ['disccount',         '',                'album',         'discc'],        #->album.discc
                'J' => ['artwork_track_id',  'COVERART',        'album',         'artwork'],      #->album.artwork
                'C' => ['compilation',       'COMPILATION',     'album',         'compilation'],  #->album.compilation
                'X' => ['album_replay_gain', 'ALBUMREPLAYGAIN', 'album',         'replay_gain'],  #->album.replay_gain
              
                'g' => ['genre',             'GENRE',           'genre',         'name'],         #->genre_track->genre.name
                'p' => ['genre_id',          '',                'genre',         'id'],           #->genre_track->genre.id
                'G' => ['genres',            'GENRE',           'genres',        'name'],         #->genre_track->genres.name
                'P' => ['genre_ids',         '',                'genres',        'id'],           #->genre_track->genres.id
              
                'k' => ['comment',           'COMMENT',         'comment'],                       #->comment_object
              
              );
              
              # Map tag -> column to avoid a huge if-else structure
              my %colMap = (
              g => 'genres.name',
              G => 'genres',
              p => 'genres.id',
              P => 'genre_ids',
              a => 'contributors.name',
              's' => 'contributors.id',
              l => 'albums.title',
              e => 'tracks.album',
              d => 'tracks.secs',
              i => 'tracks.disc',
              q => 'albums.discc',
              t => 'tracks.tracknum',
              y => 'tracks.year',
              m => 'tracks.bpm',
              M => sub { $_[0]->{'tracks.musicmagic_mixable'} ? 1 : 0 },
              k => 'comment',
              o => 'tracks.content_type',
              v => 'tracks.tagversion',
              r => sub { Slim::Schema::Track->buildPrettyBitRate( $_[0]->{'tracks.bitrate'}, $_[0]->{'tracks.vbr_scale'} ) },
              f => 'tracks.filesize',
              j => sub { $_[0]->{'tracks.cover'} ? 1 : 0 },
              J => 'albums.artwork',
              n => 'tracks.timestamp',
              F => 'tracks.dlna_profile',
              D => 'tracks.added_time',
              U => 'tracks.updated_time',
              C => sub { $_[0]->{'albums.compilation'} ? 1 : 0 },
              Y => 'tracks.replay_gain',
              X => 'albums.replay_gain',
              R => 'tracks_persistent.rating',
              O => 'tracks_persistent.playcount',
              T => 'tracks.samplerate',
              I => 'tracks.samplesize',
              u => 'tracks.url',
              w => 'tracks.lyrics',
              x => sub { $_[0]->{'tracks.remote'} ? 1 : 0 },
              c => 'tracks.coverid',
              H => 'tracks.channels',
              E => 'tracks.extid',
              );
              Quite frequently, these informations are not available to plugins, so they are incorrect or missing.

              I’ve tried to make them available for most streaming services and plugins can use that when they use the built-in remote scanner but they don’t/can’t always.

              For example, in some of my more exotics plugins, it’s adts frames which are directly received and these can be read directly by non-SB players. If the metatdata does not give those informations, then you have to unpack at least one adts frame and I can understand why not everybody does it.
              LMS 8.2 on Odroid-C4 - SqueezeAMP!, 5xRadio, 5xBoom, 2xDuet, 1xTouch, 1xSB3. Sonos PLAY:3, PLAY:5, Marantz NR1603, Foobar2000, ShairPortW, 2xChromecast Audio, Chromecast v1 and v2, Squeezelite on Pi, Yamaha WX-010, AppleTV 4, Airport Express, GGMM E5, RivaArena 1 & 3

              Comment


                #8
                Originally posted by philippe_44 View Post
                Quite frequently, these informations are not available to plugins, so they are incorrect or missing.

                I’ve tried to make them available for most streaming services and plugins can use that when they use the built-in remote scanner but they don’t/can’t always.

                For example, in some of my more exotics plugins, it’s adts frames which are directly received and these can be read directly by non-SB players. If the metatdata does not give those informations, then you have to unpack at least one adts frame and I can understand why not everybody does it.

                Thanks philippe_44 and bpa !

                I was wondering if it was possible for the plugin to get this value (bit rate) through a backdoor because this value exists (on the LCD press "+", choose "Tuneln radio Options", and "Choose stream".) ?
                Thanks

                Comment


                  #9
                  Originally posted by PaulH View Post
                  I was wondering if it was possible for the plugin to get this value (bit rate) through a backdoor because this value exists (on the LCD press "+", choose "Tuneln radio Options", and "Choose stream".) ?
                  No.

                  The info from the UI is part of the UI - plugins (or internal LMS for native streams) provides info which is stored as part of a LMS track/song object as well as metadata when playing. The tags are used to retrieve specific data from the track/Song object.

                  Please give specific example of URL where info through "more" menu (or default WebGUI LHS when playing) is better than what is provided through tags.

                  edit:

                  As you can see from code snippet the bitrate (tag 'r') is a string which is composed to be "pretty".
                  Code:
                  r => sub { Slim::Schema::Track->buildPrettyBitRate( $_[0]->{'tracks.bitrate'}, $_[0]->{'tracks.vbr_scale'} ) },
                  Last edited by bpa; 2022-02-13, 10:19.

                  Comment


                    #10
                    JSON request are the same the CLI just packedged using HTTP.

                    To see what JSON requests the Material UI is using. Open the Material UI with the command below and all JSON request/response will be logged to the Browser Web developer console.
                    Code:
                    http://localhost:9000/material/?debug=json
                    Replace localhost with IP address of LMS server if necessary

                    Example below of playing a RadioFrance station and looking at "More"

                    Code:
                    [09:35:27] JSON UPDATING (00:04:20:16:07:0e) material.min.js:236:300
                    [09:35:27] JSON REQ: ["00:04:20:16:07:0e",["status","-",1,"tags:cdegiloqrstuyAABKNST"]] material.min.js:236:300
                    [09:35:27] JSON PLAYER (00:04:20:16:07:0e): {"player_ip":"192.168.0.49:53704","power":1,"remote":1,"playlist repeat":0,"playlist mode":"off","signalstrength":0,"player_name":"Squeezebox Receiver","mode":"play","current_title":"franceinter-hifi.aac","playlist_tracks":1,"mixer volume":50,"player_connected":1,"playlist shuffle":0,"rate":1,"playlist_cur_index":"0","seq_no":0,"playlist_loop":[{"type":"aac","samplerate":"48000","bitrate":"128kbps CBR","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","id":"-93963708846232","year":"0","duration":"2829","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","coverid":"-93963708846232","playlist index":0,"artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","title":"L'embellie"}],"playlist_timestamp":1644744921.32209,"time":5.52668807029724,"remoteMeta":{"id":"-93963708846232","title":"L'embellie","coverid":"-93963708846232","duration":"2829","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","type":"aac","bitrate":"128kbps CBR","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","year":"0","artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","samplerate":"48000"},"digital_volume_control":1} material.min.js:236:300
                    [09:35:32] JSON UPDATING (00:04:20:16:07:0e) material.min.js:236:300
                    [09:35:32] JSON REQ: ["00:04:20:16:07:0e",["status","-",1,"tags:cdegiloqrstuyAABKNST"]] material.min.js:236:300
                    [09:35:32] JSON PLAYER (00:04:20:16:07:0e): {"player_ip":"192.168.0.49:53704","power":1,"remote":1,"playlist mode":"off","signalstrength":0,"playlist repeat":0,"player_name":"Squeezebox Receiver","mode":"play","current_title":"franceinter-hifi.aac","playlist_tracks":1,"mixer volume":50,"player_connected":1,"rate":1,"playlist shuffle":0,"playlist_cur_index":"0","seq_no":0,"playlist_loop":[{"year":"0","duration":"2829","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","type":"aac","bitrate":"128kbps CBR","samplerate":"48000","id":"-93963708846232","title":"L'embellie","coverid":"-93963708846232","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","playlist index":0}],"playlist_timestamp":1644744921.32209,"time":10.5386320533752,"remoteMeta":{"id":"-93963708846232","title":"L'embellie","coverid":"-93963708846232","duration":"2829","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","type":"aac","bitrate":"128kbps CBR","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","year":"0","artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","samplerate":"48000"},"digital_volume_control":1} material.min.js:236:300
                    [09:35:37] JSON UPDATING (00:04:20:16:07:0e) material.min.js:236:300
                    [09:35:37] JSON REQ: ["00:04:20:16:07:0e",["status","-",1,"tags:cdegiloqrstuyAABKNST"]] material.min.js:236:300
                    [09:35:37] JSON PLAYER (00:04:20:16:07:0e): {"playlist_cur_index":"0","playlist shuffle":0,"rate":1,"seq_no":0,"playlist_loop":[{"duration":"2829","year":"0","id":"-93963708846232","type":"aac","samplerate":"48000","bitrate":"128kbps CBR","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","title":"L'embellie","playlist index":0,"artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","coverid":"-93963708846232"}],"remoteMeta":{"id":"-93963708846232","title":"L'embellie","coverid":"-93963708846232","duration":"2829","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","type":"aac","bitrate":"128kbps CBR","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","year":"0","artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","samplerate":"48000"},"playlist_timestamp":1644744921.32209,"time":15.551132101059,"digital_volume_control":1,"power":1,"player_ip":"192.168.0.49:53704","remote":1,"playlist mode":"off","signalstrength":0,"playlist repeat":0,"player_name":"Squeezebox Receiver","mode":"play","current_title":"franceinter-hifi.aac","playlist_tracks":1,"player_connected":1,"mixer volume":50} material.min.js:236:300
                    [09:35:42] JSON UPDATING (00:04:20:16:07:0e) material.min.js:236:300
                    [09:35:42] JSON REQ: ["00:04:20:16:07:0e",["status","-",1,"tags:cdegiloqrstuyAABKNST"]] material.min.js:236:300
                    [09:35:42] JSON PLAYER (00:04:20:16:07:0e): {"playlist_loop":[{"title":"L'embellie","playlist index":0,"artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","coverid":"-93963708846232","duration":"2829","year":"0","id":"-93963708846232","bitrate":"128kbps CBR","samplerate":"48000","type":"aac","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\""}],"seq_no":0,"playlist_cur_index":"0","rate":1,"playlist shuffle":0,"digital_volume_control":1,"remoteMeta":{"id":"-93963708846232","title":"L'embellie","coverid":"-93963708846232","duration":"2829","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","type":"aac","bitrate":"128kbps CBR","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","year":"0","artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","samplerate":"48000"},"playlist_timestamp":1644744921.32209,"time":20.5689081859589,"player_name":"Squeezebox Receiver","playlist mode":"off","playlist repeat":0,"signalstrength":0,"remote":1,"power":1,"player_ip":"192.168.0.49:53704","player_connected":1,"mixer volume":50,"playlist_tracks":1,"mode":"play","current_title":"franceinter-hifi.aac"} material.min.js:236:300
                    [09:35:47] JSON UPDATING (00:04:20:16:07:0e) material.min.js:236:300
                    [09:35:47] JSON REQ: ["00:04:20:16:07:0e",["status","-",1,"tags:cdegiloqrstuyAABKNST"]] material.min.js:236:300
                    [09:35:47] JSON PLAYER (00:04:20:16:07:0e): {"player_name":"Squeezebox Receiver","playlist mode":"off","signalstrength":0,"playlist repeat":0,"remote":1,"player_ip":"192.168.0.49:53704","power":1,"mixer volume":50,"player_connected":1,"playlist_tracks":1,"current_title":"franceinter-hifi.aac","mode":"play","playlist_loop":[{"year":"0","duration":"2829","bitrate":"128kbps CBR","samplerate":"48000","type":"aac","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","id":"-93963708846232","title":"L'embellie","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","coverid":"-93963708846232","playlist index":0,"artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png"}],"seq_no":0,"playlist shuffle":0,"rate":1,"playlist_cur_index":"0","digital_volume_control":1,"playlist_timestamp":1644744921.32209,"time":25.5846841049194,"remoteMeta":{"id":"-93963708846232","title":"L'embellie","coverid":"-93963708846232","duration":"2829","album":"Bruno Patino : \"Face à la fatigue collective, il faudrait ménager du silence\"","type":"aac","bitrate":"128kbps CBR","url":"http://icecast.radiofrance.fr/franceinter-hifi.aac","year":"0","artwork_url":"/imageproxy/http%3A%2F%2Foblique.radiofrance.fr%2Ffiles%2Fcharte%2Flogos%2Fpng600%2FFranceInter.png/image.png","samplerate":"48000"}} material.min.js:236:300

                    Comment


                      #11
                      Originally posted by bpa View Post
                      To see what JSON requests the Material UI is using. Open the Material UI with the command below and all JSON request/response will be logged to the Browser Web developer console.
                      Code:
                      http://localhost:9000/material/?debug=json
                      Replace localhost with IP address of LMS server if necessary
                      From Safari
                      I can't connect http://localhost:9000/material/?debug=json (of course with my LMS IP)
                      but http://localhost:9000 display LMS.

                      Originally posted by mherger View Post
                      And please explain why you'd trust that menu more than you would trust
                      the extracted headers.
                      I trust it but when the value is not 0 ! I thought that the TuneIn value was the right value! (see my answer below).
                      Again for me the goal was to have a "streaming quality indicator" !

                      Originally posted by mherger View Post
                      IIRC that menu comes from TuneIn - who is NOT the
                      streaming service. The streaming service should know better.
                      I thought Tunein was the streaming service !


                      "Antenne Bayern top40" gives 192kbps CBR. What does CBR mean ??

                      To resume: if I understood well ;-)
                      If bitrate = 0 this value is not given by the streaming service and we canot know this value.

                      Thanks !

                      Comment


                        #12
                        Originally posted by PaulH View Post
                        From Safari
                        I can't connect http://localhost:9000/material/?debug=json (of course with my LMS IP)
                        but http://localhost:9000 display LMS.
                        Have you installed the Material plugin ?

                        I thought Tunein was the streaming service !
                        "Antenne Bayern top40" gives 192kbps CBR. What does CBR mean ??
                        No. They are a directory service (they redirect the player to the real broadcasters) but can also provide additional metadata (to encourage users to go through Tunein) - not always correct.

                        MP3 characteristic - wouldn't pay attention to it - rarely correct. Used to be important when internet speeds were measured in kbps.
                        CBR = Constant Bitrate
                        VBR = Variable Bitrate

                        Comment


                          #13
                          Originally posted by bpa View Post
                          Have you installed the Material plugin ?
                          No!! I haven't tried all plugins. For a novice it is not always easy to know what they are used for.
                          The less plugins there are, the faster the startup time?

                          Just installed now the Material and works. But sorry for my lack of knowledge where is "all JSON request/response will be logged to the Browser Web developer console" ?

                          Originally posted by bpa View Post
                          Have you installed the Material plugin ?
                          CBR = Constant Bitrate
                          VBR = Variable Bitrate
                          Pefect! Thanks !

                          Comment


                            #14
                            Originally posted by PaulH View Post
                            But sorry for my lack of knowledge where is "all JSON request/response will be logged to the Browser Web developer console" ?
                            Depends on your Browser.

                            Google is your friend.

                            Elfsight guide: learn how to open Developer Tools in any browser you use + How to find and iterpret the most common errors and solve them yourself.

                            Comment

                            Working...
                            X