Discussion:
[Savonet-users] Savonet-users Digest, Vol 126, Issue 13
Alan Fahrner
2017-03-23 22:42:28 UTC
Permalink
Hi Darren and Alex,

A belated thanks
didn’t see all of this until now.

Darren, the issue is with sc_trans. Any pointer on where I can read-up on those issues you mention?

Alex. Right now the station is using the built-in Centova Cast AutoDJ (I only mentioned SAM Broadcaster because I know, in a similar situation, it works). It is running against the source port.

No app is running against the DJ port
well, except liquidsoap. It sounds like you experienced exactly what I did.

Thanks for the script too
but I am confused. How does it ultimately get the title to the SHOUTCast server?

My best,

Alan
Subject: Re: [Savonet-users] Broadcasting to a SHOUTCast DJ Port
Date: March 21, 2017 at 3:08:53 PM MDT
One thing to keep in mind is that Centova's DJ support is going to either be done using LS or sc_trans depending on what's been done with the initial Centova setup (which may be out of your control if using a hosted solution). If it is sc_trans then that's the likely reason why metadata updates are failing as there were issues with that. If it's LS then maybe it's an older version or there's an issue with it's configuration from how Centova have set it up that is causing it.
-dro
Also worth mentioning that if you want a source to connect to a specific Sid on a v2 server, you can use the stream specifier as part of the password to map to its corresponding sid.
password = "hackme:#1"
password = "hackme:#2"
password = "hackme:#3"
For Shoutcast v1 you do not have to specify a username, but if you still feel the need, you should use "source" as the username
username = "source", password = "hackme"
You also do not need to specify an sid with v1 dnas
But I think maybe your question was more about metadata problems?
Can you detail a little more about what roles centova, liquidsoap, sam broadcaster, and Shoutcast dnas play?
Are you looking to replace sam with liquidsoap?
Which app is running the dj port?
Which app is running the 'source port'?
Which app is sending audio data to the dj port?
Im not sure if this is still the case with newer versions of liquidsoap but I was never able to get metadata updates to work when broadcasting to a liquidsoap created dj port that liquid soap then sends on to a dnas.
I had to create a http harbor that would listen for url based get requests containing the song title updates. Then watch a log file for title updates from my source software. When it sees a title thats different from the current it will curl the url setup in the http harbor with the new title as a url parameter.
Its the same concept as sending title updates via the admin.cgi url method on dnas.
The following is a complete working example.
####################################################################
# local ip address to bind and listen for input (dj or metadata)
set("harbor.bind_addr","127.0.0.1")
# port and pass for live djs to connect to (shoutcast protocol)
live = input.harbor(icy=true,"/",port=8010,password="PASS")
# path to playlist file which contains a list of local mp3's (/home/user/mp3/song.mp3)
playlist = playlist("/home/user/mp3/playlist.txt")
# path to failover song if all above fails
emergency = single("/home/user/mp3/backup.mp3")
# do not monitor for silence and specify the fallback/priority order
radio = fallback(track_sensitive=false,[live,playlist,emergency])
# function to manually set the song title
title = insert_metadata(radio)
insert = fst(title)
radio = snd(title)
def set_meta(~protocol,~data,~headers,uri) =
title = url.split(uri)
meta = metadata.export(snd(title))
ret = if meta != [] then insert(meta) "OK!" else "No metadata to add!" end
http_response(protocol=protocol,code=200,headers=[("Content-Type","text/html")],data="#{ret}") end
# port and uri to register metadata updates via http
harbor.http.register(port=8080,method="GET","/setmeta",set_meta)
# shoutcast servers to broadcast to
output.shoutcast(%mp3(bitrate=256,samplerate=44100,stereo=true),name="RADIO NAME",genre="GENRE",host="127.0.0.1",port = 8000,password = "PASS",radio)
##################################################################################
But after reading https://github.com/savonet/liquidsoap/blob/master/CHANGES <https://github.com/savonet/liquidsoap/blob/master/CHANGES> it looks like it wont be needing the manual method too much longer =]
Cheers,
Alex
I'm working without Centova Cast and I build my own management with
liquidsoap without any external software and there it works as I
pointed. So I guess the issue is based on the source of Centova Cast or
on the source-client itself.
BTW: liquidsoap is an v1 source, it doesn't handle the v2 protocol.
Open another port wher you can connect directly with a streaming
source-client like winamp-dsp or butt and pass meta-data, then compare
the output with your Centova Cast output in the logfiles. If should it
work, then the issue is based on the source of Centova Cast.
Thanks for the suggestion neralex. I gave it a shot, but it didn’t
change the behavior.
I suspected it wouldn’t
basically, if you don’t give it the icy_id, then
it defaults to 1.
It’s all very odd given if I connect to the source port, all is well. I
connect to the Centova Cast DJ port
meta data issues.
I’m curious, does anyone know if there is a way to force
output.shoutcast() to connect v1 versus v2? The way SAM Broadcaster
works is by connecting v1 (and the Centova Cast page says to connect
v1). But, I could not get liquidsoap to do that.
Either way, still can use help. :-)
My best,
Alan
*Subject: **Re: [Savonet-users] Broadcasting to a SHOUTCast DJ Port*
*Date: *March 19, 2017 at 5:19:12 AM MDT
Hey!
You have to set the "ic_id" parameter in the output.shoutcast function
#port and pass for djs
live =
input.harbor(icy=true,icy_metadata_charset="UTF-8","/",port=8610,password="hackme")
#fallback
emergency = single("/home/shoutcast/emergency/jingle_001.mp3")
radio = fallback(track_sensitive=false,[live,emergency])
Here is an example for an 192kbit mp3 stream, which is using the 1st
output.shoutcast(
%mp3(
bitrate=192,
samplerate=44100,
stereo=true
),
icy_id=1,
name="station name",
genre="genre",
host="127.0.0.1",
port=8000,
password="hackme",
url="http://www.domain.tld/fish" <http://www.domain.tld/fish>,
radio
)
The same way for the 2nd mountpoint (sid=2), which is used for an 96kbit
output.shoutcast(
%mp3(
bitrate=96,
samplerate=44100,
stereo=true
),
icy_id=2,
name="station name",
genre="genre",
host="127.0.0.1",
port=8000,
password="hackme",
url="http://www.domain.tld/fish" <http://www.domain.tld/fish>,
radio
)
Hi folks,
First, I’ve been having a great time experimenting with liquidsoap.
Thanks to everyone behind this.
I am running into two issues, one especially problematic.
The problematic one is that when I connect to the Centova Cast DJ port,
the server is not getting any data
and is throwing an error. From the
2017/03/18 18:11:01 [output(dot)shoutcast:3] Connecting mount sid#1 for
2017/03/18 18:11:01 [output(dot)shoutcast:3] Metadata update may have
failed with error: 404, Not Found: Weblet (HTTP/1.0)
On the SHOUTCast server side, it’s clear the end result is it got
nothing meta-wise.
I’ve searched and searched all over the place and have not seen anything
exactly like it. I’ve tried all types of things based on what sounded
* It works fine if I use the source port
* The connection on the DJ port is supposed to be SHOUTCast v1, which
means I shouldn’t give a name, but provide the password as
“username:password” - that never worked
I finally was able to
connect providing it separately as a user and a password
* If I set icy_metadata to “false” the error is no longer thrown, but
still no meta data gets the server
* If I set icy_id to 0, I cannot figure out a way to login (which is
probably fine, I had read something that made me wonder if I should
try 0)
Any ideas?
I will ask my other question in another e-mail to keep the string clean.
Thanks!
Alan
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org
<http://Slashdot.org> <http://slashdot.org/>! http://sdm.link/slashdot <http://sdm.link/slashdot>
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users <https://lists.sourceforge.net/lists/listinfo/savonet-users>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot <http://sdm.link/slashdot>
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users <https://lists.sourceforge.net/lists/listinfo/savonet-users>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot <http://sdm.link/slashdot>
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users <https://lists.sourceforge.net/lists/listinfo/savonet-users>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot <http://sdm.link/slashdot>
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users <https://lists.sourceforge.net/lists/listinfo/savonet-users>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users
Alex LaBranche
2017-03-25 07:07:17 UTC
Permalink
sc_trans has been end of lifed and is no longer supported if I'm not mistaken. It seemed pretty buggy too last I remember trying to use it.

If you have the option to use LS instead of trans for the auto dj, you may want to consider that.


Liquidsoap updates the title using in-stream metadata.

You can also make the http get request directly to the output Shoutcast server.

http://127.0.0.1:8000/admin.cgi?pass=hackme&mode=updinfo&song=SongTitleGoesHere


my setup includes a number of outputs including several sid's on a Shoutcast v2 server. aac and mp3, each in 4 different bitrates. And another 8 of the same to an icecast server. so instead of making 16 http get requests for all the streams, I make 1 to LS.

Cheers,

alex
Post by Alan Fahrner
Hi Darren and Alex,
A belated thanks
didn’t see all of this until now.
Darren, the issue is with sc_trans. Any pointer on where I can read-up on those issues you mention?
Alex. Right now the station is using the built-in Centova Cast AutoDJ (I only mentioned SAM Broadcaster because I know, in a similar situation, it works). It is running against the source port.
No app is running against the DJ port
well, except liquidsoap. It sounds like you experienced exactly what I did.
Thanks for the script too
but I am confused. How does it ultimately get the title to the SHOUTCast server?
My best,
Alan
Subject: Re: [Savonet-users] Broadcasting to a SHOUTCast DJ Port
Date: March 21, 2017 at 3:08:53 PM MDT
One thing to keep in mind is that Centova's DJ support is going to either be done using LS or sc_trans depending on what's been done with the initial Centova setup (which may be out of your control if using a hosted solution). If it is sc_trans then that's the likely reason why metadata updates are failing as there were issues with that. If it's LS then maybe it's an older version or there's an issue with it's configuration from how Centova have set it up that is causing it.
-dro
Also worth mentioning that if you want a source to connect to a specific Sid on a v2 server, you can use the stream specifier as part of the password to map to its corresponding sid.
password = "hackme:#1"
password = "hackme:#2"
password = "hackme:#3"
For Shoutcast v1 you do not have to specify a username, but if you still feel the need, you should use "source" as the username
username = "source", password = "hackme"
You also do not need to specify an sid with v1 dnas
But I think maybe your question was more about metadata problems?
Can you detail a little more about what roles centova, liquidsoap, sam broadcaster, and Shoutcast dnas play?
Are you looking to replace sam with liquidsoap?
Which app is running the dj port?
Which app is running the 'source port'?
Which app is sending audio data to the dj port?
Im not sure if this is still the case with newer versions of liquidsoap but I was never able to get metadata updates to work when broadcasting to a liquidsoap created dj port that liquid soap then sends on to a dnas.
I had to create a http harbor that would listen for url based get requests containing the song title updates. Then watch a log file for title updates from my source software. When it sees a title thats different from the current it will curl the url setup in the http harbor with the new title as a url parameter.
"http://127.0.0.1:8080/setmeta?title=SongTitleGoesHere"
/dev/null 2>&1
Its the same concept as sending title updates via the admin.cgi url method on dnas.
The following is a complete working example.
####################################################################
# local ip address to bind and listen for input (dj or metadata)
set("harbor.bind_addr","127.0.0.1")
# port and pass for live djs to connect to (shoutcast protocol)
live = input.harbor(icy=true,"/",port=8010,password="PASS")
# path to playlist file which contains a list of local mp3's (/home/user/mp3/song.mp3)
playlist = playlist("/home/user/mp3/playlist.txt")
# path to failover song if all above fails
emergency = single("/home/user/mp3/backup.mp3")
# do not monitor for silence and specify the fallback/priority order
radio = fallback(track_sensitive=false,[live,playlist,emergency])
# function to manually set the song title
title = insert_metadata(radio)
insert = fst(title)
radio = snd(title)
def set_meta(~protocol,~data,~headers,uri) =
title = url.split(uri)
meta = metadata.export(snd(title))
ret = if meta != [] then insert(meta) "OK!" else "No metadata to add!" end
http_response(protocol=protocol,code=200,headers=[("Content-Type","text/html")],data="#{ret}") end
# port and uri to register metadata updates via http
harbor.http.register(port=8080,method="GET","/setmeta",set_meta)
# shoutcast servers to broadcast to
output.shoutcast(%mp3(bitrate=256,samplerate=44100,stereo=true),name="RADIO NAME",genre="GENRE",host="127.0.0.1",port = 8000,password = "PASS",radio)
##################################################################################
But after reading
https://github.com/savonet/liquidsoap/blob/master/CHANGES
it looks like it wont be needing the manual method too much longer =]
Cheers,
Alex
I'm working without Centova Cast and I build my own management with
liquidsoap without any external software and there it works as I
pointed. So I guess the issue is based on the source of Centova Cast or
on the source-client itself.
BTW: liquidsoap is an v1 source, it doesn't handle the v2 protocol.
Open another port wher you can connect directly with a streaming
source-client like winamp-dsp or butt and pass meta-data, then compare
the output with your Centova Cast output in the logfiles. If should it
work, then the issue is based on the source of Centova Cast.
Thanks for the suggestion neralex. I gave it a shot, but it didn’t
change the behavior.
I suspected it wouldn’t
basically, if you don’t give it the icy_id, then
it defaults to 1.
It’s all very odd given if I connect to the source port, all is well. I
connect to the Centova Cast DJ port
meta data issues.
I’m curious, does anyone know if there is a way to force
output.shoutcast() to connect v1 versus v2? The way SAM Broadcaster
works is by connecting v1 (and the Centova Cast page says to connect
v1). But, I could not get liquidsoap to do that.
Either way, still can use help. :-)
My best,
Alan
*From: *neralex <
*Subject: **Re: [Savonet-users] Broadcasting to a SHOUTCast DJ Port*
*Date: *March 19, 2017 at 5:19:12 AM MDT
*To: *
*Reply-To: *
Hey!
You have to set the "ic_id" parameter in the output.shoutcast function
#port and pass for djs
live =
input.harbor(icy=true,icy_metadata_charset="UTF-8","/",port=8610,password="hackme")
#fallback
emergency = single("/home/shoutcast/emergency/jingle_001.mp3")
radio = fallback(track_sensitive=false,[live,emergency])
Here is an example for an 192kbit mp3 stream, which is using the 1st
output.shoutcast(
%mp3(
bitrate=192,
samplerate=44100,
stereo=true
),
icy_id=1,
name="station name",
genre="genre",
host="127.0.0.1",
port=8000,
password="hackme",
url=
"http://www.domain.tld/fish"
,
radio
)
The same way for the 2nd mountpoint (sid=2), which is used for an 96kbit
output.shoutcast(
%mp3(
bitrate=96,
samplerate=44100,
stereo=true
),
icy_id=2,
name="station name",
genre="genre",
host="127.0.0.1",
port=8000,
password="hackme",
url=
"http://www.domain.tld/fish"
,
radio
)
Hi folks,
First, I’ve been having a great time experimenting with liquidsoap.
Thanks to everyone behind this.
I am running into two issues, one especially problematic.
The problematic one is that when I connect to the Centova Cast DJ port,
the server is not getting any data
and is throwing an error. From the
2017/03/18 18:11:01 [output(dot)shoutcast:3] Connecting mount sid#1 for
2017/03/18 18:11:01 [output(dot)shoutcast:3] Metadata update may have
failed with error: 404, Not Found: Weblet (HTTP/1.0)
On the SHOUTCast server side, it’s clear the end result is it got
nothing meta-wise.
I’ve searched and searched all over the place and have not seen anything
exactly like it. I’ve tried all types of things based on what sounded
* It works fine if I use the source port
* The connection on the DJ port is supposed to be SHOUTCast v1, which
means I shouldn’t give a name, but provide the password as
“username:password” - that never worked
I finally was able to
connect providing it separately as a user and a password
* If I set icy_metadata to “false” the error is no longer thrown, but
still no meta data gets the server
* If I set icy_id to 0, I cannot figure out a way to login (which is
probably fine, I had read something that made me wonder if I should
try 0)
Any ideas?
I will ask my other question in another e-mail to keep the string clean.
Thanks!
Alan
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites,
Slashdot.org
<http://Slashdot.org>! http://sdm.link/slashdot
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites,
Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites,
Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites,
Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot_______________________________________________
Savonet-users mailing list
https://lists.sourceforge.net/lists/listinfo/savonet-users
Loading...